Настройка информации в электронной почте заказа на продажу


У меня есть пользовательский клиент/адрес атрибут store_id, я хочу добавить его в свою Информацию о доставке: в шаблоне электронной почты для продаж, я знаю, что в настоящее время он получает адрес доставки от

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

В функции

 public function getShippingAddress()
{
    foreach ($this->getAddressesCollection() as $address) {
        if ($address->getAddressType()=='shipping' && !$address->isDeleted()) {
            return $address;
        }
    }
    return false;
}

В настоящее время мой адрес выглядит так

Abdul Ghaffar, Street 10
Islamabad, Punjab, 44000
Pakistan
T: 123456789 

Я не могу найти, где создается этот формат, я хочу выглядеть так, как

store_id -
Abdul Ghaffar, Street 10
Islamabad, Punjab, 44000
Pakistan
T: 123456789 

Где store_id - мой пользовательский атрибут.

Author: Manashvi Birla, 2016-04-14

3 answers

Извлек значение этого поля и передал его в качестве параметра в следующей функции

App/code/core/Mage/Sales/Model/Order.php

  public function sendNewOrderEmail()
    {
     /*Existing Code*/
     if ($this->getCustomerIsGuest()) {
            $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
            $customerId = Mage::getModel('customer/customer')->load($this->getCustomerId());
            $companyname = $customerId->getCompanyname();
            $storeID = $customerId->getStoreId();
        } else {
            $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
            $customerId = Mage::getModel('customer/customer')->load($this->getCustomerId());
            $customerName = $this->getCustomerName();
            $storeID = $customerId->getStoreId(); // fetch your custom attribute
        }

        $mailer->setTemplateParams(array(
          'order'        =>  $this,
          'billing'      =>  $this->getBillingAddress(),
          'payment_html' => $paymentBlockHtml,
          'storeid'  => $storeID 
       ));
     }

После внесения этого изменения. отредактируйте транзакционную электронную почту, чтобы включить этот параметр. Перейдите в раздел Система > Транзакционные электронные письма > Новое электронное письмо для заказа и добавьте, как показано ниже:

 {{ var storeid }}
 {{var order.getShippingAddress.format('html')}}

Если это будет отображаться в вашем электронном письме с заказом в информации "Адрес доставки" в самом начале

P.S. Я бы посоветовал вы должны переопределить основные блоки вместо внесения изменений в ядро

 1
Author: Manashvi Birla, 2016-04-14 13:35:05

Если вы хотите изменить его, создайте новый файл phtml и добавьте свой формат, эта функция используется во многих местах. просто добавьте такой phtml в свой шаблон электронной почты..

 {{block type='core/template' area='frontend' template='email/order/shipping.phtml' order=$order}}
 1
Author: Qaisar Satti, 2016-04-14 11:38:33

Вы можете изменить формат адреса, определенный по умолчанию в app/code/core/Mage/Customer/config.xml. Перейдите к System > Configuration > Customers > Customer Configuration > Address Templates и добавьте пользовательский атрибут там, где вы хотите. Результат должен выглядеть следующим образом:

{{depend store_id}}Store ID{{var store_id}}{{/depend}}
{{depend prefix}}{{var prefix}} {{/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}} ....

Вы можете найти дополнительную информацию здесь (pt. 3-5)

Примечание: Атрибут должен присутствовать в sales/order_address и sales/quote_address, чтобы правильно отображаться на всех этапах.

Пример:

Добавить атрибут:

$installer = $this;

$installer->startSetup();

$this->addAttribute('customer_address', 'custom_store_id', array(
    'type' => 'text',
    'input' => 'text',
    'label' => 'Custom Store No#',
    'global' => 1,
    'visible' => 1,
    'required' => 0,
    'user_defined' => 1,
    'visible_on_front' => 1
));

Mage::getSingleton('eav/config')
    ->getAttribute('customer_address', 'custom_store_id')
    ->setData('used_in_forms', array('customer_register_address','customer_address_edit','adminhtml_customer_address'))
    ->save();

/**
 * Adding Extra Column to sales_flat_order_address
 * to store the delivery instruction field
 */
$sales_order_address = $installer->getTable('sales/order_address');
$installer->getConnection()
    ->addColumn($sales_order_address, 'custom_store_id', array(
        'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
        'comment' => 'Custom Store Id'
    ));

$sales_quote_address = $installer->getTable('sales/quote_address');
$installer->getConnection()
    ->addColumn($sales_quote_address, 'custom_store_id', array(
        'type' => Varien_Db_Ddl_Table::TYPE_TEXT,
        'comment' => 'Custom Store Id'
    ));

$installer->endSetup();

Добавить набор полей:

<fieldsets>
    <sales_convert_quote_address>
        <custom_store_id>
            <to_order_address>*</to_order_address>
        </custom_store_id>
    </sales_convert_quote_address>
</fieldsets>

Изменить формат:

Before {{depend custom_store_id}}Store ID{{var custom_store_id}} After

{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}}<br/>
{{depend company}}{{var company}}<br />{{/depend}}
{{if street1}}{{var street1}}<br />{{/if}}
{{depend street2}}{{var street2}}<br />{{/depend}}
{{depend street3}}{{var street3}}<br />{{/depend}}
{{depend street4}}{{var street4}}<br />{{/depend}}
{{if city}}{{var city}},  {{/if}}{{if region}}{{var region}}, {{/if}}{{if postcode}}{{var postcode}}{{/if}}<br/>
{{var country}}<br/>
{{depend telephone}}T: {{var telephone}}{{/depend}}
{{depend fax}}<br/>F: {{var fax}}{{/depend}}
{{depend vat_id}}<br/>VAT: {{var vat_id}}{{/depend}}

Получить результат: Result

Обновление:

Переменные в шаблон поступают из Mage_Core_Model_Email_Template::getProcessedTemplate():

/**
 * Process email template code
 *
 * @param   array $variables
 * @return  string
 */
public function getProcessedTemplate(array $variables = array())
{
    $processor = $this->getTemplateFilter();
    $processor->setUseSessionInUrl(false)
        ->setPlainTemplateMode($this->isPlain());

    if (!$this->_preprocessFlag) {
        $variables['this'] = $this;
    }

    if (isset($variables['subscriber']) && ($variables['subscriber'] instanceof Mage_Newsletter_Model_Subscriber)) {
        $processor->setStoreId($variables['subscriber']->getStoreId());
    }

    // Apply design config so that all subsequent code will run within the context of the correct store
    $this->_applyDesignConfig();

    // Populate the variables array with store, store info, logo, etc. variables
    $variables = $this->_addEmailVariables($variables, $processor->getStoreId());

    $processor
        ->setTemplateProcessor(array($this, 'getTemplateByConfigPath'))
        ->setIncludeProcessor(array($this, 'getInclude'))
        ->setVariables($variables);

    try {
        // Filter the template text so that all HTML content will be present
        $result = $processor->filter($this->getTemplateText());
        // If the {{inlinecss file=""}} directive was included in the template, grab filename to use for inlining
        $this->setInlineCssFile($processor->getInlineCssFile());
        // Now that all HTML has been assembled, run email through CSS inlining process
        $processedResult = $this->getPreparedTemplateText($result);
    }
    catch (Exception $e)   {
        $this->_cancelDesignConfig();
        throw $e;
    }
    $this->_cancelDesignConfig();

    return $processedResult;
} 

Где $processor->filter($this->getTemplateText()); вызывает функции обратного вызова (методы) одну за другой и заменяет предложение "{{...}}" результатом.

Отображение адреса происходит из Mage_Customer_Block_Address_Renderer_Default::render(). Атрибуты клиента исходят из Mage_Customer_Helper_Address::getAttributes():

$attributes = Mage::helper('customer/address')->getAttributes();

Итак, если вы получаете свой атрибут в массиве из метода Mage_Customer_Helper_Address::getAttributes(), вы можете вызвать его в шаблоне адреса с помощью это: {{var attributeName}}. Метод Mage_Core_Model_Email_Template_Filter::varDirective() собирает все переменные и сохраняет их в массиве _templateVars. Метод Varien_Filter_Template::_getVariable() окончательно заменяет переменные из массива _templateVars.

 1
Author: Siarhey Uchukhlebau, 2016-04-15 08:34:54