Вчера от лени склепал обертку для стандартной 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), 600, 0, db_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->tid, NULL, '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', NULL, variable_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.
Комментарии
Пример работы?
Не заливал никуда. Некуда мне
Да, прикольненькие скриншотики, посмотреть бы на скрипт вживую.
Установил галерею, установил jcarousel. В блоке «Случайная картинка» выводит картинку, а на странице http://test1.ru/image пишет There are no images in this gallery.
Как исправить ?
Словарь галерей терминами пополнить?
Сделал этот фаил, все модули что надо установлены, но как отображалось, так и отображается дефолтно.
В чем может быть проблема ?
Не сброшен кеш?
Отключил его вообще
Можно вопрос? Как сделать так, что бы этот модуль показывал определенную галерею, например галерею с названием "Велики"?
Изменить код.
это понятно, что изменить код, я имею в виду как его изменить?=) я просто в php не очень пока=)
Тогда подучить PHP и изменитть код.