Вам когда-нибудь было нужно найти шаблонную переменную ресурса, использовать ее значение в форме FormIt и отправить результат письмом администратору? Я покажу, как я сделал это, создав preHook.
Замысел: мой клиент хочет (без использования системы интернет-магазина) демонстрировать продукты, которые он продает, и в случае, если пользователя заинтересует какой-либо продукт, требуется возможность кликнуть на кнопке, которая бы вызвала страницу с формой, позволяющей пользователю сделать запрос о продукте.
Посещенной странице с формой нужно “знать”, описание какого продукта просматривал пользователь , и, в сою очередь, отправить эту информацию владельцу сайта с помощью email.
Решение:
- Написать сниппет, который в динамическом режиме создаст кнопку-ссылку, содержащую ID ресурса.
- Написать сниппет, который примет ID и отправит нужную информацию об этом ресурсе
- Задать этот сниппет как preHook для использования в FormIt
- Написать соответствующую форму с полями для ввода, получающую переменные через preHook.
Теперь рассмотрим это в деталях:
Создаем ссылку
Первый сниппет будет динамически создавать кнопку-ссылку. Я назову его (по причине отсутствия более красивого названия) “makeURLProfileValues”. Вам нужно знать ID реурса, который будет содержать форму. В нашем случае это 26.
$landingid=26; $id=$modx->resource->get('id'); $url = $modx->makeUrl($landingid,'',array( 'resourceid' => $id, )); return $url;
Я включил сниппет в мой шаблон страницы продукта, как показано ниже:
Ссылка-результат имеет альтернативное SEO-адаптированное имя, плюс ID ресурса страницы продукта.
Например: (http://www.mywebsite.com/orderform.html?resourceid=16).
Сниппет, принимающий ID ресурса.
По той же причине, что и выше, я назвал этот сниппет “getProductValues”. Этот сниппет получает ID ресурса, находит ресурс и оправляет те значения, которые мне нужны. В данном случае я хочу получить pagetitle, являющийся именем продукта. Вы можете адаптировать этот код для получения такого количества переменных, какое вам нужно.
$id=$_GET['resourceid']; //call up database and get the needed values $c = $modx->newQuery('modResource'); $c->where(array( 'id' => $id, 'published' => true, 'deleted'=> false )); $collection = $modx->getCollection('modResource',$c); foreach ($collection as $resource) { $ta = $resource->toArray(); $productName=$ta['pagetitle']; }; $hook->setValues(array( 'productName'=> $productName )); return true;
$hook->setValues(array( 'productName'=> $productName ));
return true;
Первое, что я сделаю – извлеку ID, используя $_GET. Затем проверю, что данный ID опубликован и не удален. Затем я создам массив и заполню его теми значениями, которые нужны – в нашем случае это просто pagetitle
Я создал переменную-крючок и задал ее значение из массива. Наконец, я вернул значение.
“На крючке”
На странице, содержащей форму, я обращаюсь к сниппету как preHook.
Примечание: Я не привожу здесь все другие конфигурации formIt. Если хотите больше узнать о FormIt, я рекомендую перейти по ссылке:
http://rtfm.modx.com/display/ADDON/FormIt
Моя HTML форма
Теперь мне нужно использовать новые значения из preHook в моей форме. Вы можете получить доступ к значениям, используя плейсхолдеры. При использовании preHook вам нужно добавлять ‘fi’ при назначении имен вашим плейсхолдерам. Похоже, что у меня есть проблемы с кэшированием и нужно удержать плейсхолдеры от кэширования. Что бы сделать это, просто добавьте восклицательный знак в начало вызова плейсхолдера, как я только что показал.
Теперь в моей форме я отправлю имя продукта администратору с помощью скрытого входного поля.
Я могу использовать имя снова при показе формы:
Теперь, когда пользователь заполнил форму заказа, имя продукта добавлено в форму.
Еmail чанк FormIt
Если вы знакомы с FormIt, то вы должны знать, что письма для отправки поступают из html чанка. Теперь в чанке вы можете использовать плейсхолдер, использующий соответственно правил присвоения имен входные поля вашей формы. В нашем случае это productName. В мой чанк я могу добавить это:
Итог
На этом все. Это очень простой способ раскопать данные в вашем ресурсе и добавить их в форму на отдельной странице.
P.S. Теперь кто-то может сказать, что он может добавить html код и элементы MODX (чанки, плейсхолдеры, сиппеты ) на вебстраницу и это не будет работать?
Смотрите также:
Услуги по MODX Revolution
Посмотреть все услуги
Оптимизация сайта
Заказав услуги по технической оптимизации сайта мы избавим вас от ошибок присутствующих на сайте, а так же увеличим скорость работы вашего сайта.
Создание сайта на MODX
Мы создадим для вас такой сайт, который подойдет именно в вашем случае и станет отличным инструментом привлечения клиентов и увеличения продаж.
Перенос сайта на MODX
Работа по переносу сайта на MODX осуществляется в максимально короткие сроки. Стоимость зависит от сложности переносимого сайта
Продвижение сайта на MODX
Если вы хотите получить быстрые и ощутимые результаты, подняться в топ в минимальные сроки, то доверьте нам продвижение своего сайта.