Настройка информации в электронной почте заказа на продажу
У меня есть пользовательский клиент/адрес атрибут 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
- мой пользовательский атрибут.
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. Я бы посоветовал вы должны переопределить основные блоки вместо внесения изменений в ядро
Если вы хотите изменить его, создайте новый файл phtml и добавьте свой формат, эта функция используется во многих местах. просто добавьте такой phtml в свой шаблон электронной почты..
{{block type='core/template' area='frontend' template='email/order/shipping.phtml' order=$order}}
Вы можете изменить формат адреса, определенный по умолчанию в 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}}
Обновление:
Переменные в шаблон поступают из 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
.