Wie füge ich die E-Mail eines Kunden zur Verkaufsrechnung hinzu?

7

Im Wesentlichen möchten wir Kunden-E-Mails zu den Belegen (Rechnungen) und Kundenauftrags-E-Mails unserer Kunden hinzufügen, die auch für Versand / Kuriere usw. generiert werden.

Mit ein wenig Suchen habe ich festgestellt, dass der beste Weg, dies zu tun, darin besteht, diese Variable einfach über den Magento-Administrationssystembereich hinzuzufügen. Also unten:

System > Configuration > Customers > Customer Configuration > Address Templates

Dadurch werden alle Adressvorlagenfelder für Text, HTML, PDF usw. angezeigt.

Also habe ich hier in jedes Feld etwas eingefügt, von dem ich glaube, dass es der Variablenname ist.

So ist zum Beispiel HTML jetzt:

{{abhängiges Präfix}} {{var Präfix}} {{/ abhängig}} {{var Vorname}} {{abhängiger Vorname}} {{var Vorname}} {{/ abhängig}} {{var Nachname}} {{ abhängiges Suffix}} {{var Suffix}} {{/ abhängige}}
{{abhängige Firma}} {{var Firma}}
{{/ abhängige}} {{if street1}} {{var street1}}
{{/ if }} {{abhängig von Straße2}} {{var Straße2}}
{{/ abhängig}} {{abhängig Straße3}} {{var Straße3}}
{{/ abhängig}} {{abhängig Straße4}} {{var Straße4}}
{{/ abhängig}} {{wenn Stadt}} {{var Stadt}}, {{/ wenn}} {{wenn Region}} {{var Region}}, {{/ wenn}} {{wenn Postleitzahl}} {{var postcode}} {{/ if}}
{{var country}}
{{abhängig Telefon}} Mobil: {{var Telefon}} {{/ abhängig}} {{abhängig Fax}}
Festnetz: {{var Fax }} {{/ abhängig}} {{abhängig vat_id}}
Mehrwertsteuer: {{var vat_id}} {{/ abhängige}} {{abhängige E-Mail}} E-Mail: {{var E-Mail}} {{/ abhängige}}

Die Schlüsselzeile für mich ist also die folgende:

{{abhängige E-Mail}} E-Mail: {{var email}} {{/ abhängig}}

Gibt es außer dieser 1 Änderung noch etwas, was ich nicht tun kann, um diese Variable zu den Versandadressvorlagen hinzuzufügen?

MagentoMac
quelle
Kann jemand dazu überhaupt Hilfe anbieten? Ich habe immer noch keine Freude daran, die Antwort auf diese Frage zu finden. Scheint einfach zu sein, ist es aber leider nicht. Ich hoffe, es geht darum, die richtige Variable zu etablieren und dass kein Tabellen-Join oder ähnliches erforderlich ist. ...?
MagentoMac
Ich stolpere immer noch darüber ... diese Seite hat einige Hinweise, ist sich aber nicht sicher, wie genau die Variablen sind: magentocommerce.com/wiki/modules_reference/english/… Ich habe nur "email" sowie "customer_email" und versucht "data.email" noch nichts durchziehen .......
MagentoMac

Antworten:

9

Sie können die Kunden-E-Mail wie folgt in den Rechnungs- oder Bestellvorlagen erhalten:

{{var order.getCustomerEmail()}}

SO können Sie versuchen, hinzuzufügen

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

nach

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

[Bearbeiten]
Für PDF sollten Sie dies von ersetzenMage_Sales_Model_Order_Pdf_Abstract::insertOrder

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

mit

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

Natürlich sollten Sie den Kerncode nicht bearbeiten.
Sie müssen die Datei in den lokalen Ordner kopieren. Sie können keine einfache Überschreibung durchführen, da es sich um eine abstrakte Klasse handelt.

Marius
quelle
Hast du das getestet? Wenn Sie dies in der PDF-Adressvorlage verwenden, wird die Kunden-E-Mail nicht im PDF angezeigt. Es wird nur "Email:" angezeigt.
Simon
@ Simon. Siehe mein Update.
Marius
4

Es gibt eine einfachere Möglichkeit, es allen Kundenkonfigurations-E-Mails hinzuzufügen. Schreiben Sie einfach Mage_Customer_Helper_Address und es in die Attributliste der Kundenadresse. Also mach auf

System> Konfiguration> Kunden> Kundenkonfiguration> Adressvorlagen

und hinzufügen

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

zu den Layouts, wo immer Sie es brauchen.

Erstellen Sie Ihre app/code/community/Elgentos/AddressWithEmail/etc/config.xmlDatei;

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

Erstellen Sie dann den Helfer bei 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;
    }

}

und zuletzt erstellen Sie Ihre app/etc/modules/Elgentos_AddressWithEmail.xmlModuldeklarationsdatei;

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

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

Leere deinen Cache und du bist fertig!

Die vollständige komponierte Erweiterung finden Sie auf Github. https://github.com/elgentos/AddressWithEmail

Peter Jaap Blaakmeer
quelle
Dieses Modul hat perfekt funktioniert!
Eric Seastrand
2

Die E-Mail ist leider kein Kundenadressfeld und kann in allen Entitäten gefunden werden, die mit Adressen in Verbindung stehen - Angebote, Bestellungen, Kunden - mit Ausnahme der Adressen selbst :-) Was Sie versuchen, ist nicht einfach, kann es aber sein mehr oder weniger erreicht. Dafür benötigen Sie ein benutzerdefiniertes Modul.

Alles passiert Mage_Customer_Block_Address_Renderer_Defaultin der render()Methode. Wie Sie sehen, werden gerenderte Variablen aus der EAV-Konfiguration geladen. Da die E-Mail kein Kundenadressattribut ist, ist sie beim Rendern nicht verfügbar. Sie können jedoch eine Möglichkeit finden, diese render()Methode zu überschreiben und die E-Mail-Adresse von dort abzurufen.

Sie können die Klasse natürlich vollständig neu schreiben, indem Sie Magento-Umschreibungen in Ihrer Klasse config.xmlwie folgt verwenden :

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

Dies ist jedoch nicht erforderlich und keine wirklich bewährte Methode.

Mit Magento können Sie für jedes Adressformat (Text, HTML, Online, PDF usw.) einen Renderer definieren. Format-Renderer werden config.xmlwie folgt definiert :

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

Nachdem wir einen benutzerdefinierten Adressrenderer für das HTML-Format definiert haben, können wir seine Logik folgendermaßen implementieren:

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

Ich weiß, das sieht nach viel aus, aber es funktioniert auf jeden Fall. Ich konnte keinen einfacheren Weg finden, wenn ich mir Magento Core anschaue. Ich hoffe, das hilft.

fmrng
quelle
1

um Kunden-Google Mail bei orde template use zu erhalten

unter Code

 {{htmlescape var=$order.getCustomerEmail()}}  on you html  emailtemplate
Amit Bera
quelle
1

Wenn Sie Kunden-E-Mails zu PDF-Rechnungen hinzufügen möchten, gehen Sie wie folgt vor:

Kopieren Sie eine lokale Kopie der Datei Abstract.php, indem Sie von kopieren

App / Code / Kern / Magier / Verkauf / Modell / Bestellung / Pdf / Abstract.php

zu

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

Wenn Sie Kunden-E-Mails unter der Rechnungsadresse (Verkauft an) auf der lokalen Kopie der obigen Datei anzeigen möchten. Nehmen Sie die folgenden Änderungen in Zeile 313 vor:

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

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

Wenn Sie die E-Mail-Adresse des Kunden in der Lieferadresse (Versand an) anzeigen möchten, nehmen Sie die folgenden Änderungen in derselben Datei in Zeile 331 vor

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

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

Leeren Sie den Cache. Es sollte funktionieren, Kunden-E-Mails zu PDF-Rechnungen hinzuzufügen.

Abhinav Singh
quelle
1

Überschreiben Sie einfach das DefaultRenderer.php-Projekt \ 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 \ Modulname \ Rewrite \ Magento \ Kunde \ Block \ Adresse \ Renderer \ DefaultRenderer.php

<?php

Namespace Sellerdeck \ Rewrite \ Magento \ Customer \ Block \ Address \ Renderer;

Verwenden Sie Magento \ Customer \ Model \ Address \ Mapper. Verwenden Sie Magento \ Customer \ Model \ Metadata \ ElementFactory.

Klasse DefaultRenderer erweitert \ 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]);
}

}}

Aktualisieren, Kompilieren, Bereitstellen, erneutes Indizieren und Zwischenspeichern von Fleisch In Admin fügen Sie einfach unter System> Konfiguration> Kunden> Kundenkonfiguration> Adressvorlagen hinzu

{{depend email}}Email: {{var email}}{{/depend}}
jegan jeyaraman
quelle
Ich habe diese Lösung getestet, funktioniert gut für mich. Danke!
Nuwaus