Easy2Gallery и сортировка фотографий по тегам
Easy2, на наш взгляд, является наиболее удачной, многофункциональной и удобной галереей на Modx. Она позволяет не только одним нажатием кнопки управлять всеми категориями, изображениями, комментариями, но и легко настраивать внешний вид галерей, подключать различные плагины, слайдшоу, изменять навигацию и многое другое. Управление внутри модуля интуитивно понятное и любой желающий легко сможет в нем разобраться, что конечно так же является еще одним плюсом Easy2Gallery. Ну, вы, наверное, все это знаете и сами, так что хватить петь деферамбы и переходим к конкретике, а точнее к такому параметру как Tags.
В последних версиях модуля появилось такое поле как Теги. Оно позволяет папкам и что более интересно для нас – файлам, задавать ключевые слова. В вызове самого модуля присутствует параметр &tags, в котором через запятую можно перечислить необходимые метки. В этом случае на странице сайта вы увидите все папки и файлы, в поле Тэги которых перечислены нужные ключевые слова. Как следует из описания в самом модуле параметр &tags игнорирует параметр &gid – то есть с помощью него нельзя вывести только фотографии из конкретной папки с нужными ключевыми словами. А перед нами встала именно такая задача) Так как решений мы не нашли, решили придумать своё.
Если быть более точными, то задача была такая: имеется фотогалерея с различными папками, каждая из которых отображается на отдельной странице сайта. Подключаются галереи к страницам с помощью Tv-параметра и выпадающего списка, формируемого сниппетом getE2GTree, который находится в архиве модуля. На каждой странице с фотографиями должен находиться список ключевых слов, которые были вписаны в поле Теги фотографий из этой самой папки. При щелчке на любой из тегов происходит сортировка, и отображаются только те фотографии, в которых этот самый тег присутствует, причем фотографии только из этой конкретной папки. Понимаю слов много, возможно не все понятно, поэтому ссылка на пример, надеюсь, он прояснит ситуацию.
Ну и теперь самое вкусное, как все это реализовано. Есть правда одно НО – данный код не разбивает несколько вписанных слов через запятую на отдельные составляющие. То есть его можно применять только в том случае, если вам, например, нужна сортировка по годам или по каким-то конкретным словам (собака, кошка) или небольшим словосочетаниям. Возможно, в будущем мы доработаем данный способ, но пока он существует вот в таком виде.
Создаем сниппет, допустим [ !gallery_filter! ] и вписываем в него следующий код:
$txt = $modx->db->getValue($modx->db->select('value', $modx->getFullTableName('site_tmplvar_contentvalues'),'contentid="'.$modx->documentIdentifier.'"'));
$txts = substr($txt,4);
$all_tags = $modx->db->query('SELECT tag FROM `modx_easy2_files` WHERE dir_id="'.$txts.'" GROUP BY tag ORDER BY tag ASC' );
while($row = $modx->db->getRow($all_tags)) {
$tags.='<a href="[ ~[ *id* ]~ ]?tag='.$row['tag'].'">'.$row['tag'].'</a> ';
}
echo (
'<div class="sort">Показать: <a href="[ ~[ *id* ]~ ]">все</a> '
.$tags.'</div>');
$output = '';
if (isset($_GET['tag']) && !is_array($_GET['tag']) && $_GET['tag'] != 0) {
$params['gid'] = $modx->runSnippet('getE2Gids',array('give' => 'gid'));
$params['where_file'] = 'tag, equal, "'.$_GET['tag'].'"';
$params['limit'] = '300';
}
else {
$params['gid'] = $modx->runSnippet('getE2Gids',array('give' => 'gid'));
$params['limit'] = '30';
};
$output = $modx->runSnippet('easy2',$params);
return $output;
?>
В самом начале с помощью переменной $txt мы выясняем ID подключенной к странице фотогалереи. Так как в базе данных он хранится в виде 'gal *', где * ID номер, то с помощью переменной $txts обрезаем получившееся ранее значение до нужной нам цифры.
$all_tags –делаем запрос к базе данных и собираем все значения из поля tag в один массив. Затем с помощью while выводим каждый из тегов в виде ссылки и с помощью echo отображаем все получившееся на сайте.
Теперь есть теги, но нет самой галереи. Её вызов находится чуть ниже и он состоит из двух вариантов. В первом, если передан параметр 'tag', то есть пользователь кликнул по одному из тегов на сайте, кроме стандартных параметров gid – ID галереи и limit – количества выводимых фотографий на странице, передается так же параметр where_file – это условие, позволяющие отобразить только конкретные изображения из выбранной папки. Русским языком в where_file написано – выбрать все фотографии, в поле tag которых имеется нажатое пользователем ключевое слово. Второй вызов является простым вызовом Easy2Gallery через сниппет с использованием параметров gid и limit. Вот и весь код.
Пользуйтесь на здоровье!
