На базе InstantCMS 2.15.2 создается база социального служения, которая будет в помощь тем, кто помогает разным категориям нуждающихся людей. При наполнении пользователями базы типовыми объектами вида «Благотворительная столовая» или «Пункт раздачи одежды» приходится вручную вводить это название в заголовок, а также добавлять в скобках название храма с городом (при котором эти столовые или пункты раздачи находятся). Чтобы в итоге у нас получались уникальные заголовки карточек. При этом поле «Храм (город)» заполняется пользователем в форме. Выбирается наименование конкретного храма из связанного родительского контента (parent_hram_id).
Хотелось бы иметь возможность, заполняя основные поля контента, поле заголовок (title) получать автоматически путем соединения значений уже введенных полей по определенному шаблону.
В моих примерах это «Благотворительная столовая» & "(" & [заголовок связанного храма] & ")" или «Пункт раздачи одежды» & "(" & [заголовок связанного храма] & ")". При этом наименования «Благотворительная столовая» и «Пункт раздачи одежды» совпадают с названием категорий, где создается данный контент. Т.е. title мог бы формироваться полностью по шаблону: [название выбранной категории] & "(" & [заголовок связанного храма] & ")" .
Ситуации с наименованием могут быть совершенно разные. Где-то нужно даже использовать значение, которое введет пользователь в само поле заголовок (title). Но все значения для формирования title могут быть или значениями полей данного контента, введенными в форму (включая значения свойств этого контента) или доступны по связям. Например, название текущей категории. Или имя родительского связанного контента.
Пример карточки храма со связанными учреждениями на тестовом сайте.
Я понимаю, что задача получается довольно объемная. И за просто так, наверное, никто не возьмется за нее. Я пока обошелся бы самостоятельной правкой кода системы, просто вписав в $item['title'] значения нужных полей из редактируемой формы в зависимости от id редактируемого контента. Это хотя бы позволило облегчить пользователям ввод сотен типовых столовых, пунктов раздачи одежды. Но без без вашей коллективной помощи мне будет сделать это весьма трудно. Буду благодарен за любые подсказки!
Я правильно понял, что нужно править два actions для content: item_add.php и item_edit.php?
Где-то в конце после проверки формы на ошибки.
if (!$errors){.....
и перед return $this->cms_template->render('item_form', [.........
Нужно проверять id контента, а также категорию и в зависимости от этих значений что-то такое формировать в $item['title']
Вот бы еще значения родительских полей суметь получить...
Или более правильно писать что-то типа хука? А как в хуке будут доступны нужные мне значения? Для меня этот путь пока совсем не понятен.
Пока есть только опыт небольшой правки actions register.php, чтобы при регистрации пользователя поле nickname формировалось из нескольких других полей формы.
....... // $user['nickname'] = strstr($user['email'], '@', true); if (!strcmp($fields['san']['handler']->setItem($user)->parse( $user['san'] ),"мирянин")) $user['nickname'] = $user['name'].' '.$user['surname']; // (c)MNN 2022-10-21 else $user['nickname'] = $fields['san']['handler']->setItem($user)->parse( $user['san'] ).' '.$user['name'].' '.$user['surname']; // (c)MNN 2022-10-21