Тупая галерея на Image + jCarousel

Главные вкладки

Аватар пользователя Химический Али Химический Али 2 сентября 2009 в 9:00

Вчера от лени склепал обертку для стандартной Image Gallery c применением jCarousel и ThickBox.

Общий вид галереи

При клике по картинке отрабатывает ThickBox:

Просмотр картинки

При клике по заголовку галереи открывается обычная галерея с пейджером.

Все это делается одной функцией в template.php при условии, что у вас установлен модуль jCarousel:

<?php
/**
 * Theme a gallery page
 */
function phptemplate_image_gallery($galleries$images) {
  
drupal_add_css(drupal_get_path('module''image_gallery') .'/image_gallery.css');
  
drupal_add_js(drupal_get_path('module''jcarousel') .'/jcarousel/lib/thickbox/thickbox.js');
  
drupal_add_css(drupal_get_path('module''jcarousel') .'/jcarousel/lib/thickbox/thickbox.css');

  

$size image_get_sizes(IMAGE_THUMBNAIL);

  

$content '';
  if (
count($galleries)) {
    
$content .= '<div class="galleries">';
    foreach (
$galleries as $gallery) {

      

$content .= "<h3>"l($gallery->name'image/tid/'$gallery->tid) .$gallery->count</h3>\n";

      

// Determine sort order.
      
$join $where $order '';
      
$args = array();
      switch (
variable_get('image_gallery_sort_order'IMAGE_GALLERY_SORT_CREATE_DESC)) {
        case 
IMAGE_GALLERY_SORT_CREATE_DESC:
          
$order 'ORDER BY n.sticky DESC, n.created DESC';
          break;

        case 

IMAGE_GALLERY_SORT_CREATE_ASC:
          
$order 'ORDER BY n.sticky DESC, n.created ASC';
          break;

        case 

IMAGE_GALLERY_SORT_FILENAME:
          
$join "INNER JOIN {image} i ON n.nid = i.nid INNER JOIN {files} f ON i.fid = f.fid";
          
$where "AND f.filename = '%s'";
          
$args[] = IMAGE_ORIGINAL;
          
$order "ORDER BY n.sticky DESC, f.filepath ASC";
          break;

        case 

IMAGE_GALLERY_SORT_TITLE:
          
$order 'ORDER BY n.sticky DESC, n.title ASC';
          break;
      }

      

$pics = array();
      
$list '';
      if (
$gallery->tid) {
        
// Allow images to be sorted in a useful order.
        
$query "SELECT n.nid FROM {term_node} t INNER JOIN {node} n ON t.nid = n.nid $join WHERE n.status = 1 AND n.type = 'image' AND t.tid = %d $where $order";
        
$count_query "SELECT COUNT(DISTINCT(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 ";
        
$args array_merge(array($gallery->tid), $args);
        
// тут берется число для показа, выставленное для стандартных галерей. я захотел 600
        
$result pager_query(db_rewrite_sql($query), 6000db_rewrite_sql($count_query), $args);
        while (
$node db_fetch_object($result)) {
          
$pics[] = node_load(array('nid' => $node->nid));
        }
      }
      
      if (
$pics) {
        foreach (
$pics as $pic) {
          
$list .= '<li><a class="thickbox" href="'$pic->images['preview'] .'"><img src="'$pic->images['thumbnail'] .'" alt="'$pic->title .'" /></a></li>';
        }
        
$content .= "<ul class=\"category\" id=\"horizontalcarousel{$gallery->tid}\">$list</ul>";
        
jcarousel_add('#horizontalcarousel' $gallery->tidNULL'ie7');
      }
    }
    
$content .= "</div>\n";
  }
 
// показ стандартной галереи
  
if (!empty($images)) {
    
$content .= '<ul class="images">';
    foreach (
$images as $image) {
      
$content .= theme('image_gallery_img'$image$size);
    }
    
$content .= "</ul>\n";
  }

  if (

$pager theme('pager'NULLvariable_get('image_images_per_page'6), 0)) {
    
$content .= $pager;
  }

  if (

count($images) + count($galleries) == 0) {
      
$content .= '<p class="count">'format_plural(0'There is 1 image in this gallery.''There are count images in this gallery.') ."</p>\n";
  }

  return 

$content;
}
?>

Модуль ThickBox не нужен, я взял его из jcarousel/lib.

Комментарии

Аватар пользователя skoch skoch 29 ноября 2009 в 15:15

Сделал этот фаил, все модули что надо установлены, но как отображалось, так и отображается дефолтно.
В чем может быть проблема ?

Аватар пользователя Flaunder Flaunder 5 декабря 2009 в 11:27

Можно вопрос? Как сделать так, что бы этот модуль показывал определенную галерею, например галерею с названием "Велики"?