Пользовательский модуль с пользовательской таблицей базы данных и настройками для каждого магазина


Я создаю пользовательский модуль с пользовательской таблицей базы данных, используя следующий учебник.

Этот модуль представляет собой пользовательскую контактную форму, и я хотел бы, чтобы настройки для этой пользовательской контактной формы были для каждого магазина, то есть я хочу, чтобы адрес электронной почты "отправить с" был разным для каждого магазина, который я создаю.

Нужно ли мне добавлять определенные поля в базу данных, чтобы Magento понял это? Или Magento делает это автоматически?

Author: MTM, 2013-01-30

2 answers

Вы можете использовать существующее поведение Magento, которое позволяет определять и получать контактный адрес электронной почты для каждого вида магазина и в зависимости от отдела (продажи, поддержка клиентов, общие сведения). Затем вы можете использовать этот конкретный контакт для каждого представления магазина в своем пользовательском модуле.

Вот серверная часть конфигурации для адресов электронной почты: backend email addresses

И для использования этого конкретного электронного письма в вашем пользовательском модуле важной частью в вашем случае является переменная $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);
 3
Author: Sylvain Rayé, 2013-01-31 09:19:15

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;
 3
Author: wlvrn, 2013-01-30 23:03:02