Удаление дочерних материалов Node Gallery

Опубликовано 2014.06.17

Модуль Node Gallery позволяет создавать на сайте галереи. Причём каждое фото одной галереи - это отдельная нода. Пересматривать такую галереи не очень удобно, так как придётся обновлять страницу, а не использовать AJAX. Но зато можно темизировать каждую страницу фото, заполнять мета тэги и повысить кликабельность сайта. Для чего это нужно - решайте сами. и нужно ли вам это вообще. Тем не менее этот модуль имеет право на существование. Однако в нём есть один недостаток, скорее баг, нежели фича. Суть его в следующем: если у галереи есть несколько фотографий-то при удалении само фотогалереи приаттаченые фотографии не удаляются. Решается эта проблема очень просто. Создаёте свой модуль и имплементируете в нём hook_node_delete Этот хук перехватит удаление ноды. Соответственно перед удаление галереи можно посмотреть её nid и по нему найти и удалить все дочерние фотографии. Для модуля с именем my_module код выглядит следующим образом:
  1. function my_module_node_delete($node) {
  2. //Удаление фотографий галереи, в случае удаления самой галереи
  3. if($node->type == 'node_gallery_gallery') {
  4. $nids = array();
  5. $res = db_select('node_gallery_relationship', 'gr')->condition('gr.ngid', $node->nid)->fields('gr', array('nid'))->execute();
  6. while($r = $res->fetchAssoc()) {
  7. $nids[] = $r['nid'];
  8. }
  9. if($nids != array()) {
  10. node_delete_multiple($nids);
  11. }
  12. }
  13. }
Актуально для Drupal 7.