顧客のメールを売上請求書に追加するにはどうすればよいですか?


7

基本的に、お客様のレシート(請求書)および発送/宅配便などに生成される注文メールに顧客のメールを追加しようとしています。

少し検索して、これを行う最善の方法は、magento管理システム領域を介してこの変数を追加することです。だから以下:

System > Configuration > Customers > Customer Configuration > Address Templates

これにより、テキスト、html、pdfなどのすべてのアドレステンプレートフィールドが表示されます。

そこで、変数名の必要性であると私が思うものをここの各ボックスに追加しました。

したがって、たとえばhtmlは次のようになります。

{{依存接頭辞}} {{var接頭辞}} {{/ depend}} {{var firstname}} {{depend middlename}} {{var middlename}} {{/ depend}} {{var lastname}} {{ depend suffix}} {{var suffix}} {{/ depend}}
{{depend company}} {{var company}}
{{/ depend}} {{if street1}} {{var street1}}
{{/ if }} {{depend street2}} {{var street2}}
{{/ depend}} {{depend street3}} {{var street3}}
{{/ depend}} {{depend street4}} {{var street4}}
{{/ depend}} {{if city}} {{var city}}、{{/ if}} {{if region}} {{var region}}、{{/ if}} {{if postcode}} {{var postcode}} {{/ if}}
{{var country}}
{{depend電話}}携帯電話:{{var telephone}} {{/ depend}} {{depend fax}}
固定電話:{{var fax }} {{/ depend}} {{depend vat_id}}
VAT:{{var vat_id}} {{/ depend}} {{depend email}}メール:{{var email}} {{/ depend}}

だから私にとってのキーラインは以下のとおりです:

{{depend email}}メール:{{var email}} {{/ depend}}

この1つの変更以外に、この変数を配送先住所テンプレートに追加するために失敗したことはありますか?


これについて何か助けを提供できる人は誰ですか?まだこの質問に対する答えを見つける喜びがありません....十分に簡単なようですが、残念ながらそうではありません.....それが正しい変数を確立するケースであり、テーブル結合またはそのようなものが必要ないことを願っています。 ...?
MagentoMac 2014

それでもこれでつまずき....このページには、いくつかの手がかりを持っていますが、変数はいないことを確認どのように正確な:magentocommerce.com/wiki/modules_reference/english/...が、私は「CUSTOMER_EMAIL」とだけでなく、単に「電子メール」を試してみましたまだとしてを通じて何かを引っ張って「data.email」何もありません.......
MagentoMac

回答:


9

このような顧客のメールは、請求書または注文テンプレートで受け取ることができます。

{{var order.getCustomerEmail()}}

だからあなたは追加しようとすることができます

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

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

[編集]
PDFの場合、これをMage_Sales_Model_Order_Pdf_Abstract::insertOrder

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

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

もちろん、コアコードを編集するべきではありません。
ファイルをローカルフォルダーにコピーする必要があります。抽象クラスであるため、単純なオーバーライドはできません。


あなたはそれをテストしましたか?PDFアドレステンプレートでそれを使用しても、顧客の電子メールはPDFに表示されません。「Email:」と表示されているだけです。
Simon

@Simon。私の更新を参照してください。
マリウス

4

すべての顧客設定メールに追加する簡単な方法があります。Mage_Customer_Helper_Addressとそれを顧客住所属性リストに書き換えるだけです。だから開けて

システム>構成>顧客>顧客構成>アドレステンプレート

そして追加

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

あなたがそれを必要とするところはどこでもレイアウトに。

app/code/community/Elgentos/AddressWithEmail/etc/config.xmlファイルを作成します。

<?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>

次にでヘルパーを作成し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;
    }

}

最後にapp/etc/modules/Elgentos_AddressWithEmail.xmlモジュール宣言ファイルを作成します。

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

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

キャッシュをクリアすれば完了です。

Githubで完全に構成された拡張機能を見つけることができます。https://github.com/elgentos/AddressWithEmail


このモジュールは完全に機能しました!
エリックイーストランド2018

2

残念ながら、このメールは顧客の住所フィールドではなく、住所に関連するすべてのエンティティ(見積もり、注文、顧客-住所自体を除く)で見つけることができます。多かれ少なかれ達成されました。そのためのカスタムモジュールが必要になります。

すべてがメソッド内Mage_Customer_Block_Address_Renderer_Defaultで発生しrender()ます。ご覧のとおり、レンダリングされた変数はEAV構成から読み込まれます。メールは顧客の住所属性ではないため、レンダリング中は使用できません。それでも、そのrender()メソッドをオーバーライドしてそこからメールアドレスを取得する方法を見つけることができます。

もちろんconfig.xml、次のようにでMagento rewritesを使用してクラスを完全に書き直すことができます。

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

これは必要ありませんが、実際にはベストプラクティスではありません。

Magentoでは、各アドレス形式(テキスト、html、oneline、pdfなど)のレンダラーを定義できます。形式レンダラーは次のconfig.xmlように定義されています。

<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>

HTML形式のカスタムアドレスレンダラーを定義したので、次のようなロジックを実装できます。

// 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...
    }
}

これは多くのように見えますが、確かに動作します。Magento Coreを見て簡単な方法を見つけることができませんでした。


1

ordeテンプレートの使用時に顧客のGmailを取得するため

コードの下

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

1

PDF請求書に顧客の電子メールを追加する場合の手順は次のとおりです。

からコピーして、ファイルAbstract.phpのローカルコピーをコピーします。

app / code / core / Mage / Sales / Model / Order / Pdf / Abstract.php

app / code / local / Mage / Sales / Model / Order / Pdf / Abstract.php

請求先住所(販売先)に顧客の電子メールを表示する場合は、上記のファイルのローカルコピーに。313行目で次の変更を行います。

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

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

配送先住所(配送先)にお客様のメールアドレスを表示する場合は、同じファイルで331行目あたりに次の変更を加えます。

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

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

キャッシュをクリアします。PDFの請求書に顧客の電子メールを追加するように機能するはずです。


1

DefaultRenderer.php project \ 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>

project \ 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 \ Address \ Renderer \ DefaultRenderer.php

<?php

名前空間Sellerdeck \ Rewrite \ Magento \ Customer \ Block \ Address \ Renderer;

Magento \ Customer \ Model \ Address \ Mapperを使用してください。Magento \ Customer \ Model \ Metadata \ ElementFactoryを使用します。

クラスDefaultRendererは\ Magento \ Customer \ Block \ Address \ 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]);
}

}

最後に、アップグレード、コンパイル、デプロイ、そして再フレッシュとキャッシュのフレッシュアドミンで管理>システム>構成>顧客>顧客の構成>アドレステンプレートで追加します

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

私はこのソリューションをテストしましたが、うまく機能します。ありがとう!
nuwaus

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.