У меня есть ситуация, когда я хотел бы иметь возможность создавать узлы и ссылочные узлы одновременно. Есть ли какие-то решения для этого, которые хорошо работают для этого?
Чтобы уточнить, о чем я говорю, рассмотрим следующую ситуацию ( очень упрощенную для объяснения):
Существует класс типа контента с полем, на которое ссылается узел, Student . Я хотел бы, чтобы пользователи могли создавать узлы класса и узлы ученика одновременно. Я также хотел бы, чтобы они могли использовать обычное автоматическое заполнение ссылки на узел, чтобы выбрать ученика, который уже существует.
В идеале я хотел бы, чтобы все это работало с одной страницы, а также работало в рамках системы разрешений Drupal, чтобы у меня были разные роли и разные разрешения.
Да, я знаю, что в этом случае Student лучше всего использовать как пользователя (а не как узел), но Class и Student просто иллюстрируют ситуацию. Реальный сценарий действительно нуждается в ссылках на узлы.
Существует аналогичный вопрос: создание ссылочных узлов вместе с родительским узлом , но меня особенно интересуют только решения на Drupal 7.
РЕДАКТИРОВАТЬ:
Не только поиск существующих модулей, но и поиск собственного кода.
Ответы:
Я использую диалоговое окно «Ссылки» , которое помещает небольшой «+» в существующие поля ссылок, позволяя пользователю создавать нового ученика непосредственно из формы редактирования узла класса .
источник
Теперь для пары разных сайтов, я сделал это с помощью модальности ctools, и вот основная схема того, как я это реализовал (очень просто):
Создайте пользовательский обратный вызов страницы в hook_menu () вашего модуля, который отображает базовую форму узла для узла, на который вы хотите сослаться (для «студенческого» узла просто есть поле имени и, возможно, поле года выпуска). В этой форме в вашем обратном вызове submit сохраните узел с помощью node_save () и сохраните идентификатор узла (который должен быть равен $ node-> nid после передачи нового объекта узла в node_save ()) в форме
$form_state['storage']['student_id']
.Измените форму узла Master / Class, используя hook_form_alter () . Вам нужно сделать несколько вещей здесь:
Во-первых, вам нужно добавить модальный javascript и функциональность ctools, чтобы ctools знал, что делать с вашей специальной ссылкой:
Во-вторых, вам нужно добавить ссылку на обратный вызов страницы, который вы создали на шаге 1 в меню ловушек, и с этой ссылкой добавить класс 'ctools-use-modal'. Так, например:
Вот пример обратного вызова:
В
mymodule_create_student_form($form, $form_state)
, создайте свою форму, как обычно, и затем в функцииmymodule_create_student_form_submit(form, &$form_state)
(submit) установите значение NID вновь созданного студенческого узла в$form_state['storage']['student_id']
. Вот как вы получите ctools / AJAX для передачи нового nid в вашу исходную форму класса.В моей ситуации я использовал модал, чтобы выплевывать некоторую разметку на исходную страницу, поэтому я передал разметку в div-заполнитель, используя
ajax_command_append()
, затем у меня было несколько jQuery на исходной странице, отслеживающих div-заполнитель, и когда он находил контент в это, это переместило бы HTML в надлежащее место в другом месте формы узла. В вашем случае вам нужно будет заполнить одно-или многозначное поле ссылки на узел, которое может быть немного сложнее. Мне еще не нужно было этого делать ... поэтому у меня нет больше советов, чтобы предложить эту часть уравнения.источник
Можно также добавить поддержку узла в модуль Inline Entity Form .
РЕДАКТИРОВАТЬ: Inline Entity Form имеет поддержку узлов в настоящее время.
источник
Следующие модули могут быть использованы в Drupal 7:
Noderefcreate создает только новый узел, если он не существует с помощью мастера автозаполнения. Nodeconnect и entityconnect предоставляют кнопку добавления / редактирования для ссылки на узел, если используется мастер автозаполнения. Nodeconnect предоставляет его только для ссылки на узел, тогда как entityconnect предоставляет его для ссылки на узел, ссылку на сущность, ссылку на термин и ссылку на пользователя.
Inline_entity_form предоставляет два дополнительных виджета для ссылки на сущность (только).
источник
Если это действительно похоже на сценарий школы, и ваши ученики могут присоединиться к нескольким классам, я бы использовал:
Это также потребует использования токена , фильтрации представления в зависимости от nid класса и установки значения по умолчанию для поля ссылки на узел присутствия в качестве текущего nid класса.
В конце концов вы можете сопоставить свой тип контента Student с User с помощью пользовательской ссылки.
источник