Добавить в Image Gallery переход к следующему изображению...

Автор: B.X - 19.01/2008, сб - 22:53

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

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

Итак, находим решение для версии Друпала 5.6 (модуль Image 5.x-1.x):

  1. <?php
  2. /**
  3. * Custom theme function for displaying an image node.
  4. * Implements previous and next buttons for images grouped in a gallery.
  5. */
  6. function название-темы_image_body($node, $size) {
  7.   //find out term id the node is tagged with (gallery tid)
  8.   $result = db_query("SELECT t.tid FROM {term_node} t WHERE t.nid = %d",$node->nid);
  9.   $tid = db_result($result);
  10.  
  11.   //print out image
  12.   $output = image_display($node, $size);
  13.  
  14.   //get all images with same tid (same gallery)
  15.   $result = db_query("SELECT n.nid FROM {term_node} t INNER JOIN {node} n ON t.nid=n.nid WHERE n.status=1 AND n.type='image' AND t.tid=%d ORDER BY n.sticky DESC, n.created DESC",$tid);
  16.  
  17.   //compose array we need for finding out prev and next
  18.   $images = array();
  19.   while ($imageNode = db_fetch_object($result)) {
  20.       $images[] = $imageNode->nid;
  21.   }
  22.  
  23.   //get array key for current node
  24.   $key = array_search($node->nid,$images);
  25.  
  26.   //if there is a key before this node's key, render prev
  27.   if(array_key_exists($key-1,$images)) {
  28.       $output .= '<ul class="image_nav">'."\n";
  29.       $output .= '    <li>'.l(t('First'),'node/'.$images[0])."</li>\n";
  30.       $output .= '    <li>'.l(t('Previous'),'node/'.$images[$key-1])."</li>\n";
  31.       $output .= "</ul>\n";
  32.  
  33.   }
  34.   //if there is a key after this node's key, render next
  35.   if(array_key_exists($key+1,$images)) {
  36.       $output .= '<ul class="image_nav">'."\n";
  37.       $output .= '    <li>'.l(t('Next'),'node/'.$images[$key+1])."</li>\n";
  38.       $output .= '    <li>'.l(t('Last'),'node/'.$images[count($images)-1])."</li>\n";
  39.       $output .= "</ul>\n";
  40.   }
  41.  
  42.   return $output;
  43. }
  44. ?>

Впишите название темы и вставьте данный код в template.php вашей темы, вот собственно и все изменения. В документах, которые находятся вашей галерее изображений появится строка с ссылками на изображения, для удобства навигации. Посмотреть как это выглядит можно, например, здесь...