Пользовательский модуль с пользовательской таблицей баз данных и настройками магазина
-
16-10-2019 - |
Вопрос
Я создаю пользовательский модуль с пользовательской таблицей баз данных, используя Следующий урок.
Этот модуль является пользовательской контактной формой, и я хотел бы, чтобы настройки для этой пользовательской контактной формы были на основе магазина, то есть я хочу, чтобы отправка с адреса электронной почты отличалась для каждого магазина, который я создаю.
Нужно ли добавить определенные поля в базу данных для Magento, чтобы забрать это? Или Magento делает это автоматически?
Решение
Вы можете использовать существующее поведение Magento, которое позволяет определять и получить контактный адрес электронной почты для каждого представления магазина и в зависимости от департамента (продажи, поддержка клиентов, общие). Затем вы можете использовать этот конкретный контакт с видом на магазин в своем пользовательском модуле.
Вот бэкэнд на конфигурации для адресов электронной почты:
И использовать это конкретное письмо в своем пользовательском модуле, важной частью в вашем случае является $sender
переменная. Вот образец кода (проверьте комментарий в нем, имейте в виду, что он взят из кода меня, так что адаптируйтесь к вашим потребностям):
$recipient = $item->getRecipient();
$template = $item->getTemplate();
if (!Mage::getConfig()->getNode(Mage_Core_Model_Email_Template::XML_PATH_TEMPLATE_EMAIL .'/' . $template)){
Mage::throwException(Mage::helper('customer')->__('Wrong transactional notification email template.'));
}
$customer = Mage::getModel('customer/customer')->load($customer->getId());
$recipient = array('name' => $customer->getName(), 'email' => $customer->getEmail());
/**
* $senderType can be support, general, sales, custom1, custom2
* You can also replace the array by a string and provide only the string 'general', 'support', etc
*/
$sender = array(
'name' => Mage::getStoreConfig('trans_email/ident_' . $senderType . '/name', $storeId),
'email' => Mage::getStoreConfig('trans_email/ident_' . $senderType . '/email', $storeId)
);
}
$translate = Mage::getSingleton('core/translate');
$translate->setTranslateInline(false);
/* @var $emailTemplate Mage_Core_Model_Email_Template */
$emailTemplate = Mage::getModel('core/email_template');
if (Mage::app()->getStore()->isAdmin()) Mage::app()->getLocale()->emulate($storeId);
$variables += array(
'name' => $customer->getName()
);
if (Mage::app()->getStore()->isAdmin()) Mage::app()->getLocale()->revert();
$emailTemplate->setDesignConfig(array('area' => 'frontend', 'store' => $storeId))
->sendTransactional($template, // xml path email template
$sender,
$recipient['email'],
$recipient['name'],
$variables
);
$translate->setTranslateInline(true);
Другие советы
Magento добавит их автоматически, когда вы определите их в своих модулях system.xml
файл.
<some_setting>
<label>Some Setting Label</label>
<frontend_type>text</frontend_type>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</some_setting>
Затем вы получаете значение конфигурации для соответствующего магазина через ...
Mage::getStoreConfig( '/path/to/setting', $store_id );
app/Mage.php
public static function getStoreConfig($path, $store = null)
{
return self::app()->getStore($store)->getConfig($path);
}
Что, в свою очередь, называет ...
app/code/core/Mage/Core/Model/Store.php
public function getConfig($path)
{
if (isset($this->_configCache[$path])) {
return $this->_configCache[$path];
}
$config = Mage::getConfig();
$fullPath = 'stores/' . $this->getCode() . '/' . $path;
$data = $config->getNode($fullPath);
if (!$data && !Mage::isInstalled()) {
$data = $config->getNode('default/' . $path);
}
if (!$data) {
return null;
}
return $this->_processConfigValue($fullPath, $path, $data);
}
Обратите внимание, как он определяет путь к значению конфигурации на основе кода магазина здесь ...
$fullPath = 'stores/' . $this->getCode() . '/' . $path;