Drupal показывает настраиваемое сообщение при удалении коллекции полей

Я использовал модули field_collection и field_collection_fieldset из drupal-7. Я настроил поле field collection (неограниченное количество элементов) для типа контента. Поэтому, когда я просматриваю узел, его содержимое отображается со всеми полями, включая элементы коллекции полей.

Теперь я хочу изменить сообщение, отображаемое на странице, когда у элемента коллекции полей запрашивается подтверждение для его удаления и когда он удаляется успешно. (В частности, я хочу изменить Метку удаляемого элемента).

Потому что в настоящее время метка элемента коллекции полей отображается неправильно (когда я пытаюсь удалить его и когда он удаляется). Кроме того, после удаления метки отображается другое сообщение. Так что я хочу это изменить.

Для этого я обнаружил, что могу напрямую изменить 2 функции в файле field_collection.pages.inc. Они есть:

  1. field_collection_item_delete_confirm
  2. field_collection_item_delete_confirm_submit

Пример: измените следующую строку:

t('Are you sure you want to delete %label?', array('%label' => $field_collection_item->label()))

К этому:

t('Are you sure you want to delete %label?', array('%label' => 'First Collection'))

И это:

drupal_set_message(t('%label has been deleted.', array('%label' => drupal_ucfirst($field_collection_item->label()))));

К этому:

drupal_set_message(t('%label has been deleted.', array('%label' => 'First Collection')));

Но я считаю, что это нестандартный подход. Поэтому я хотел бы использовать ловушку в моем пользовательском модуле, чтобы переопределить эти функции. Я не уверен, какие хуки использовать в моем пользовательском модуле. Может кто-то помочь мне с этим ?


person shasi kanth    schedule 16.01.2015    source источник
comment
Где код, который вы хотите переопределить? Функция формы / обратный вызов страницы / другое?   -  person Clive    schedule 16.01.2015
comment
Надеюсь, это функция формы. Потому что первая функция запускается, когда я нажимаю ссылку «Удалить» рядом с коллекцией полей в представлении узла, а вторая функция - когда она удаляется успешно.   -  person shasi kanth    schedule 16.01.2015
comment
Похоже, будет тогда. hook_form_alter() или hook_form_FORM_ID_alter() - это то, что вы ищете   -  person Clive    schedule 16.01.2015
comment
Я могу использовать hook_form_alter () для изменения содержимого, отображаемого на странице, когда я нажимаю кнопку «Удалить». Но можно ли сохранить существующий контент и просто изменить метку удаляемого элемента?   -  person shasi kanth    schedule 16.01.2015
comment
Я не знаю, что вы имеете в виду - вы можете переопределить функции отправки формы в hook_form_alter, если это то, о чем вы имеете в виду. Но это может быть сложно, может быть проще обеспечить обратный вызов новой страницы через hook_menu_alter   -  person Clive    schedule 16.01.2015
comment
Да, я считаю, что hook_menu_alter () может лучше удовлетворить мои потребности. Не могли бы вы привести пример того, как изменить обратные вызовы меню существующего модуля field_collection в моем настраиваемом модуле?   -  person shasi kanth    schedule 16.01.2015
comment
У меня нет времени загружать сбор и проверку полей, но в основном я ищу путь к маршрутизатору, который управляет формой (вы, вероятно, можете найти его в field_collection_menu), скопируйте эту функцию формы в свой собственный модуль и переименуйте ее, отредактируйте и т. д. Затем реализуйте hook_menu_alter() и замените первый из page arguments для этого пути именем вашей новой функции.   -  person Clive    schedule 16.01.2015


Ответы (1)


Я нашел решение своей проблемы благодаря Клайву за его ценные советы.

Вот что я сделал, чтобы обработать удаление элемента коллекции полей для узла:

  1. Создал ловушку типа hook_node_view () в моем настраиваемом модуле и переопределил ссылку удаления для элементов коллекции полей, чтобы они указывали на настраиваемый путь, который объявлен в моем настраиваемом модуле hook_menu ().
  2. Теперь настраиваемый путь сопоставляется с файлом шаблона (с передачей идентификатора элемента коллекции полей).
  3. Логика внутри файла tpl обрабатывает удаление элемента коллекции полей (переданного по id) с помощью entity_delete_multiple () и устанавливает настраиваемое сообщение, которое будет отображаться обратно на страницу просмотра узла.

Готово :) Таким образом, мне не нужно изменять существующие файлы модуля field_collection и при этом добиваться нужной мне пользовательской функциональности. Drupal великолепен!

person shasi kanth    schedule 19.01.2015