Magento - Отдельные контактные формы

Я работаю над веб-сайтом, где у клиента должно быть несколько отдельных контактных форм (одна для контакта, одна для «запроса предложения», еще пара для подобных вещей).

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

Теперь у меня есть «скелет» других, но мой вопрос: есть ли способ воспользоваться бэкэндом «Контакты» для отправки электронных писем? Или мне нужен другой контроллер для управления ими?

Если да, можете ли вы показать мне несколько ссылок или фрагмент кода для начала?

Заранее спасибо.


person Phillip    schedule 23.03.2015    source источник
comment
Да, это должно быть легко подключить к функции электронной почты. Можете ли вы указать, хотите ли вы использовать существующий шаблон или пользовательский для отправки электронных писем?   -  person Vladimir Ramik    schedule 24.03.2015
comment
Я бы использовал пользовательский шаблон (я добавил еще пару полей, таких как адрес, телефон, описание, год производства и т. д.).   -  person Phillip    schedule 24.03.2015


Ответы (1)


Чтобы делать то, что вы хотите, необходим пользовательский контроллер для передачи данных POST.

Если вы изучите \app\code\core\Mage\Contacts\controllers\IndexController.php в строке ~62, вы найдете postAction(), который вызывается indexAction() — действие контроллера по умолчанию.

Это метод, который собирает переданные параметры POST и использует модель core/email_template для отправки электронной почты. Я бы использовал этот код в качестве ссылки для вашего контроллера.

Убедитесь, что вы поместили все это в свой собственный модуль, как всегда, с дополнительными функциями.

Чтобы узнать, что можно и что нельзя передавать в модель core/email_template, взгляните на \app\code\core\Mage\Core\Model\Email\Template.php. Там для вас куча документации.

Черт возьми, у него даже есть пример кода!

// Loading of template
$emailTemplate  = Mage::getModel('core/email_template')
   ->load(Mage::getStoreConfig('path_to_email_template_id_config'));
$variables = array(
   'someObject' => Mage::getSingleton('some_model')
   'someString' => 'Some string value'
);
$emailTemplate->send('[email protected]', 'Name Of User', $variables);

В частности, взгляните на строку ~371, где она передает переменные, которые вы установили, в шаблон электронной почты, указанный в макете.

/**
 * Send mail to recipient
 *
 * @param   array|string       $email        E-mail(s)
 * @param   array|string|null  $name         receiver name(s)
 * @param   array              $variables    template variables
 * @return  boolean
 **/
public function send($email, $name = null, array $variables = array())

Magento делает то же самое, что и любая контактная форма на простом старом обработчике форм PHP. Он просто делегирует все модели, подобные приведенной выше, поэтому вам не нужно делать так много работы, заново изобретая колесо, как это было раньше. Просто новый контроллер для приема параметров в данных POST.

Не стесняйтесь следить, и я обновлю ответ, чтобы помочь вам, где смогу!

Вот краткий список вещей, которые вам понадобятся для этого:

  • Пользовательский контроллер для приема данных POST формы и передачи их в модель core/email_template.
  • Пользовательская форма во внешнем интерфейсе, указывающая на URL-адрес вашего контроллера (уже сделано!)
  • Пользовательский шаблон электронной почты для core/email_template, используемый для отображения данных в электронном письме, которое видит получатель.
person Nick M    schedule 01.04.2015