Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

MODX статьи, уроки и готовые решения для MODX Revo

Сайдбар

Передача шаблонной переменной (TV) от ресурса к новой странице для использования в форме.

18 марта 2013

Вам когда-нибудь было нужно найти шаблонную переменную ресурса, использовать ее значение в форме FormIt и отправить результат письмом администратору? Я покажу, как я сделал это, создав preHook.
 
Замысел: мой клиент хочет (без использования системы интернет-магазина) демонстрировать продукты, которые он продает, и в случае, если пользователя заинтересует какой-либо продукт, требуется возможность кликнуть на кнопке, которая бы вызвала страницу с формой, позволяющей пользователю сделать запрос о продукте.
Посещенной странице с формой нужно “знать”, описание какого продукта просматривал пользователь, и, в сою очередь, отправить эту информацию владельцу сайта с помощью email.

Решение:


  1. Написать сниппет, который в динамическом режиме создаст кнопку-ссылку, содержащую ID ресурса.
  2. Написать сниппет, который примет ID и отправит нужную информацию об этом ресурсе
  3. Задать этот сниппет как preHook для использования в FormIt
  4. Написать соответствующую форму с полями для ввода, получающую переменные через preHook.
Теперь рассмотрим это в деталях:
Создаем ссылку
 
Первый сниппет будет динамически создавать кнопку-ссылку. Я назову его (по причине отсутствия более красивого названия) “makeURLProfileValues”.  Вам нужно знать ID реурса, который будет содержать форму. В нашем случае это 26.
<code>$landingid=26;
$id=$modx->resource->get('id');
$url = $modx->makeUrl($landingid,'',array( 'resourceid' => $id, ));
return $url; </code>

Я включил сниппет в мой шаблон страницы продукта, как показано ниже:
 
Ссылка-результат имеет альтернативное 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 (чанки, плейсхолдеры, сиппеты ) на вебстраницу и это не будет работать?






Подпишитесь на рассылку! Никакого спама, только обновления!!!

Комментарии (2)

  1. zeandor 18 мая 2014, 17:44 # 0
    Статья не полная. Не хватает кусков кода и изображений!
    1. igamov 04 октября 2015, 13:58 # 0
      Пожалуйста, докончите статью.

      Услуги по MODX Revolution

      Посмотреть все услуги

      Техническая оптимизация сайта

      Подробнее & Заказать

      Создание сайта на MODX Revolution

      Подробнее & Заказать

      Перенос сайта на MODX Revolution

      Подробнее & Заказать

      Продвижение сайта на MODX

      Подробнее & Заказать