Làm cách nào để thêm email của khách hàng vào hóa đơn bán hàng?


7

Về cơ bản tìm cách thêm email khách hàng vào biên lai (hóa đơn) của khách hàng và email đơn đặt hàng được tạo ra để gửi / chuyển phát nhanh, v.v.

Với một chút tìm kiếm tôi đã thiết lập cách tốt nhất để làm điều này chỉ đơn giản là thêm biến này thông qua khu vực hệ thống quản trị magento. Vì vậy, dưới đây:

System > Configuration > Customers > Customer Configuration > Address Templates

Điều này mang đến tất cả các trường mẫu địa chỉ cho văn bản, html, pdf, v.v.

Vì vậy, tôi đã thêm những gì tôi tin là tên biến cần vào mỗi hộp ở đây.

Vì vậy, ví dụ html là bây giờ:

{{phụ thuộc tiền tố}} {{tiền tố var}} {{/ phụ thuộc}} {{var Firstname}} {{phụ thuộc vào middlename}} {{var middlename}} {{/ phụ thuộc}} {{var lastname}} {{ phụ thuộc hậu tố}} {{var hậu tố}} {{/ phụ thuộc}}
{{phụ thuộc công ty}} {{var company}}
{{/ phụ thuộc}} {{if street1}} {{var street1}}
{{/ if }} {{lệ thuộc street2}} {{var street2}}
{{/ phụ thuộc}} {{lệ thuộc đường phố3}} {{var street3}}
{{/ lệ}} {{lệ thuộc đường phố4}} {{var street4}}
{{/ lệ thuộc}} {{if city}} {{var city}}, {{/ if}} {{if area}} {{var area}}, {{/ if}} {{if mã bưu điện}} {{var postcode}} {{/ if}}
{{var country}}
{{điện thoại phụ thuộc}} Di động: {{var phone}} {{/ lệ}} {{phụ thuộc fax}}
Điện thoại cố định: {{var fax }} {{/ lệ thuộc}} {{phụ thuộc vat_id}}
VAT: {{var vat_id}} {{/ phụ thuộc}} {{email phụ thuộc}} Email: {{var email}} {{/ phụ thuộc}}

Vì vậy, dòng quan trọng đối với tôi là dưới đây:

{{email phụ thuộc}} Email: {{var email}} {{/ lệ thuộc}}

Ngoài 1 thay đổi này, có điều gì khác tôi không làm để biến biến này được thêm vào các mẫu địa chỉ giao hàng không?


Bất cứ ai cũng có thể cung cấp bất kỳ trợ giúp về điều này cả? Vẫn không có niềm vui khi tìm thấy câu trả lời cho câu hỏi này .... dường như đủ thẳng, nhưng thật không may ..... hy vọng đó là trường hợp thiết lập biến chính xác và không cần tham gia bảng hoặc bất cứ điều gì tương tự. ...?
MagentoMac

Vẫn còn vấp ngã với điều này .... trang này có một số manh mối, nhưng không chắc các biến chính xác đến mức nào: magentoc Commerce.com/wiki/modules_Vference/english/ Khăn Tôi đã thử chỉ "email", cũng như "customer_email" và "data.email" chưa có gì kéo qua cả .......
MagentoMac

Câu trả lời:


9

Bạn có thể nhận email khách hàng như thế này trong mẫu hóa đơn hoặc đơn đặt hàng:

{{var order.getCustomerEmail()}}

VÌ bạn có thể thử thêm

Email: {{var order.getCustomerEmail()}}

sau

{{var order.shipping_address.format('html')}}

[Chỉnh sửa]
Đối với pdf, bạn nên thay thế từMage_Sales_Model_Order_Pdf_Abstract::insertOrder

$shippingAddress = $this->_formatAddress($order->getShippingAddress()->format('pdf'));

với

$shippingAddress = $this->_formatAddress($order->getShippingAddress()->format('pdf').'|'.Mage::helper('sales')->__('Email:').$order->getCustomerEmail());  

Tất nhiên bạn không nên chỉnh sửa mã lõi.
Bạn phải sao chép tập tin vào thư mục cục bộ. Bạn không thể thực hiện ghi đè đơn giản vì đây là lớp trừu tượng.


Bạn đã kiểm tra điều đó? Sử dụng trong mẫu địa chỉ PDF không hiển thị e-mail của khách hàng trên PDF. Nó chỉ hiển thị "Email:".
Simon

@ Simon. Xem cập nhật của tôi.
Marius

4

Có một cách dễ dàng hơn để thêm nó vào tất cả các email cấu hình của khách hàng. Chỉ cần viết lại Mage_Customer_Helper_Address và nó vào danh sách thuộc tính địa chỉ khách hàng. Vì vậy, mở ra

Hệ thống> Cấu hình> Khách hàng> Cấu hình khách hàng> Mẫu địa chỉ

và thêm

{{depends email}}{{var email}}{{/depends}}

để bố trí bất cứ nơi nào bạn cần nó.

Tạo app/code/community/Elgentos/AddressWithEmail/etc/config.xmltập tin của bạn ;

<?xml version="1.0"?>
<config>
    <modules>
        <Elgentos_AddressWithEmail>
            <version>0.1.0</version>
        </Elgentos_AddressWithEmail>
    </modules>
    <global>
        <helpers>
            <customer>
                <rewrite>
                    <address>Elgentos_AddressWithEmail_Helper_Customer_Address</address>
                </rewrite>
            </customer>
        </helpers>
    </global>
</config>

Sau đó tạo người trợ giúp tại app/code/community/Elgentos/AddressWithEmail/Helper/Customer/Address.php;

<?php

class Elgentos_AddressWithEmail_Helper_Customer_Address extends Mage_Customer_Helper_Address
{

    public function getAttributes()
    {
        $this->_attributes = parent::getAttributes();

        if(!isset($this->_attributes['email'])) {
            $config = Mage::getSingleton('eav/config');
            $this->_attributes['email'] = $config->getAttribute('customer', 'email');
        }

        return $this->_attributes;
    }

}

và cuối cùng tạo app/etc/modules/Elgentos_AddressWithEmail.xmltập tin khai báo mô-đun của bạn ;

<?xml version="1.0"?>
<config>
    <modules>
        <Elgentos_AddressWithEmail>
            <active>true</active>
            <codePool>community</codePool>
            <depends>
                <Mage_Customer/>

            </depends>
        </Elgentos_AddressWithEmail>
    </modules>
</config>

Xóa bộ nhớ cache của bạn và bạn đã hoàn tất!

Bạn có thể tìm thấy phần mở rộng tổng hợp đầy đủ trên Github; https://github.com/elgentos/AddressWithEmail


Mô-đun này hoạt động hoàn hảo!
Eric Seastrand

2

Rất tiếc, email không phải là trường địa chỉ khách hàng và có thể được tìm thấy trong tất cả các thực thể có liên quan đến địa chỉ - báo giá, đơn đặt hàng, khách hàng - ngoại trừ chính địa chỉ :-) Những gì bạn đang cố gắng không đơn giản, nhưng có thể ít nhiều đạt được Bạn sẽ cần một mô-đun tùy chỉnh cho điều đó.

Tất cả mọi thứ xảy ra trong Mage_Customer_Block_Address_Renderer_Default, trong render()phương pháp. Như bạn có thể thấy, các biến được kết xuất được tải từ cấu hình EAV và vì email không phải là thuộc tính địa chỉ của khách hàng, nên nó sẽ không khả dụng trong khi kết xuất. Tuy nhiên, bạn có thể tìm cách ghi đè render()phương thức đó và truy xuất địa chỉ email từ đó.

Tất nhiên bạn có thể viết lại lớp hoàn toàn bằng cách viết lại Magento trong của bạn config.xml, như thế này:

<config>
    <blocks>
        <customer>
            <rewrite>
                <address_renderer_default>Your_Module_Block_Address_Renderer</address_renderer_default>
            </rewrite>
        </customer>
    </blocks>
</config>

Điều này là không cần thiết mặc dù, và nó không thực sự tốt nhất.

Magento cho phép bạn xác định trình kết xuất cho từng định dạng địa chỉ (văn bản, html, oneline, pdf, v.v.). Trình kết xuất định dạng được định nghĩa config.xmlnhư sau:

<config>
    <global>
        <blocks>
            <your_module>
                <class>Your_Module_Block</class>
            </your_module>
        </blocks>
        <customer>
            <address>
                <formats>
                    <html>
                        <renderer>your_module/address_renderer</renderer>
                    </html>
                </formats>
            </address>
        </customer>
    </global>
</config>

Bây giờ chúng tôi đã xác định trình kết xuất địa chỉ tùy chỉnh cho định dạng HTML, chúng tôi có thể triển khai logic của nó như sau:

// File path: app/code/[codePool]/Your/Module/Block/Address/Renderer.php
class Your_Module_Block_Address_Renderer extends Mage_Customer_Block_Address_Renderer_Default
{
    public function render(Mage_Customer_Model_Address_Abstract $address, $format = null)
    {
        $email = $address->getEmail(); // Works for quote and order addresses
        // Rest of your logic goes here...
    }
}

Tôi biết điều này có vẻ rất nhiều, nhưng nó hoạt động chắc chắn. Tôi không thể tìm thấy bất kỳ cách dễ dàng hơn bằng cách nhìn vào Magento Core, hy vọng điều này sẽ giúp.


1

để nhận được gmail của khách hàng tại mẫu orde sử dụng

mã dưới đây

 {{htmlescape var=$order.getCustomerEmail()}}  on you html  emailtemplate

1

Nếu bạn muốn thêm email của khách hàng vào hóa đơn PDF, đây là các bước:

Sao chép một bản sao cục bộ của tệp Abstract.php bằng cách sao chép từ

ứng dụng / mã / lõi / Pháp sư / Bán hàng / Mô hình / Đơn hàng / Pdf / Tóm tắt.php

đến

ứng dụng / mã / cục bộ / Pháp sư / Bán hàng / Mô hình / Đơn hàng / Pdf / Tóm tắt.php

Nếu bạn muốn hiển thị email của khách hàng trên Địa chỉ thanh toán (Được bán cho), trên bản sao cục bộ của tệp trên. Thực hiện các thay đổi sau xung quanh dòng 313:

<?php
//replace
$billingAddress =
$this->_formatAddress($order->getBillingAddress()->format('pdf'));

//with
$billingAddress =
$this->_formatAddress($order->getBillingAddress()->format('pdf').Mage::helper("sales")->__('Email:
'. $order ->getCustomerEmail()));
?>

Nếu bạn muốn hiển thị email của khách hàng trên Địa chỉ giao hàng (Gửi đến), hãy thực hiện các thay đổi sau trên cùng một tệp xung quanh dòng 331

<?php
//replace
$shippingAddress =
$this->_formatAddress($order->getShippingAddress()->format('pdf'));

//with
$shippingAddress =
$this->_formatAddress($order->getShippingAddress()->format('pdf').Mage::helper("sales")->__('Email:
'. $order ->getCustomerEmail()));
?>

Xóa bộ nhớ cache. Nó sẽ hoạt động để thêm email của khách hàng vào hóa đơn PDF.


1

Chỉ cần ghi đè dự án DefaultRenderer.php \ magento \ app \ code \ Modulename \ Rewrite \ etc \ di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Customer\Block\Address\Renderer\DefaultRenderer"
        type="Modulename\Rewrite\Magento\Customer\Block\Address\Renderer\DefaultRenderer"/>
</config>

dự án \ magento \ app \ code \ Modulename \ Rewrite \ etc \ module.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Modulename_Rewrite" setup_version="2.0.1">
</module>

D: \ ribstore \ magento \ app \ code \ Modulename \ Rewrite \ Magento \ Customer \ Block \ Địa chỉ \ Renderer \ DefaultRenderer.php

<?php

không gian tên Selldeck \ Rewrite \ Magento \ Customer \ Block \ Địa chỉ \ Renderer;

sử dụng Magento \ Khách hàng \ Mẫu \ Địa chỉ \ Mapper; sử dụng Magento \ Khách hàng \ Mô hình \ Siêu dữ liệu \ ElementFactory;

lớp DefaultRenderer mở rộng \ Magento \ Khách hàng \ Chặn \ Địa chỉ \ Renderer \ DefaultRenderer {

protected $_customerMetadataService;

public function __construct(
    \Magento\Framework\View\Element\Context $context,
ElementFactory $elementFactory,
    \Magento\Directory\Model\CountryFactory $countryFactory,
    \Magento\Customer\Api\AddressMetadataInterface $metadataService,
Mapper $addressMapper,
    \Magento\Customer\Api\CustomerMetadataInterface $customerMetadataService,
    array $data = []
)
{
    parent::__construct($context, $elementFactory, $countryFactory, $metadataService, $addressMapper, $data);
    $this->_customerMetadataService = $customerMetadataService;
}

/**
 * {@inheritdoc}
 *
 * @SuppressWarnings(PHPMD.CyclomaticComplexity)
 * @SuppressWarnings(PHPMD.NPathComplexity)
 */
public function renderArray($addressAttributes, $format = null)
{
    switch ($this->getType()->getCode()) {
        case 'html':
            $dataFormat = ElementFactory::OUTPUT_FORMAT_HTML;
            break;
        case 'pdf':
            $dataFormat = ElementFactory::OUTPUT_FORMAT_PDF;
            break;
        case 'oneline':
            $dataFormat = ElementFactory::OUTPUT_FORMAT_ONELINE;
            break;
        default:
            $dataFormat = ElementFactory::OUTPUT_FORMAT_TEXT;
            break;
    }

    $attributesMetadata = $this->_addressMetadataService->getAllAttributesMetadata();
    $attributesMetadata[] = $this->_customerMetadataService->getAttributeMetadata('email');
    $data = [];
    foreach ($attributesMetadata as $attributeMetadata) {
        if (!$attributeMetadata->isVisible()) {
            continue;
        }
        $attributeCode = $attributeMetadata->getAttributeCode();
        if ($attributeCode == 'country_id' && isset($addressAttributes['country_id'])) {
            $data['country'] = $this->_countryFactory->create()->loadByCode(
                $addressAttributes['country_id']
            )->getName();
        } elseif ($attributeCode == 'region' && isset($addressAttributes['region'])) {
            $data['region'] = __($addressAttributes['region']);
        } elseif (isset($addressAttributes[$attributeCode])) {
            $value = $addressAttributes[$attributeCode];
            $dataModel = $this->_elementFactory->create($attributeMetadata, $value, 'customer_address');
            $value = $dataModel->outputValue($dataFormat);
            if ($attributeMetadata->getFrontendInput() == 'multiline') {
                $values = $dataModel->outputValue(ElementFactory::OUTPUT_FORMAT_ARRAY);
                // explode lines
                foreach ($values as $k => $v) {
                    $key = sprintf('%s%d', $attributeCode, $k + 1);
                    $data[$key] = $v;
                }
            }
            $data[$attributeCode] = $value;
        }
    }
    if ($this->getType()->getEscapeHtml()) {
        foreach ($data as $key => $value) {
            $data[$key] = $this->escapeHtml($value);
        }
    }
    $format = $format !== null ? $format : $this->getFormatArray($addressAttributes);
    return $this->filterManager->template($format, ['variables' => $data]);
}

}

cuối cùng nâng cấp, biên dịch, triển khai, sau đó reindex và bộ đệm thịt Trong quản trị viên chỉ cần thêm tại Hệ thống> Cấu hình> Khách hàng> Cấu hình khách hàng> Mẫu địa chỉ

{{depend email}}Email: {{var email}}{{/depend}}

Tôi đã thử nghiệm giải pháp này, làm việc tốt cho tôi..Cảm ơn!
nuwaus

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.