Допустим, нужно сделать форму заказа, которая открывалась бы по ссылке в лайтбоксе. А в ссылке по которой форма будет открываться, будем передавать параметр zakaz, значение которого будет определять сам заказ. К примеру, это может быть название отеля.
Было бы хорошо, при открытии формы получать параметр zakaz и задавать его значение нужному полю. Я пока не нашел как это сделать, поэтому сделал так: мы получаем значение заказ и добавляем в форму jquery скрипт, который присваивает значение параметра zakaz нужному полю.
PHP скрипт добавляем в элемент контейнер:
Добавляем код:
<?php $view = JRequest::getVar( 'view', '', null, 'STRING'); if ($view == 'article'){ $id= JRequest::getVar( 'id', 0, null, 'INT'); // Get a db connection. $db = JFactory::getDbo(); // Create a new query object. $query = $db->getQuery(true); // Select all records from the user profile table where key begins with "custom.". // Order it by the ordering field. $query->select(array('id', 'title')); $query->from('#__content'); $query->where('id='.$id); // Reset the query using our newly populated query object. $db->setQuery($query); // Load the results as a list of stdClass objects. $result = $db->loadObject(); $zakaz = $result->title; }else{ $zakaz = JRequest::getVar( 'zakaz', '', 'GET', 'STRING' ); //$zakaz = base64_decode($zakaz); $zakaz = urldecode($zakaz); } echo "<script> jQuery(document).ready(function($) { $('#hotel').val('" . $zakaz . "'); }); </script> " ?>
Логика кода такая: если форма вставлена в материал (с помощью плагина), то получаем название материала и его значение присваиваем полю формы. Если нет, то берем значение параметра zakaz из адресной строки браузера, и дешифруем его, потому как, чтобы передать его в адресную строку мы его зашифровали с помощью urlencode()
Еще важно заметить, что здесь название материала берется без проверки прав доступа пользователя к материалу. Такой вариант пойдет, если форма не добавляется в закрытые матералы, иначе, нужно будет использовать код, который проверяет права доступа пользователя к материалу.
Для K2 :
<?php $option = JRequest::getVar( 'option', '', null, 'STRING'); $view = JRequest::getVar( 'view', '', null, 'STRING'); if ($option == 'com_k2' && $view == 'item'){ $id= JRequest::getVar( 'id', 0, null, 'INT'); // Get a db connection. $db = JFactory::getDbo(); // Create a new query object. $query = $db->getQuery(true); // Select all records from the user profile table where key begins with "custom.". // Order it by the ordering field. $query->select(array('id', 'title')); $query->from('#__k2_items'); $query->where('id='.$id); // Reset the query using our newly populated query object. $db->setQuery($query); // Load the results as a list of stdClass objects. $result = $db->loadObject(); $zakaz = $result->title; }else{ $zakaz = JRequest::getVar( 'zakaz', '', 'GET', 'STRING' ); //$zakaz = base64_decode($zakaz); $zakaz = urldecode($zakaz); } echo "<script> jQuery(document).ready(function($) { $('#hotel').val('" . $zakaz . "'); }); </script> " ?>
изменилось:
$option = JRequest::getVar( 'option', '', null, 'STRING'); $view = JRequest::getVar( 'view', '', null, 'STRING'); if ($option == 'com_k2' && $view == 'item'){
и
$query->from('#__k2_items');
Комментарии
В настройках поля можно просто вставить в Value короткий код: " жаль что код не вставляется... если автору интересно, могу прислать. Моя почта claripuci
Может кому пригодится...
И может, уважаемый автор напишет решение для К2 :)
Спасибо, очень помогли. На мой взгляд, тема "Как вставить заголовок в поле/строку ChronoForms" очень нужная, чот нигде больше подобных решений не нашол. ещё раз спасибо!
Всех их связывает великий и ужасный "метод тыка"
Я не понял тут какая связь между view и нужным полем, в нужное поле берется из параметра zakaz, если не менять код, а если форма в материале, то из базы берется значение поля title
Добавил для k2, отличается условие и запрос к базе для получения названия материала
RSS лента комментариев этой записи