Куда идем?

Связывание форм - форма отправки 1c данными из формы 2

Больше
13 года 1 мес. назад - 13 года 1 мес. назад #2592 от hush
Добрый вечер!
продолжаю знакомство с себлодом:)

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

Вот событие (на данный момент):


Вот форма (на данный момент):


Вопрос 1:
Как сделать, чтобы значения из контента события добавлялась в форму заявки автоматически (дата, место проведения, ведущий и т.п.)? Пробовал через Live (Default), но там значение нужно подставлять вручную.

Вопрос 2:
Как сделать так, чтобы форма заявки отправляла письмо на e-mail, указанный в событии (организатору события), и не отправляла ее в админку?

я примерно понимаю, что есть поле e-mail, но как оно работает - не догоняю.

Спасибо.

п.с.
еще вот заголовок собтия - вместо названия показывает цифры (дата) - какое поле нужно добавить, чтобы заголовок отображался с названием события?
Вложения:
Последнее редактирование: 13 года 1 мес. назад пользователем hush. Причина: коррекция

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
13 года 1 мес. назад #2593 от Wedal
hush,
Ответ 1:
Здесь сложно. Как только вы уйдете с этой страницы(на форму), с ее данными вас уже ничего не будет связывать. Я вижу решение так: Добавьте форму через модуль прямо на страницу события. Ну и, если необходимо, скройте под кнопкой с помощью JavaScript. Типы контента события и формы заявки должны иметь поля, не закрытые друг от друга(я имею ввиду замочек), в этом случае вы сможете использовать одно в другом. Далее плавно переходим к ответу 2...
Ответ 2:
Да, нужно использовать специальное поле. Его настройки здесь описывать не буду, т.к. долго, но разобраться там не так сложно. В комментариях к одной из статей по SEBLOD уже писали немного про настройки этого поля - посмотрите.
Так вот. В этом поле можно создать шаблон формы письма, включая в него любые из доступных полей типа контента, которому принадлежит это поле. Т.к. замочек у вас будет открыт, то скорее всего получится передать в письмо данные события.

P.S. Чтобы отображался заголовок нужно добавить Article Title.
Спасибо сказали: hush

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
13 года 1 мес. назад - 13 года 1 мес. назад #2596 от hush
Wedal, спасибо, логика ясна.
для меня пока самое простое - начать с поля e-mail

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

сама форма:





Construction

Левый столбец:
1. from (default/ e-mail/ field) - с этим непонятно (если от кого - зачем справа дублируется From (E-mail / Field)?)


2. Subject - тема письма, приходящего на е-мейл?

3. Message и Message (Field) - поля и их содержание в теле письма?

4. Attachment (Field) - прикрепленные файлы в теле письма?


Правый столбец:

5. Send E-mail - непонятно назначение поля и значения значений в выпадающем списке (пардон за тафталогию).
И зачем справа еще поле?


6. From (E-mail / Field)- тоже, что и From (1) - непонятно?

7. To - список емейлов, на которые будет приходить письмо?

8. To (Field) - список полей е-мейлов, на которые будет приходить письмо?
(Т.е. если эта форма - поле е-мейл организатора, то в To (Field) я могу подставить название этого поля, и организатору придет письмо?
(на рисунке оранжевым цветом)



9. To (Administrators) - это понятно

Хочется как-то раз уж разобраться с этим полем, поэтому столь подробно.
Спасибо
Последнее редактирование: 13 года 1 мес. назад пользователем hush.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
13 года 1 мес. назад - 13 года 1 мес. назад #2599 от Wedal
hush,
1. Слева мы выбираем что подставлять в имя отправителя: email, заданный вручную или данные, взятые из какого-то поля. Справа мы вводим либо этот email, либо название поля с данными.
2. Да.
3. Да.
4. Поле файла, который будет прикреплен.
5. Здесь выбираем, когда отправлять email: никогда, при отправке формы, при редактировании формы, всегда.
6. Объяснил в п.1.
7. Да.
8. Да. В п.7 Email вписывается вручную. Здесь автоматически из указанного поля. Оба поля заполнять не обязательно. Достаточно заполнить одно из них.
Последнее редактирование: 13 года 1 мес. назад пользователем Wedal.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
13 года 1 мес. назад #2601 от hush
Спасибо!
с наступающим!

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
13 года 1 мес. назад - 13 года 1 мес. назад #2607 от athree
С наступающим!
Работаю над той же проблемой. Кажется, нашел правильный путь, но возникло неожиданное препятствие.
Форма заказа должна выводиться в модуле в "родительском" типе_контента - иначе никак. Но получать поля из "родителя" - настоящая проблема. Использование разомкнутого замочка ровным счетом ничего не дает - все-таки это два совершенно разных типа_контента, никак физически не связанных. Ну, или, я чего-то не допонял...
А вот дальше самое интересное. Направление я подсмотрел на оф. форуме SEBLOD - там по такому принципу делалась система комментариев, там тоже была необходимость связывать два разных типа_контента. Нужно обращаться напрямую к БД, ведь все эти значения родительского типа_контента там уже хранятся, только нужно узнать их ID. Замочек должен быть замкнут - данные должны быть в чистом виде в отдельной таблице, ибо как "выдирать" их из тегов в столбце introtext я даже не догадываюсь.
В форме заказа создаем скрытое поле Core-42 (оно позволяет использовать произвольный PHP код). Во второй секции настроек поля (кнопочка [2]) прописываем Live: "Url-Var(Int)", Live Value: "id". Таким образом, поле Core-42 получает ID материала, созданного в "родительском" типе_контента. Круто? Идем дальше.
В настройках самого поля Core-42 в секции PrepareStore прописываем примерно следующий код:

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('email');
$query->from('#__cck_store_form_companion');
$query->where('id='.$value);
$db->setQuery($query);
$value = $db->loadResult();

email - столбец со значением, которое необходимо получить из "родителя"
_cck_store_form_companion - название таблицы "родителя" без префикса
'id=' - это часть запроса, выборка по ID
$value - это переменная, которая вначале подставляет Live Value (наш ID) в код, а затем выводит в виде результата полученное значение "родителя". Результат выполнения этого кода - поля Core-42 получает нужное значение "родителя".
Создаем столько полей Core-42, сколько нужно получать значений полей из "родителя". Все присовокупляем к отправляемому E-mail. Вуаля.
Правда, есть один облом :( Может, я где ошибся, ибо мои знания PHP почти нулевые, делал все методом тыка. Однако у меня получалось получать результат - поля из "родителя". Правда потом я потер свой "полигон для испытаний", установил свежую Joomla, проделал все действия абсолютно идентично, и... не работает. Вываливается ошибка при отправки заказа
Fatal error: Call to a member function renderField() on a non-object in Z:\home\joomla17\www\plugins\cck_field\42\42.php(181) : eval()'d code on line 1
Может, кто подскажет, почему не робит? Здесь какая-то внешняя причина...
Последнее редактирование: 13 года 1 мес. назад пользователем athree.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
13 года 1 мес. назад #2609 от Wedal
athree, выполните ваш php-код в каком-нибудь другом месте Joomla, более простом. Например в модуле Joomla, позволяющем это делать(по умолчанию такового нет), или в компоненте, или в шаблоне SEBLOD или Joomla.
Функция eval(), на которую указывает ошибка, занимается тем, что пытается выполнить то, что вы написали в настройках поля Core-42, как php-код. Возможно, в этот код вкралась ошибка. Чтобы явно ее увидеть, нужно явно исполнить этот код где-либо.

А вообще, если используйте такой подход, почему бы не воспользоваться полем Dynamic Select? Он позволяет конструировать SQL-запросы, также передавая в них значение.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
13 года 1 мес. назад - 13 года 1 мес. назад #2611 от athree
Wedal, Select-Dynamic в данном контексте бессмыслен. Если ему придать LiveValue = ID текущей статьи, он действительно выберет нужное значение из БД, но... Вернет не это значение, а тот же самый ID, ибо Options Value = id. Кроме того, в запрос нельзя подставлять переменные: Where: id=$value, да и выведет он в таком случае первым значением в списке бесполезное мне "Select an option".

А вот код в Core-42:
Code:
$db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('email'); $query->from('#__cck_store_form_companion'); $query->where('id='.$value2); //СЮДА ПОДСТАВЛЯЕМ ID $db->setQuery($query); $value = $db->loadResult();
Сам по себе работает, если перед ним прописать $value2 = '13' (заранее известный ID). В получении значений из БД проблем нет, проблема есть в подставлении в этот код текущего ID.
По идее такой код:
Code:
$value2 = $cck->renderField('fieldName');
должен получать значении из некоего скрытого поля с LiveValue = id, но вот он как раз не работает. Не в Core-42, не в шаблоне. Однако в документации SEBLOD такой код приведен! Более того, он у меня УЖЕ работал, на старом "полигоне". Из чего делаю вывод, что что-то поломалось в самом SEBLOD. На оф. форуме, кажется, кто-то сталкивался с той же проблемой, и решил ее... сменой шаблона SEBLOD. Что-то в самом шаблоне препятствует выполнению такого кода. Но вот что? Если, конечно, дело именно в этом...
Последнее редактирование: 13 года 1 мес. назад пользователем athree.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
12 года 7 мес. назад #3894 от greenmar
Может имеет смысл попробовать упрощенный шаблон для решения задачи - wedal.ru/forum/SEBLOD/2610-SHABLON-Seb_Simple-prostoj-shablon-dlja-Seblod-2.html
Авось поможет. Отпишите плиз, по результатам. Просто я тоже планирую делать подобную вещь, но пока только присматриваюсь к тому что пишут люди.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
12 года 7 мес. назад #3898 от greenmar
Ой, что-то я сразу не обратил внимание, последнее сообщение полгода назад написано... А всё же интересно чем вся история закончилась

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
12 года 2 мес. назад #4488 от seblod.pro
C позволения Wedal размещу ссылку на видео, которое я недавно записал.
Собственно, решение поставленной в теме задачи с помощью плагина SD Live CCK Field.

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.

Больше
11 года 5 мес. назад #5892 от manja
Здесь сложно. Как только вы уйдете с этой страницы(на форму), с ее данными вас уже ничего не будет связывать. Я вижу решение так: Добавьте форму через модуль прямо на страницу события. Ну и, если необходимо, скройте под кнопкой с помощью JavaScript. Типы контента события и формы заявки должны иметь поля, не закрытые друг от друга(я имею ввиду замочек), в этом случае вы сможете использовать одно в другом. Далее плавно переходим к ответу 2...


такая же задачка, можно по подробнее как "скройте под кнопкой с помощью JavaScript" :(

Пожалуйста Войти или Зарегистрируйтесь, чтобы присоединиться к беседе.