Drupal показывает пользовательское сообщение при удалении коллекции полей
Я использовал модули field_collection и field_collection_fieldset из drupal-7. Я настроил поле коллекции полей (неограниченное количество элементов) для типа контента. Поэтому при просмотре узла его содержимое отображается со всеми полями, включая элементы коллекции полей.
Теперь я хочу изменить сообщение, отображаемое на странице, когда элемент коллекции полей запрашивает подтверждение для его удаления и когда он удаляется успешно. (В частности, я хочу изменить метку удаляемого элемента).
Потому что в настоящее время метка элемента коллекции полей отображается неправильно (когда я пытаюсь удалить его и когда он удаляется). Кроме того, отображаемое сообщение отличается после удаления метки. Поэтому я хочу изменить это.
Для этого я обнаружил, что могу напрямую перейти и изменить 2 функции в файле field_collection.pages.inc. Они есть:
- field_collection_item_delete_confirm
- 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')));
Но я думаю, что это не стандартный подход. Поэтому я хотел бы использовать хук в моем пользовательском модуле для переопределения этих функций. Я не уверен, какие хуки использовать в моем пользовательском модуле. Может кто-то помочь мне с этим?
1 ответ
Я достиг решения своей проблемы, спасибо Clive за его ценные предложения.
Вот что я сделал, чтобы обработать удаление элемента коллекции полей для узла:
- Создал ловушку типа hook_node_view() в моем пользовательском модуле и переопределил ссылку удаления для элементов коллекции полей, чтобы они указывали на собственный путь, который объявлен в hook_menu() моего пользовательского модуля.
- Теперь пользовательский путь сопоставляется с файлом шаблона (передавая идентификатор элемента коллекции полей).
- Логика внутри tpl-файла обрабатывает удаление элемента коллекции полей (переданного по id) с помощью entity_delete_multiple() и устанавливает настраиваемое сообщение, которое будет отображаться обратно на страницу просмотра узла.
Готово:) Таким образом, мне не нужно вносить изменения в существующие файлы модуля field_collection, и при этом все равно достигать нужной мне функциональности. Друпал это здорово!