Регистрация
Вход через соцсети
Восстановление пароля

Можно ли делать составные компоненты?

Новый топик
27.03.2014, 14:01
Ответить | Цитировать
Geser
Журба Сергей Анатольевич
Geser

Зарегистрирован:
2008-04-29
Сообщений: 33

Все здрасьть!
Стоит задача сделать вот такую хреновину -http://www.britishdesign.ru/masterclasses/

Объекты в списке: - это перечень мероприятий, у каждого есть своя дата проведения. Если дата позднее текущей, то одно отображение объекта (другой стиль выводы даты) и + активная ссылка на регистрацию. Если дата прошла, то другое отображение. (ну как в примере). Все автоматически.

Отображение объекта: - так же как в примере, по клику переходим на страницу, где большая картинка, текст И если дата не прошла, то ЗАЯВКА НА УЧАСТИЕ, а если дата прошла, нет заявки, просто страница.

Собственно вопрос в том как грамотнее и проще это организовать.
Сложность №1 - это проверка по дате, пока не разобрался как сделать.
Сложность №2 - это форма заявки на участие. Можно для нее сделать отдельный компонент, а потом подключить ее в основной компонент в вывод объекта?

В общем буду рад любым идеям! Сначала хотя бы на общем уровне.
Типа: берем компонент новости, делаем из него вывод в списке и вывод объекта.
В вывод объекта так то добавляем компонент письмо с сайта (переделанный под наши нужды), а вот таким образом можно сделать проверку по дате и в альтернативном шаблоне задать вывод с другими стилями.

Если CMS тебе понятна, значит, она уже устарела
27.03.2014, 14:47
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Название темы явно не отражает ее содержание. В пример приведен сайт не понятно о чем и как на нем ориентироваться к счастью с ваших слов все понятно описано.

Элементарность №2 - да создайте компонент заявки и вставьте в полное отображение при помощиnc_objects_list(), так же в идеале следует передавать дополнительные параметры во втором аргументе функции. Например номер объекта и номер компонента из которого отправлена заявка
Код:
<?=nc_objects_list($sub,$cc,"db_Message_ID=".$f_RowID."&db_Class_ID=".$classID."",true)?>


Элементарность №1
Вариант 1
Два инфоблока одного компонента в разделе с разными шаблонами (для различного оформления)
В системных настройках одного шаблона
Код:
$query_where = "OffDate>=now()";

Где OffDate поле типа "дата"
А в другом наоборот OffDate<=now()

Получается один инфоблок выводит еще с истекшим сроком а второй с истекшим. В полном отображении так же можно изменить все что там описано.

Вариант 2
Код:
if(date("YmdHi") < $f_date_year$f_date_month$f_date_day$f_date_hours$f_date_minutes) echo"class='end'";
else echo"class='start'";

И далее по подобию

Использовать вариант 1 в определенных случаях и если слишком много изменить во внешнем виде
Использовать вариант 2 в любых случаях если внешний вид меняется частично.

NetCat это ролевая игра с нелинейным сюжетом в которой вы сами можете выбрать вариант развития.


Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
27.03.2014, 17:06
Ответить | Цитировать
Geser
Журба Сергей Анатольевич
Geser

Зарегистрирован:
2008-04-29
Сообщений: 33

Спасибо Александр!
Ваш ответ более чем исчерпывающий. Вы даже на ходу продумали то, о чем я пока не задумывался, а именно определение откуда была подана заявка (номер объекта и номер компонента из которого отправлена заявка).
Вот раз вы такой умный, подскажите, как преобразовать номер объекта в теле письма в нормальный понятный вид, например заголовок мероприятия. Или есть вариант передать не номер объекта, а скажем значение поля?
Или надо будет потом уже в компоненте отправки с помощью номеров извлечь содержимое определенного поля?
Еще раз спасибо!

Если CMS тебе понятна, значит, она уже устарела
28.03.2014, 10:21
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Код:
<?=nc_objects_list($sub,$cc,"db_Class_ID=".$classID."&db_Message_ID=".$f_RowID."&Message_Name=".$f_Name."",true)?>

Вы можете передать таким же образом любое значение. Параметры поступают в виде массива GET после чего вы можете их записывать в БД. Думаю вы представляете как это делать. Если нет то продолжим наши уроки.

Вариант 1
Обратимся к ядру системы.
Если мы работаем с объектами компонентов то воспользуемся $nc_core->message->get_by_id()
Предположим вы уже записали все необходимые данные в БД поля с соответствующими значениями чтобы не путаться
В нужном месте вставляем
Код:
<?=$nc_core->message->get_by_id($f_db_Class_ID,$f_db_Message_ID,"Name")?>

Если вы хотите более одного поля скажем еще и дату то получите массив
В начале объекта напишите
Код:
<? $db_Message_ID = <?=$nc_core->message->get_by_id($f_db_Class_ID,$f_db_Message_ID) ?>

И в нужном месте вставляйте <?=$db_Message_ID[Name]?> - <?=$db_Message_ID[date]?>

Вариант 2
Работа с базой данных
Код:
$db_Message_ID= $nc_core->db->get_var("SELECT Name FROM Message".$f_db_Class_ID." WHERE Message_ID=".$f_db_Message_ID."");
// Массив
$db_Message_ID = $nc_core->db->get_row("SELECT * FROM Message".$f_db_Class_ID." WHERE Message_ID=".$f_db_Message_ID."", ARRAY_A );

Второй вариант универсальный и за счет этого более гибкий ведь это прямое обращение в БД. Если вам не нужны сложные запросы то подбирайте подходящую функцию из уже специально подготовленных для разработчиков http://netcat.ru/developers/docs/nc-core/api/

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
28.03.2014, 19:07
Ответить | Цитировать
Geser
Журба Сергей Анатольевич
Geser

Зарегистрирован:
2008-04-29
Сообщений: 33

Александр, извините меня, но я совсем не разобрался, что куда и на каком этапе вставлять.
Сначала я в отображении объекта в компоненте вставляю:
Код:
<?= nc_objects_list(378,594,"&Message_Name=".$f_NewsTitle."",true)?>

У меня показывается форма отправки заявки из раздела 378 и инфоблока 594. А Message_Name принимает что ли значение $f_NewsTitle текущего компонента?

Мне то надо передать в письмо которое отправляется как раз из 378,594 поле новости $f_NewsTitle в которой я вызываю эту самую форму.
Т.е. мне надо передать $f_NewsTitle в компонент формы отправки.

Вы говорите, что идет отправка методом get, т.е. при нажатии кнопки формы - отправить, помимо заполненных полей формы (не знаю каким методом идет отправка post или get) еще добавляется переменная Message_Name переданная get.

Значит на каком то этапе мы должны ее извлечь и далее использовать.
Вот я ни как не могу поймать этот этап.
Так как дальше я иду в компонент формы, далее Шаблоны действий.
1 поле - Альтернативная форма добавления объекта, это наша самая форма которая выводится, тут нет смысла что либо извлекать, да и при отображении страницы точно видно, что нет никаких get данных. Да и кнопка не нажата, значит данные еще не передавались.
Идем далее - Условия добавления объекта, тут вроде понятно выполнилось условие, идет запись в БД, если нет то нет.
Далее - Действие после добавления объекта, тут уже все записано и уже идут запросы на извлечение SELECT CustomSettings FROM.
Куда вставлять запрос на запись (INSERT INTO) никак не могу понять и найти.
И вообще я не уверен что &Message_Name=".$f_NewsTitle." это значение поля NewsTitle из новости а не данные из компонента nc_objects_list(378,594)

Если CMS тебе понятна, значит, она уже устарела
29.03.2014, 12:23
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Не нужно сомневаться в том что я написал.
Если на хостинге включены "глобальные переменные" то у вас в письме будет доступна переменная $Message_Name которая содержит переданное значение $f_NewsTitle.
С переменной $Message_Name в компоненте письма можно делать все что вздумается.

В форме вставить <input name='f_Название_поля_для_записи_в_бд' type='text' value='<?=$Message_Name?>'>

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
31.03.2014, 11:20
Ответить | Цитировать
Geser
Журба Сергей Анатольевич
Geser

Зарегистрирован:
2008-04-29
Сообщений: 33

Я и не сомневался в вашей компетентности.
Подумал может вы меня не правильно поняли.
В общем ваша помощь оказалась очень полезной и продуктивной.
Все получилось на ура, кроме одного нюанса.

Человек заполняет форму в которой есть поля обязательные для заполнения и поля по которым идет проверка (телефон, е-майл) и допускает ошибку или не заполняет обязательное поле. После нажатия отправка, происходит переход на страницу /netcat/add.php, где появляется сообщение об той или иной ошибке.
Соответственно мы уже покинули страницу с компонентом, где могли присвоить $Message_Name значение $f_NewsTitle
На этой странице значение $f_NewsTitle - пустое.

Если CMS тебе понятна, значит, она уже устарела
31.03.2014, 21:11
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Поле f_Название_поля_для_записи_в_бд передает в форму методом POST переменную с таким же именем значит с нужным значением остается только подставить его и все.

<input name='f_NewsTitle' type='text' value='<?=($Message_Name ? $Message_Name : $_POST[f_NewsTitle])?>'>

Либо переменные назвать одинаково.
При глобальных переменных я уже упоминал что доступна переменная согласна ключу массива
$_POST[f_NewsTitle] тоже что и $f_NewsTitle

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
11.04.2014, 19:49
Ответить | Цитировать
Geser
Журба Сергей Анатольевич
Geser

Зарегистрирован:
2008-04-29
Сообщений: 33

Огромное СПАСИБО!!!
Все работает просто отлично!
&#12471;

Если CMS тебе понятна, значит, она уже устарела
198 196 2014-04-11 19:49:03 13571
Описание проекта