[EVO] SimpleGallery: вывод картинок

Раз такой вопрос все же возник, то покажу, как делать вывод. Ввод, я надеюсь, понятен интуитивно (:

Вывод галереи на странице

Важное достоинство DocLister заключается в том, что теперь не нужно городить свои велосипеды для вывода данных из любых таблиц: не нужно придумывать названия параметров (чтобы потом в них путаться), пагинации, сортировки и т.п. Всю нудную работу сделал Agel_Nash , за что ему в очередной раз спасибо.

Для работы с произвольными таблицами в DocLister есть контроллер onetable. Все что нужно знать — это название таблицы, названия ее полей, название ключевого поля. Все остальное есть в документации.

Еще раз приведу названия полей в таблице sg_images:
  • sg_id — id картинки, ключевое поле (idField);
  • sg_index — позиция в списке;
  • sg_image — ссылка на картинку;
  • sg_title — название картинки;
  • sg_description — описание картинки;
  • sg_properties — здесь в формате json хранится информация о ширине и высоте картинки, а также размере файла, можно еще что-нибудь хранить в этом поле;
  • sg_add — дополнительное поле, сейчас уже не помню, зачем оно мне было нужно;
  • sg_isactive — флажок, чтобы скрыть какие-то картинки из вывода;
  • sg_rid — id ресурса, которому принадлежит картинка (parentField);
  • sg_createdon — дата добавления картинки.

Зная это, чтобы вывести картинки из галереи, достаточно сделать такой вызов на странице с галереей:
[[DocLister? &controller=`onetable` &table=`sg_images` &idField=`sg_id` &parentField=`sg_rid` &idType=`parents` &addWhereList=`sg_isactive=1` &tpl=`@CODE:[+sg_image+] [+sg_title+]
` &showParent=`-1`]]


Результат:

assets/galleries/2/kitty099h.jpg kitty099h
assets/galleries/2/kitty098p.jpg kitty098p
assets/galleries/2/kitty096j.jpg kitty096j
assets/galleries/2/kitty095s.jpg kitty095s
assets/galleries/2/kitty094c.jpg kitty094c
assets/galleries/2/kitty093p.jpg kitty093p


Если на страницу добавить [+pages+], а к вызову добавить &paginate=`pages` &display=`10` — получим пагинацию.

То есть вывод из своей таблицы не сильно отличается от обычного вывода документов.

Чтобы не писать каждый раз &controller=`onetable` &table=`sg_images` &idField=`sg_id`, я сделал сниппет-обертку sgLister. Agel_Nash этот сниппет доработал и теперь при его вызове происходит дополнительная обработка полей, в чанке можно использовать такие плейсхолдеры:
  • [+thumb.sg_image+], [+thumb.width.sg_image+], [+thumb.height.sg_image+] — превьюшка и ее размеры;
  • [+e.sg_title+] и [+e.sg_description+]- значения полей sg_title и sg_description, которые преобразованы в html-сущности (чтобы не поломать случайно верстку кавычками или скобками);
  • [+properties.имя_свойства+] — свойства картинки из поля sg_properties.

Использовать поле [+thumb.sg_image+] можно, если при вызове добавить параметры:
  • &thumbSnippet — имя сниппета, который вернет ссылку на превью, например, phpthumb;
  • &thumbOptions — параметры для создания превью, в том виде, в каком их примет указанный сниппет.

На практике это выглядит так:

[[sgLister? 
    &thumbSnippet=`phpthumb`
    &thumbOptions=`w=150&h=150&zc=1`
    &tpl=`@CODE:
	<a href="[+sg_image+]">
            <img src="[+thumb.sg_image+]" class="img-thumbnail" alt="[+e.sg_title+]" title="[+e.sg_description+]">
	</a>`]]


Результат:


Вывод списка галерей

Такая задача возникает не так часто, но все же возникает, поэтому я расширил контроллер site_content, чтобы получить возможность добавить картинки из галерей при выводе списка:


Вызов DocLister выглядит так:
[[DocLister? 
    &controller=`sg_site_content`
    &prepare=`prepareImages`
    &sgOrderBy=`sg_id DESC`
    &tpl=`@CODE:
	<div class="page-header">
    	    <h1><a href="[+url+]">[+pagetitle+]</a></h1>
      	</div>
	[+images+]
	<div class="clearfix"></div>` 
    &sgOuterTpl=`@CODE:[+wrapper+]`
    &sgRowTpl=`@CODE:
	<a href="[+sg_image+]">
            <img src="[+thumb.sg_image+]" class="img-thumbnail" alt="[+e.sg_title+]" title="[+e.sg_description+]">
	</a>`
    &sgDisplay=`5`]]


То есть то же самое, что простой вывод документов, но добавлены дополнительные параметры:
  • &sgOuterTpl и &sgRowTpl — чанки для вывода картинок;
  • &sgOrderBy — параметры сортировки картинок;
  • &sgDisplay — сколько картинок выводить, all — чтобы вывести все;
  • &sgAddWhereList — здесь можно указать условия для выборки картинок.

Для того, чтобы вывести в чанке документа (&tpl) эти картинки, следует использовать плейсхолдер [+images+]. Однако если просто вписать [+images+], то картинки не выведутся (потому что images — это массив). Нужен prepare-сниппет для дополнительной обработки (назовем его prepareImages):

<?php
if (isset($data['images'])) {
    $wrapper= '';
    foreach ($data['images'] as $image) {
	$ph = $image;
	$ph['thumb.sg_image'] = $modx->runSnippet('phpthumb',array(
            'input' => $image['sg_image'],
	    'options' => 'w=150&h=150&zc=1'
	));
        //сделали превьюшку

	$ph['e.sg_title'] = htmlentities($image['sg_title'], ENT_COMPAT, 'UTF-8', false);
	$ph['e.sg_description'] = htmlentities($image['sg_description'], ENT_COMPAT, 'UTF-8', false);
        //добавили поля e.sg_title и e.sg_description
        
	$wrapper .= $_DocLister->parseChunk($_DocLister->getCFGDef('sgRowTpl'), $ph);
        //обработали чанк sgRowTpl - для каждой картинки
    }
    $data['images'] = $_DocLister->parseChunk($_DocLister->getCFGDef('sgOuterTpl'),array('wrapper'=>$wrapper));
    //обработали чанк sgOuterTpl
}
return $data;
?>


Prepare-сниппет может пригодиться также для вывода свойств картинки. Это ширина, высота и размер файла — они хранятся в поле sg_properties в виде json. Тут все просто:

<?php
if (isset($data['sg_properties'])) {
    $properties = json_decode($data['sg_properties'],true);
    $data['width'] = $properties['width'];
    $data['height'] = $properties['height'];
    $data['size'] = $properties['size'];
}
return $data;
?>


С некоторых пор в комплекте имеется сниппет-обертка sgController, который вызывает DocLister с нужными параметрами и не требует отдельного prepare-сниппета:
[[sgController? 
    &sgOrderBy=`sg_id DESC`
    &thumbSnippet=`phpthumb`
    &thumbOptions=`w=150&h=150&zc=1`
    &tpl=`@CODE:
	<div class="page-header">
    	    <h1><a href="[+url+]">[+pagetitle+]</a></h1>
      	</div>
	[+images+]
	<div class="clearfix"></div>` 
    &sgOuterTpl=`@CODE:[+wrapper+]`
    &sgRowTpl=`@CODE:
	<a href="[+sg_image+]">
            <img src="[+thumb.sg_image+]" class="img-thumbnail" alt="[+e.sg_title+]" title="[+e.sg_description+]">
	</a>`
    &sgDisplay=`5`]]


В sgRowTpl можно использовать все плейсхолдеры, предусмотренные сниппетом sgLister.

Вот в общем-то и все.

Если возникают проблемы, то советую первым делом обновить DocLister с гитхаба.

170 комментариев

avatar
Не так давно я писал, что мне нравится PSSGallery. Но до этого не было SimpleGallery. Но когда SG увидел свет, я на последнем проекте решил его попробовать и не пожалел. Так что теперь я однозначно перехожу на SimpleGallery.

А вот еще одна идея топика-документации автору: описать систему плагинов и событий.
avatar
Спасибо за оценку (: Про плагины напишу, конечно. Просто пока я ими сам толком не пользовался.
avatar
А я а попробовал SG и у меня не пошло, ошибки, глюки и прочий хлам :( PHP Был 5.3 разбираться не было времени. Поставил другую галерею.
avatar
Если не сообщать об ошибках, то ошибки сами себя не исправят (:
avatar
ОК. В следующий заход отпишусь))
avatar
Спасибо за пост.
Есть ли возможность вывести на другой странице количество картинок в документе с галереей?
avatar

$parent = isset($parent) ? (int)$parent : 0;
$table = $modx->getFullTableName('sg_images');
if ($parent) {
    $images = $modx->db->query("SELECT sg_id FROM $table WHERE sg_rid=$parent");
    return $modx->db->getRecordCount($images);
}

А на странице с галереей можно плейсхолдер [+total+] использовать.
avatar
Благодарю. Почему-то вызов галереи на странице — срабатывает так, что отображается только 1 картинка, причём из другой галереи. В базе вроде всё ок.
На всех страницах галереей в основном отображаются разные картинки из одной галереи, но есть исключения.
Ещё почему-то в настройках плагина нельзя сделать «Создать таблицу» «Нет», но в самом начале таблица не создалась, создала вручную запросом. Сама таблица и сохранение картинок работает прекрасно.
avatar
Если дадите доступ, посмотрю, что не так.
С «Создать таблицу» есть только проблема, что создается со второго раза. И определяется, что создана таблица, тоже со второго раза (: Скорее всего, уберу эту настройку вообще.
avatar
Нужно было обновить DocLister.
avatar
ого, нетривиально :) большое спасибо!
avatar
Здравствуйте!
Есть несколько вопросов.
1. Вывожу документы через DocLister и нужно выводить первую картинки из галереи в каждом документе. Если ставлю параметр &sgDisplay=`1` то вываливается ошибка
MODX encountered the following error while attempting to parse the requested resource:
« Execution of a query to the database failed - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 »
SQL > SELECT * FROM (SELECT * FROM `t02demo`.`modx_sg_images` WHERE `sg_rid` IN (156,155,98) ORDER BY sg_id DESC) sg GROUP BY

Если &sgDisplay=`1` поставить в 2, 3 и больше то нормально.

2. Если в галереи отсутствуют фото, то нужно выводить документ с картинкой заглушкой. Возможно ли реализовать?
avatar
1. В контроллере мелкая ошибка, должно быть:

$sql = "SELECT * FROM (SELECT * FROM $table WHERE `sg_rid` IN ($rid) $sgAddWhereList ORDER BY $sgOrderBy) sg GROUP BY sg_rid";

А там $sg_rid, что и ломает вызов. 2,3 и больше другим запросом обрабатываются.
2. Да, в prepare-сниппете можно любые дополнительные проверки сделать.
avatar
Если используем снипет sgLister то там есть такие параметры:
&thumbSnippet=`phpthumb`							&thumbOptions=`w=133&h=138&zc=1`

Скажите, а возможно ли также использовать их при выводе галлереи через DocLister.
Так чтобы размеры превьюшки не были жестко заданы в prepare снипете?
avatar
Размеры можно передавать в prepare параметром, например &thumbOptions ([[DocLister?… &thumbOptions=`w=100&h=100&zc=1`]]). В prepare-сниппете этот параметр будет доступен через $_DocLister->getCFGDef('thumbOptions').
Комментарий отредактирован 2014-11-16 18:52:03 пользователем Pathologic
avatar
Фото размещены в документе контейнере. На странице выводятся через sgLister.
Эти-же фото из родительского документа нужно выводить в дочерних.
У sgLister есть такой параметр как указание id документа из которого выводить фотки или он только берет фото текущего документа?
Наверное в моем случае чтобы вывести из родителя фотки нужно вызывать через DocLister?
avatar
Параметр &parents можно использовать.
avatar
Сделал &parents=[*parent*] и у меня выводятся дочерние документы.
В них фото нет. Все фотки в родителе. В дочерних нужно выводить фото из родителя.
Вот смотрю в описание есть Поля в таблице sg_images:
sg_rid — id ресурса, которому принадлежит картинка;
Этот sg_rid както можно использовать при вызове DocLister?
avatar
[[sgLister? 
&parents=`[*parent*],[*id*]`
&orderBy=`sg_rid ASC,sg_index DESC`
&thumbSnippet=`phpthumb`
&thumbOptions=`w=150&h=150&zc=1`
&tpl=`@CODE:
	<a href="[+sg_image+]">
		<img src="[+thumb.sg_image+]" class="img-thumbnail" alt="[+e.sg_title+]" title="[+e.sg_description+]">
	</a>`]]

Вот, вывелись фотки из родителя и из текущего. Так нужно было?
Комментарий отредактирован 2014-11-19 13:30:14 пользователем Pathologic
avatar
Да так &parents=`[*parent*]` то что нужно.
Просто я тупанул и пробывал &parents=`[*parent*]` через DocLister и у меня получались дочерние.
avatar
Все там есть. sgLister работает на базе DocLister. Соответственно и наследует все его параметры. Добавьте к вашему вызову
&idType=`documents` &documents=`ID документ-(а,ов)`
avatar
Так выведутся картинки с указанными ID (: Или я обновление какое-то проворонил?
avatar
Ну да. Ему же нужно вывести фотки родительского документа в дочернем. Вот он и указывает ID конкретного документа, [*parent*] или UltimateParent…

А если в parents указать id документа, то выведутся все фотоальбомы дочерних документов, что вроде как бы немного не то судя по задаче.
avatar
Не должны выводиться все дочерние. Должны вывестись WHERE `sg_rid` IN (parents). А чтобы вывести фотоальбомы дочерних нужно использовать контроллер с параметром &sgDisplay=`all`.
Комментарий отредактирован 2014-11-19 13:04:06 пользователем Pathologic
avatar
При выводе через sgLister на самой странице картинки выводятся.
Если вывожу в таком варианте как вывод списка галерей то вообще ничего не выводится.
Думал может у меня где-то ошибка.
Но взял код prepareImages
И вот этот код полностью от сюда
[[DocLister? 
    &parents=`20`
    &controller=`sg_site_content`
    &prepare=`prepareImages`
    &sgOrderBy=`sg_id DESC`
    &tpl=`@CODE:
        <div class="page-header">
            <h1><a href="[+url+]">[+pagetitle+]</a></h1>
        </div>
        [+images+]
        <div class="clearfix"></div>` 
    &sgOuterTpl=`@CODE:[+wrapper+]`
    &sgRowTpl=`@CODE:
        <a href="[+sg_image+]">
            <img src="[+thumb.sg_image+]" class="img-thumbnail" alt="[+e.sg_title+]" title="[+e.sg_description+]">
        </a>`
    &sgDisplay=`5`]]

Единственное что добавил &parents=`20`
В чем может быть проблема?
DocLister скачан отсюда https://github.com/AgelxNash/DocLister/ и перезалил файлы поверх установленного
avatar
Перед этим я уже пользовался галереей, все сделал по описанному примеру, все работает. Вот решил использовать на другом проекте, но не полностью заработало.
Вижу что немного изменена конфигурация плагина появилось поле Controller class.
И еще появился сниппет sgController.
Возможно в этом кроется проблема, както их нужно использовать при выводе через DocLister?
avatar
В sgController можно посмотреть, как вызывать DocLister — добавился параметр &dir.
То есть вместо [[DocLister? &controller=`sg_site_content` &параметры]] можно просто писать [[sgController? &параметры]]
Комментарий отредактирован 2014-12-07 19:17:36 пользователем Pathologic
avatar
Обнаружил пару мелких ошибок в новых сниппетах и обновил на гитхабе.
avatar
Все, что описано выше — не выводит список галерей как на скриншоте…
У кого есть рабочий пример?
avatar
DocLister нужно обновить.
avatar
Все отлично. Мешал плагин LoadElement — поменял порядок вызова плагинов и все заработало. ;)
Вот еще небольшой вопрос: сейчас, при загрузке файлов — имя картинки помещается в sg_title по умолчанию.
Как избавиться от этого?
Не слишком красиво выглядят на странице имена типа: rollup_e, pop-up и т.д…
Понимаю, что это может быть очень удобно, когда файлы названы кирилиллическими символами — получаем сразу и транслитерацию и красивый sg_title, но моя практика говорит, что такого не встретишь среди вменяемых людей. :)
Комментарий отредактирован 2014-12-28 10:51:35 пользователем kalina
avatar
Как избавиться от этого?
Не понимаю, чем мешают названия картинок в админке (:
Избавиться можно, переопределив шаблоны картинки и формы редактирования (тогда sg_title будет создаваться, но не будет выводиться).
Или расширить классы, чтобы поле sg_title очищалось при добавлении новой картинки (в этом случае остается возможность вписать свои названия картинок).
avatar
Конечно не в админке. На сайте. Вот шаблон вывода:
<code><div><b>[+e.sg_title+]</b></div><div class="small">[+e.sg_description:nl2br+]</div></code>
Поскольку sg_title, после загрузки файлов, по умолчанию имеет данные из названия файла: rollup_e, pop-up — всё это безобразие выводится во фронт.
— Я не с претензией. Стараюсь по мере сил улучшить SimpleGallery. По моему заполнять sg_title по умолчанию не самый правильный подход…
Комментарий отредактирован 2014-12-28 14:17:19 пользователем kalina
avatar
не заполнять вообще — не самый правильный подход…
а так, лишний раз напоминает, что пустой атрибут alt — не есть гуд.
avatar
Обоснуйте, коллега.
И что есть гуд по вашему мнению, всяческий мусор в Alt по умолчанию? — пусть там будет пусто, нежели «IMG_1207»!
Предположим, я фотограф, мне нужно быстро выгрузить файлы и лишь потом, при необходимости, я дам им названия и описания.
Задача делится на 2 этапа:
1. Выгрузка файлов.
Все, больше ничего не нужно, есть картинки и этого достаточно.
Возможно, что Названия и Описания никогда не понадобятся. Не надо и все тут — допускате?
2. Если необходимо, я добавлю Названия и Описания, но позже…

Внимание:
любая камера выдает в названии файлов порядковые номера типа IMG_1207. Что это значит? Для меня, только одно — Названия и Alt по дефолту не нужны. Кому нужно добавят их позже, вторым этапом…
Комментарий отредактирован 2014-12-28 15:19:11 пользователем kalina
avatar
изменить шаблон вывода, делов-то.
(ни разу не подходил дефолтный шаблон)
а вот exif обрабатывать — было б интересно для фотографа, геопозиция и прочее.
Комментарий отредактирован 2014-12-28 15:25:07 пользователем RuSSeLL
avatar
Не убедительно, не продумано, не логично!
В одной галерее мне не понядобятся названия, в другой нужно их прописать.
А шаблон на все случаи один… И?

Exif обрабатывать — это хорошо, через IPTC можно даже Названия и Описания добавлять, но…
Потребность в этом есть у 2% пользователей. И?

Я тоже готов губу раскатать на это, Предлагаю помечтать об этом вместе, потрыньдеть, поговорить и разойтись… У нас ведь именно так бывает?
Все всего хотят на халяву… Увы…
Комментарий отредактирован 2014-12-28 15:34:44 пользователем kalina
avatar
Не убедительно, не продумано, не логично!
о-о-о, спокойно :)
А шаблон на все случаи один… И?
почему один-то? всегда разный, то под слайдер разметка, то под лайтбокс…
avatar
Не хочу обсуждать пустое…
avatar
Я написал решение ниже — аналогичным образом можно добавить поддержку Exif и чего угодно, не опасаясь потерять код при обновлении. А еще есть события, чтобы писать плагины, как раз для таких случаев.
avatar
Или расширить классы, чтобы поле sg_title очищалось при добавлении новой картинки (в этом случае остается возможность вписать свои названия картинок).
Обновляем плагин с гитхаба.
Создаем файл notitle.class.php в папке assets/plugins/simplegallery/lib:

<?php namespace SimpleGallery;

require_once (MODX_BASE_PATH.'assets/plugins/simplegallery/lib/controller.class.php');
class _sgData extends sgData {
    public function save($fire_events = null, $clearCache = false) {
        if ($this->newDoc) $this->field['sg_title'] = " ";
        return parent::save($fire_events, $clearCache);
    }
}
class notitleController extends sgController{
    public function __construct(\DocumentParser $modx){
        parent::__construct($modx);
        $this->data = new \SimpleGallery\_sgData($this->modx);
    }
}

Здесь мы расширили класс модели, чтобы при сохранении новых записей в таблицу поле sg_title очищалось (на самом деле оно не очищается, там пробел — иначе пропадает заголовок окошка с редактированием, а переделывать из-за такой фигни форму мне не хочется). И расширили класс контроллера, чтобы использовать измененную модель.
Теперь нужно этот файл каким-то образом загрузить. Создаем плагин на событие OnManagerPageInit:

$e = $modx->event;
if ($e->name == "OnManagerPageInit") {
	if (isset($invokedBy) && $invokedBy=="SimpleGallery") include_once(MODX_BASE_PATH.'assets/plugins/simplegallery/lib/notitle.class.php');
}

Теперь в настройках плагина SimpleGallery указываем Controller class: SimpleGallery\notitleController
Вот как бы и все.
avatar
Супер. Хитрозаморочено конечно, но работает… ;)
avatar
&sgOrderBy=`sg_rid DESC/ASC` — в любом случае выводит порядок 3,2,1
Еще если выводить в списке галерей по 1 картинке альбома (&sgDisplay=`1`) от каждого ресурса, показывает именно последнюю картинку(уже где то было).
avatar
&sgOrderBy=`sg_rid DESC/ASC` — в любом случае выводит порядок 3,2,1
Так и должно быть — потому что этот параметр определяет сортировку картинок в галерее (в одном ресурсе), т.е. sg_rid будет одинаковый в данном случае. А если нужно менять порядок вывода галерей, тогда просто &orderBy.
Соответственно при выводе списка галерей, по одной картинке на галерею (&sgDisplay=`1`), нужно &sgOrderBy=`sg_index DESC или ASC`.
avatar
&OrderBy=`id ASC`- так что ли?
avatar
Да, только &orderBy — с маленькой буквы.
avatar
Получилось спс.
avatar
Ни в какую не работала сортировка при выводе одной картинки
&sgOrderBy=`sg_index DESC` — у меня никак не влияет на порядок вывода :(…
в файле sg_site_content.php ORDER BY в запросе

$sql = "SELECT * FROM (SELECT * FROM {$table} WHERE `sg_rid` IN ({$rid}) {$sgAddWhereList} ORDER BY {$sgOrderBy}) sg GROUP BY sg_rid";

ни на что не влияет.
Заменил код на:
$sql = "SELECT * FROM {$table} WHERE sg_index IN (SELECT MAX(sg_index) FROM {$table} WHERE `sg_rid` IN ({$rid}) GROUP BY sg_rid) GROUP BY sg_rid";

теперь в листинге выводится первая (как выводятся) картинка из галереи.
Комментарий отредактирован 2016-06-13 18:46:03 пользователем lex
avatar
Проверил, у меня с одной картинкой работает сортировка.
avatar
с одной картинкой, в обе стороны?
avatar
sg_index ASC:

sg_index DESC:
avatar
Может дело в самой MySQL? Какая у Вас версия?
avatar
5.5.49
avatar
У меня 5.0.11 видимо не работает нормально сортировка во вложенных запросах.
avatar
В документации 5.5 самая старая версия, так что пора обновиться (:
avatar
Понял, спасибо большое.
avatar
Та же фигня на свежей mysql. Как решили?
avatar
чуть выше написано.
avatar
Если про код, то у меня сайт падает с ошибкой (
avatar
Попробуйте обратиться к Pathologic.
avatar
Вы как-то решили вопрос? я сейчас разбираюсь с тем же самым.
avatar
Нет, откатился на старую. Некогда.
avatar
Тоже не работает сортировка по sg_index на 5.5.47-MariaDB-1, попробую поменять строку запроса.
avatar
Итак, на хостинге Заказчика сортировка картинок по sg_index при sgDisplay=1 у меня не работает. А именно, всегда выдается картинка, загруженная первой (с минимальным sg_id).

Перетаскивание картинок в админке исправно меняет sg_index в таблице, но никак не отражается на фронте.

Версия MODX 1.2.1-d9.1.7, PHP Version 5.5.22, Версия сервера базы данных: 5.5.47-MariaDB-1

При изменении запроса как написано выше — сайт у меня также падает.

Но попытка изменения запроса оказалась ненужной. Так как я сначала думал, что могут влиять какие-либо особенности MariaDB, то потом просто напрямую в phpMyAdmin ввел нужный мне SQL-запрос. И, на удивление, БД вернула правильный ответ.

Так что дело оказалось не в версии сервера баз данных, а в чем-то другом.

После этого, я полностью, "1 в 1", скопировал сайт с хостинга заказчика на свой OpenServer, не меняя на сайте ничего, кроме конфига. И всё заработало.

При этом, на OpenServer: Версия MODX естественно та же 1.2.1-d9.1.7, PHP Version 5.5.33, Версия сервера базы данных: 5.5.48 — MySQL Community Server

То есть, фактически все то же самое, за исключением микро-различия в версии PHP. Интересно, неужели это влияет (PHP Version 5.5.33 против 5.5.22)?
avatar
Влияет, что MariaDB, видимо. Я не знаю, как этот запрос переписать.
avatar
avatar
Да, действительно.

Когда я получил правильный ответ от MariaDB на прямой запрос через phpMyAdmin, то сразу отмел гипотезу о «причастности» MariaDB и даже не стал смотреть в поиске.

Спасибо, что ты не поленился и посмотрел Гугл. Действительно, после более тщательной проверки ответов на те же прямые «ручные» запросы через phpMyAdmin выяснилось, что orderBy в суб-запросе MariaDB не учитывает.

В материале по твоей ссылке говорится, что LIMIT после orderBY в субзапросе исправляет ситуацию.

Я не великий дока в SQL, поэтому выбрал этот простой путь.

И на самом деле, когда в соответствующей строке sg_site_content.php я не мудрствуя поставил в подзапрос LIMIT 100, все сразу встало на свои места.

В принципе, дальше в контроллере у тебя вычисляется count, можно вычислить его раньше и подставить в LIMIT для случая sgDisplay=1.

Правда, это А) +1 запрос, и Б) я не знаю, насколько снизит эффективность самого обсуждаемого запроса добавленный в него LIMIT.
avatar
LIMIT 4294967295 (2^32-1) — этого более чем достаточно, точное значение смысла нет вычислять. Думаю, что даже при 10000 картинок в галерее решать придется совсем другие проблемы.
avatar
Согласен, но как я написал, не знаю: не замедлит ли выполнение запроса добавление такого LIMIT? не силен в оптимизации SQL запросов.

А так — все работает отлично, мне и LIMIT 200 с запасом хватает.
Комментарий отредактирован 2017-07-02 18:27:58 пользователем Aharito
avatar
Замедлит, но будет ли это заметно? Особенно на фоне тех извращений со сниппетами, которые городит большинство.
А если и будет, то написать плагин, который будет кэшировать нужную картинку в отдельную таблицу, и prepare-сниппет для вывода — дело простое.
avatar
Да, согласен. Ты эту правку внесешь в код или не станешь? (на будущее чтобы знать)
avatar
Внес.
avatar
Заметил такую «странность» — у меня при стандартном вызове

[[sgLister? 
    &thumbSnippet=`phpthumb`
    &thumbOptions=`w=940&h=280&zc=1&q=100`
	&display=`100`
	&tpl=`@CODE:
			<div class="container">
				<img src="[+thumb.sg_image+]" alt="">
				<div class="text">
					<div class="zagol hnb">[+e.sg_title+]</div>
					<div class="short hnm">[+e.sg_description+]</div>
				</div>
			</div>					
		`
	]]


в документе выводятся не только картинки, у которых sg_rid равен id этого документа, но и та, у которой sg_id равна id документа. Т.е., например в документе id=13 выводятся картинки с родителем 13 плюс дополнительно картинка, id которой равно 13.
Похоже какие-то нестыковки с DocLister — правда непонятно откуда взялись.
avatar
Вот так выглядит запрос — отсюда и лишняя картинка.

SELECT * FROM `ttt`.`modx_sg_images` WHERE `sg_isactive`=1 AND (`sg_rid` IN ('10') OR `sg_id` IN('10')) GROUP BY `sg_id` ORDER BY sg_index DESC LIMIT 0,100
avatar
Нужно обновить все, github.com/AgelxNash/DocLister/issues/124
avatar
Обновил сниппеты и топик, теперь вывод стал чуть проще и в большинстве случаев можно обойтись без дополнительных prepare-сниппетов.
Комментарий отредактирован 2015-03-04 03:43:06 пользователем Pathologic
avatar
Переберусь в эту ветку…
+sg_image+ — пустой, как и все сопутствующие плейсхолдеры. Перепробовал кучу предлагаемых тут выводов, но не смог добиться результат.
avatar
Ну а просто [[sgLister? &tpl=`@CODE:[+sg_image+]`]] что выведет?
avatar
заработало только так

[[sgLister? 
&parents=`[*id*]`
&orderBy=`sg_rid ASC,sg_index DESC`
&thumbSnippet=`phpthumb`
&thumbOptions=`w=150&h=150&zc=1`
&tpl=`tplGallery`
]]
avatar
Не могу понять, что вы не так делаете, но раз заработало, то и ладно.
А sg_rid ASC — это ни к чему, sg_rid одинаковый для всех картинок на текущей странице.
avatar
Да я уже сам не понимаю что творится.

Ясно одно, что заработало когда содержимое &tpl вынес в чанк.

Кстати описанный в топике Вывод списка галерей рабочий вариант?
Просто у меня даже debug=`1` молчит
avatar
Делаю точно такой же вызов, но через sgController и тогда все работает.
avatar
Дайте доступ в админку, надо разобраться.
avatar
— PHX
— Старая версия MODX

Другого не дано
avatar
Классная галерея! Все стало, все летает, багов не нашел)
avatar
Можно ли как то выводить превью которое генерит планиг?
мне просто нужно вывести как то так

[[sgLister? 
&parents=`[+id+]`
&orderBy=`sg_rid ASC,sg_index DESC`
&thumbSnippet=`phpthumb`
&thumbOptions=`w=434&h=578&zc=1&q=80`
&tpl=`@CODE:
{
	small: "[+sg_thumb+]", 
	big: "[+thumb.sg_image+]",
	alt: "[+sg_title+]"
},

`]]

там где small нужно миниатюру
avatar
Значит вместо несуществующего [+sg_thumb+] нужно использовать [+thumb.sg_image+], а там, где big — [+sg_image+]. В чем задача вообще?
Комментарий отредактирован 2015-04-22 13:30:46 пользователем Pathologic
avatar
small — одного размера
big — другого размера картинки
а в плагин грузятся картинки третего размера
avatar
картинки третего размера, это я про то что картинки будут грузится не подготовленые, а все разные
а как то можно вписать например так?

[[sgLister? 
&parents=`[+id+]`
&orderBy=`sg_rid ASC,sg_index DESC`

&tpl=`@CODE:
{
	small: "[[phpthumb? &input=`[+sg_image+]` &options=`w=125,h=160,far=C,bg=FFFFFF`]]", 
	big: "[[phpthumb? &input=`[+sg_image+]` &options=`w=434,h=578,far=C,bg=FFFFFF`]]",
	alt: "[+sg_title+]"
},

`]]

пробовал но не работает(
avatar
В @CODE нельзя использовать сниппеты, но просто указать имя чанка, а в нем уже использовать, хоть это и не соответствует идеям DocLister (:
Комментарий отредактирован 2015-04-22 14:04:29 пользователем Pathologic
avatar
да как то забыл( что там @CODE и может не отработаться сниппет
avatar
я то уже сделал

[[sgLister? 
&parents=`[+id+]`
&orderBy=`sg_rid ASC,sg_index DESC`
&thumbSnippet=`phpthumb`
&thumbOptions=`w=434&h=578&zc=1&q=80`
&thumbOptions_small=`w=125&h=160&zc=1&q=80`
&tpl=`@CODE:
{
	small: 	"[+thumb_small.sg_image+]", 
	big: 	"[+thumb.sg_image+]",
	alt: 	"[+sg_title+]"
},

`]]

но мне кажется должно быть как то попроще
avatar

//&prepare=`thumbsmall`
//thumbsmall
$imageField = $_DL->getCfgDef('imageField');
$thumbOptions = $_DL->getCfgDef('thumbOptions_small');
$thumbSnippet = $_DL->getCfgDef('thumbSnippet');
if(!empty($thumbOptions) && !empty($thumbSnippet)){
$data['thumb_small.'.$imageField] = $modx->runSnippet ($thumbSnippet, array(
    'input' => $data[$imageField],
    'options' => $thumbOptions
));
$info = getimagesize(MODX_BASE_PATH.$data['thumb_small.'.$imageField]);
$data['thumb_small.width.'.$imageField] = $info[0];
$data['thumb_small.height.'.$imageField] = $info[1];
}
return $data;
Комментарий отредактирован 2015-04-22 13:57:32 пользователем Pathologic
avatar
А вообще я сделаю возможность задавать несколько значений для thumbOptions.
avatar
Теперь можно задавать параметры &thumbOptions в виде json:

[!sgLister? 
	&thumbSnippet=`phpthumb`
	&thumbOptions=`{"default":"w=400&h=400&zc=1","small":"w=50&h=50&zc=1","medium":"w=200&h=200&zc=1"}`
	&tpl=`@CODE:
	<img src="[+thumb.sg_image+]" alt="400x400">
	<img src="[+thumb_medium.sg_image+]" alt="200x200">
	<img src="[+thumb_small.sg_image+]" alt="50x50">
`
!]
avatar
modx 1.1b-d7.0.18
Доброе время суток.
Помогите решить пару проблем
1. В админке не показываются превьюшки загруженных картинок во вкладке SimpleGallery. Хотя они загружаются и выводятся на сайте. Смотрел на разных браузерах. Картинки всяких размеров и т.п.
2. Не получается вывести картинки через ajax runSnippet sgLister

$modx->runSnippet('sgLister', array(
        'parents' => $_REQUEST['id'],
        'display' => '1',
		'tpl' => 'sgTpl_thumbTovar',
		'orderBy' => 'sg_rid ASC,sg_index DESC',
		
));

ajax.php начинается с

define('MODX_API_MODE', true);
include_once(dirname(__FILE__)."/index.php");
$modx->db->connect();
$modx->getSettings();
if (empty ($modx->config)) {
    $modx->getSettings();
}
$modx->documentMethod = "id";
$modx->documentIdentifier = isset($_REQUEST['id']) ? (int)$_REQUEST['id'] : 1;
$modx->documentObject = $modx->getDocumentObject('id', $modx->documentIdentifier);
//$modx->minParserPasses=3;
$modx->invokeEvent("OnWebPageInit");

все остальные сниппеты работают, в том числе DocLister с выводом документов
Комментарий отредактирован 2015-05-20 22:53:22 пользователем zloyxrom
avatar
DocLister новый
avatar
Выяснилось, что у меня вот такая же ошибка
Победить пока не удалось
Комментарий отредактирован 2015-05-21 07:43:31 пользователем zloyxrom
avatar
Там ее победили правильно установив DocLister (: Скачайте с github и скопируйте assets из архива в assets на сервере.
Комментарий отредактирован 2015-05-21 09:21:48 пользователем Pathologic
avatar
сделал это в первую очередь… дважды. Написал же новый DocLister :)
Комментарий отредактирован 2015-05-22 09:16:00 пользователем zloyxrom
avatar
Пришлите доступ тогда.
avatar
Проверил, работает ajax:

<?php
define('MODX_API_MODE', true);
include_once(dirname(__FILE__)."/index.php");
$modx->db->connect();
$modx->getSettings();
if (empty ($modx->config)) {
    $modx->getSettings();
}
$modx->documentMethod = "id";
$modx->documentIdentifier = isset($_REQUEST['id']) ? (int)$_REQUEST['id'] : 1;
$modx->documentObject = $modx->getDocumentObject('id', $modx->documentIdentifier);
//$modx->minParserPasses=3;
$modx->invokeEvent("OnWebPageInit");
echo $modx->runSnippet('sgLister', array(
    'parents' => $_REQUEST['id'],
    'display' => '1',
    'tpl' => '@CODE:[+sg_image+]
',
    'orderBy' => 'sg_rid ASC,sg_index DESC'
));

C превьюшками проблема в настройках вашего сервере. Такая же проблема у viplex , но в чем именно проблема и как ее решать я не знаю — у меня-то работает и на сервере и на разных хостингах.
avatar
Здравствуйте! Вывожу одну первую фото из галереи в чанке==tpl DocLister. Почему индекс (порядок фото) в обратной нумерации — последняя картинка в галерее имеет sg_index=0. В prepare-снипете обрабатывать так
<?php
if (isset($data['images'])) {  
	$data['singleImg'] = $modx->runSnippet('phpthumb',array(
            'input' => $data['images'][count($data['images'])-1]['sg_image'],
            'options' => 'w=300,h=200,zc=1,q=80'));	
    }     
return serialize($data);
?>
Комментарий отредактирован 2015-06-15 15:10:16 пользователем maximlit
avatar
Почему индекс (порядок фото) в обратной нумерации — последняя картинка в галерее имеет sg_index=0.
Чтобы добавленные картинки были видны сразу.
При выводе через контроллер sg_site_content (сниппет sgController) можно указать параметр &sgOrderBy=`sg_index DESC`, тогда будет то, что надо, и без prepare.
Комментарий отредактирован 2015-06-15 16:12:20 пользователем Pathologic
avatar
Добавил в комплект плагин и сниппет для работы с превьюшками. Оба называются sgThumb. В плагине нужно вручную установить события OnFileBrowserUpload, OnSimpleGalleryDelete и OnSimpleGallerySave и вписать конфигурацию в json — пример конфигурации в коде плагина.
Например, конфигурация:

[
{"template":3,"options":"w=1140&h=400&zc=1&q=96&f=jpg","folder":"slider"}
]

Будет создавать при загрузке превьюшки размером 1140х400 и складывать их в папку slider. Jpg будет дополнительно обрабатываться с помощью jpegtran.
Можно указать несколько конфигураций:

[
{"template":3,"options":"w=1140&h=400&zc=1&q=96&f=jpg","folder":"slider"},
{"template":8,"options":"w=355&h=270&far=C&bg=FFFFFF&q=96&f=jpg","folder":"small"}
]

Вместо template можно писать rid и указывать id документа — но не рекомендую, потому что обновление превьюшек не доделано для таких случаев.
Вывод будет такой:

[[sgLister? &thumbSnippet=`sgThumb` &thumbOptions=`slider` 
&ownerTPL=`@CODE:
<div class="col-md-12 hidden-xs hidden-sm">
    <div class="slider">[+dl.wrap+]
    </div>
</div>
&tpl=`@CODE:
<div class="slide">
    <img class="img-responsive" src="[+thumb.sg_image+]" alt="[+e.sg_title+]">
    <div class="slide-text">
	<p class="title">[+e.sg_title+]</p>
	<p class="desc">[+e.sg_description+]</p>
    </div>
</div>
`]]

При удалении картинок будут удаляться и превьюшки. Можно менять конфигурацию в плагине и пересоздавать их. В общем phpthumb для галерей больше не нужен.
avatar
Кста хорошо бы это все в документацию :)
Давно уже доступно:
github.com/evolution-cms/docs — но так никто и не пользуется :(
по части дополнить добавить что либо, хотя куда уже проще я даже не знаю ))
avatar
Надо с доклистера начать, все же базовый компонент (: Посмотрю что там можно сделать, хоть я и не любитель маркдауна.
avatar
Можно использовать обычный HTML он его нормально обрабатывает:)
avatar
Ты можешь выложить дамп сайта docs.evolution-cms.com, чтобы можно было поставить локально и смотреть, что получается, прежде чем отправлять изменения?
avatar
скинул в скайп
avatar
Я что-то OnFileBrowserUpload не могу найти
avatar
avatar
Такого раздела в официальных версиях нет. Требуется Evo 1.1?
avatar
В диминых сборках давно есть, а за официальными как-то и не слежу.
avatar
Вопросы по sgThumb. Если есть время — ответьте, чтобы в коде не разбираться.

1) Плагин sgThumb генерит превьюшки и раскидывает их по папкам -> значит, phpThumb-подобная генерация превью при выводе уже не нужна. Правильно я понимаю, что сниппет sgThumb нужен лишь для того, чтобы возвращать ссылки на уже созданные плагином превью?

2) Есть ли возможность в сниппете sgThumb указывать несколько конфигураций, напр. &thumbOptions=`big,small` и потом выводить их плейсхолдерами типа [+thumb_big.sg_image+], как в примере выше? у меня не выводит так.
Комментарий отредактирован 2016-04-21 17:25:28 пользователем Aharito
avatar
Всё, не выдержал, глянул код и всё понял :)

Чтобы указать несколько видов превью, надо писать так:
&thumbOptions=`{"small":"small","big":"big"}`
avatar
Выше на эту тему есть комментарий (:
avatar
А точно OnSimpleGallerySave?
может быть, OnSimpleGalleryRefresh?
avatar
Да, OnSimpleGalleryRefresh.
avatar
Наконецто добрался выложить в Extras )
extras.evolution-cms.com/packages/gallery/simplegallery.html
avatar
Как-то кривовато ты выложил (: Напиши хоть, что DocLister нужен (в репозитории не мешало бы повыкидывать из него лишнее, кстати).
avatar
Кстати, да. Там до сих пор те примочки, что я когда-то заказывал. Это про City и Streets. Они достаточно сырые, да и не базовые это вещи, и в репозитории вряд ли нужны.
avatar
Сниппет sgController может выводить количество картинок в галерее, если вызывать с параметром &count=`1`; в шаблоне &tpl соответственно доступен плейсхолдер [+count+]:
avatar
тема еще актуальна?

у меня вероятно тупой вопрос — у меня неправильно генерируются превьюшки.
<code>[!sgLister? &thumbSnippet=`phpthumb` &thumbOptions=`w=250&h=250&zc=C&ra=-45` &tpl=`@CODE: <a class="fancybox-thumb" href="[+sg_image+]" rel="fancybox-thumb" data-fancybox-group="thumb"><img class="img-thumbnail" title="[+e.sg_description+]" src="[+thumb.sg_image+]" alt="[+e.sg_title+]" /></a>`!]</code>
Вот такой код выдает группу картинок, но в случае, если часть картинок вертикальная, а часть — горизонтальная, обрезки фото не выходит

Также проверил работу параметра переворачивания картинки в phpthumb — он тоже не работает

Что я делаю не так и что нужно сделать, что бы было так?)

при этом код
<img alt="" src="[[phpthumb? &input=`assets/galleries/6/eshka.jpg` &options=`w=200,h=200,zc=C`]]">

выдает нормальную квадратную превью
Комментарий отредактирован 2016-07-05 13:11:23 пользователем gregst
avatar
У меня и w=250&h=250&zc=C&ra=-45 выдает квадратную превью:
avatar
да, странно

я вставлял код через tynimce через кнопку код. отключил редактор, вставил просто вызов снипета и все заработало.

Спасибо!)
avatar
Сборка Дмитрия 1.1RC-d7.1.6 + Simple Gallery
В админке все работает.
При выводе на сайте вообще ничего не выводит.
Пробовал так.
<code>[[DocLister? &controller=`onetable` &table=`sg_images` &idField=`sg_id` &parentField=`sg_rid` &idType=`parents` &addWhereList=`sg_isactive=1` &tpl=`@CODE:[+sg_image+] [+sg_title+]
` &showParent=`-1`]]</code>
Пробовал так.
[[sgLister? 
    &thumbSnippet=`phpthumb`
    &thumbOptions=`w=150&h=150&zc=1`
    &tpl=`@CODE:
        <a href="[+sg_image+]">
            <img src="[+thumb.sg_image+]" class="img-thumbnail" alt="[+e.sg_title+]" title="[+e.sg_description+]">
        </a>`]]

DocLister обновил через Extras.
SimpleGallery установлен тоже через Extras
Подскажите, пожалуйста, куда копнуть можно?
Комментарий отредактирован 2016-09-27 19:45:28 пользователем intzar
avatar
Включайте вывод лога и разбирайтесь. Если phx используете, то &tpl=`@CODE:` работать не будет.
avatar
Спасибо, проблема была в phx
avatar
Подскажите по плейсхолдеру
<code>
[[sgController? 
&id=`products`																			&parents=`[*id*]` 										&tpl=`category-product.DocLister.tpl` 																																&sgOrderBy=`sg_id ASC`										&thumbSnippet=`phpthumb`										&thumbOptions=`w=203&h=203&q=90&zc=1`										&sgOuterTpl=`@CODE:[+wrapper+]`
&sgRowTpl=`@CODE:<img src="[+thumb.sg_image+]" width="203" height="203" alt="[+pagetitle+]"/>`										&sgDisplay=`1`]]
</code>

Почему то не выводится плейсхолдер [+pagetitle+] который в &sgRowTpl.
Тут можно использовать плейсхолдеры как в doclister?
Комментарий отредактирован 2016-09-29 08:55:56 пользователем intzar
avatar
Вроде бы можно.
avatar
intzar, у вас получилось вывести [+pagetitle+]?
avatar
Пришлось пока влезть в sgController.php, нужно было по быстрому сделать

после стр. 52 добавил
$ph['e.pagetitle'] = $data['pagetitle'];
    $ph['e.longtitle'] = !empty($data['longtitle']) ? $data['longtitle'] : $data['pagetitle'];
avatar
Получилось разобраться? Поделитесь!
avatar
подскажите как в sgLister вывести порядковый номер записи(фото), [+iteration+], [+full_iteration+] не работают, а sg_index не подходит тк сортировка идет в обратном порядке и если фото ломает конструкцию
avatar
Здравствуйте.

Как добавлять фото скажите, пожалуйста. Не смог разобраться.
avatar
Стоит уточнить вопрос.
avatar
У топикстартера написано в самом начале: «Ввод, я надеюсь, понятен интуитивно (:»
Но я так и не понял как загрузить фото. Про вывод все расписано, а про ввод не написано.
Комментарий отредактирован 2017-06-07 11:28:37 пользователем planer
avatar
Тада, тоже когда-то «интуитил», надо бы простой примерчик на ютуб накидать. :)
Создай, к примеру, новую страничку/документ, id страницы/страниц пропиши в конфигурации плагина — на соответствующей странице появится вкладка галлереи.
Комментарий отредактирован 2017-06-07 12:00:48 пользователем jkray
avatar
В ступоре. Как вывести ресурсы Доклистером так, чтобы у каждого была одна, первая из SimpleGallery картинка?
  • 1px
  • 0
avatar
Используйте sgController из состава SimpleGallery
avatar
Использовал уже. Но это какой-то дурдом.
[!sgController?
		&idType=`parents`
		&parents=`[*id*]`
		&addWhereList=`template = 13`
		&depth=`2`
		&tvPrefix=``
		&tvList=``
		&tpl=`@CODE:
			<div class="ndg-catalog-item wow animated fadeInUp"><a href="[+url+]">[+images+]
[+pagetitle+]</a></div>`
		&orderBy=`menuindex ASC`
		&sgDisplay=`1`
		&thumbSnippet=`phpthumb`
		&thumbOptions=`w=173&h=173&zc=1`
   		&sgOuterTpl=`@CODE:[+wrapper+]`
    	&sgRowTpl=`@CODE:
            <img src="[+thumb.sg_image+]" alt="[+e.sg_title+]" title="[+e.sg_description+]">`
		&sgAddWhereList=`sg_index=0`
		!]

Он выводит последнюю фотографию.
&sgOrderBy подставлял, ему вообще фиолетово.
avatar
Попробуйте без sgAddWhereList, тогда может и сортировка сработает
&sgOrderBy=`sg_index DESC`


А если с sgAddWhereList, то зайдите в базу, таблица sg_images и посмотрите, какие картинки имеют sg_index = 0, может оно как раз правильно выводит))

P.S. Последняя картинка или первая — вопрос философский, с какого боку смотреть)))
avatar
В том и дело, что походу правильно. Последний элемент с нулевым индексом. Блин, бред…
Вопрос-то может и философский, но при редактировании получается форменная шиза.
avatar
как раз все правильно — это и есть ПЕРВАЯ загруженная фоторгафия! Вторая фотография грузится на голову первой, третья — на голову второй и т.д. Поэтому визуально первая кажется последней, а последняя — первой)) Как новости — последняя новость в ленте новостей ПЕРВАЯ.
Поэтому если хотите, чтобы выводилась последняя добавленная фотография (она в админке смотрится как первая) — уберите sgAddWhereList и пользуйтесь sgOrderBy
avatar
Людям привычнее счёт начинать слева направо.
Если в админке выстроил порядок от начала до конца (слева направо), то так и на сайте должно быть.
avatar
Так ничего же не мешает выстроить такой же (sg_index DESC) порядок на сайте. Если бы я делал sg_index ASC, то велика вероятность что тупые пользователи тупили бы типа «я три раза загрузил фотки, где же они». Вообще, почти за три года существования галереи никто не жаловался.
avatar
Спасибо. Просто ситуации бывают разные, согласен.
avatar
Нет ли мыслей, как в самой галерее поменять порядок вывода?
avatar
В самой галерее — это где? В админке что ли? Нет, таких мыслей не возникало — там все загружается правильно.
avatar
Подскажите пожалуйста, можно ли реализовать такую галерею с превьюшками?

<div class="product-gallery">
	<!-- Preview -->
	<ul class="product-gallery-preview">
	  <li id="preview01"><img src="img/preview01.jpg" alt="Product"></li>
	  <li id="preview02" class="current"><img src="img/preview02.jpg" alt="Product"></li>
	  <li id="preview03"><img src="img/preview03.jpg" alt="Product"></li>
	</ul>
	<!-- Thumblist -->
	<ul class="product-gallery-thumblist">
	  <li><a href="#preview01">
		<img src="img/thumb01.jpg" alt="Product">
	  </a></li>
	  <li class="active"><a href="#preview02">
		<img src="img/thumb02.jpg" alt="Product">
	  </a></li>
	  <li><a href="#preview03">
		<img src="img/thumb03.jpg" alt="Product">
	  </a></li>
	</ul>
</div>

Как составить
&tpl
&sgRowTpl
avatar
Можно, но как-нибудь без меня (: Два способа есть решения, плохой и хороший (:
avatar
Если кто знает хороший способ, поделитесь за пиво)
avatar
Хороший способ связан с возможностью сохранения объекта DocLister. Это позволяет получить данные один раз, а вывести сколько угодно раз (и как угодно):

<?php
$images = $modx->runSnippet('sgLister',[
    'parents' => 12,
    'ownerTPL' => '@CODE:<div class="images">[+dl.wrap+]</div>',
    'tpl'    => '@CODE:<a href="/[+sg_image+]"><img src="/[+thumb.sg_image+]"></a>',
    'thumbSnippet' => 'phpthumb',
    'thumbOptions' => 'w=100&h=100&zc=1',
    'saveDLObject' => '_DL'
]);
$_DL = $modx->getPlaceholder('_DL');
$_DL->ownerTPL = '@CODE:<div class="thumbs">[+dl.wrap+]</div>';
$_DL->config->setConfig([
    'thumbOptions' => 'w=30&h=30&zc=1',
]);
$thumbs = $_DL->render('@CODE:<img src="/[+thumb.sg_image+]">');
return $thumbs.$images;

Получится:

<div class="thumbs">
    <img src="/assets/cache/images/assets/galleries/12/5_ST_009-30x30-d10.jpg">
    <img src="/assets/cache/images/assets/galleries/12/4_ST_008-30x30-d10.jpg">
    <img src="/assets/cache/images/assets/galleries/12/3_ST_007-30x30-d10.jpg">
    <img src="/assets/cache/images/assets/galleries/12/24_011_copy-30x30-d10.jpg">
    <img src="/assets/cache/images/assets/galleries/12/22_008_copy-30x30-d10.jpg">
</div>
<div class="images">
    <a href="assets/galleries/12/5_ST_009.jpg"><img src="/assets/cache/images/assets/galleries/12/5_ST_009-100x100-34f.jpg"></a>
    <a href="assets/galleries/12/4_ST_008.jpg"><img src="/assets/cache/images/assets/galleries/12/4_ST_008-100x100-34f.jpg"></a>
    <a href="assets/galleries/12/3_ST_007.jpg"><img src="/assets/cache/images/assets/galleries/12/3_ST_007-100x100-34f.jpg"></a>
    <a href="assets/galleries/12/24_011_copy.jpg"><img src="/assets/cache/images/assets/galleries/12/24_011_copy-100x100-34f.jpg"></a>
    <a href="assets/galleries/12/22_008_copy.jpg"><img src="/assets/cache/images/assets/galleries/12/22_008_copy-100x100-34f.jpg"></a>
</div>

А плохой способ — это два раза вызвать DocLister.
avatar
при загрузке ч\б jpg через SG происходит автокоррекция уровней (ну или что-то такое). У фотки изменяется оттенок фона и она не вписывается в дизайн=( Это можно как-то исправить, кроме png?
avatar
В настройках плагина можно отключить все обработки.
avatar
Jpeg quality? Или есть еще что-то отвечающее за обработку?
avatar
А там разве много настроек? Обработка на клиенте и phpthumb.
avatar
Подскажите пожалуйста, а можно как-то вывести фото товара в корзину SHK?
avatar
Можно; не знаю как там выводится корзина, но в общем нужно сделать join таблицы с картинками.
avatar
Подскажите, есть ли возможность сортировки по числовому значению? Что-то типа
&sgSortType=`UNSIGNED`

или как сделать.

Решил приспособить галерею для простенького каталога, благо что уже есть Дополнительное поле sg_add, которое я и приспособил под цену. Теперь бы еще отсортировать по цене
&sgOrderBy=`sg_add ASC`
  • paic
  • 0
avatar
Так надо еще в базе приспособить поле для хранения чисел (:
avatar
Спасибо за ответ. Да, была такая мысль поменять тип поля с текстового на числовой, но до ее реализации не дошел так как оказалось, что «слетела» сортировка вообще. Т.е. нет никакой реакции на параметр sgOrderBy, хотя изначально работало. Так что пока сижу разбираюсь где накосячил или что из позже установленного повлияло((
avatar
Поставил в поле sg_add INT UNSIGNED вместо text и по цене в поле sg_add все сортируется отлично! Свои косяки нашел (попутал где в каком месте sgOrderBy, а где OrderBy).
avatar
Всех с Новым Годом, товарищи!
Может есть у кого готовое решение для проверки на наличие фото, чтобы заглушку воткнуть?
Буду очень признателен.
avatar
Для вывода используется sgLister (thumbSnippet=sgThumb)
Комментарий отредактирован 2018-01-06 11:29:38 пользователем googa
avatar
Здравствуйте!
Подскажите, пожалуйста, а как сделать вывод картинок (т.е. списка галерей) со всего сайта, а не только из конкретной папки? Спасибо большое!
avatar
С SimpleGallery работаю совсем недавно. Возник ряд проблем: не могу удалить картинки, ни добавить описание; выдается сообщение «Не удалось обработать ответ сервера». На превьюшке картинки — восклицательный знак. При загрузке тоже появляется сообщение об ошибке, но картинки загружаются, галерея работает… Не подскажете, в чем может быть дело? Спасибо большое!!!
avatar
Не выводится плейсхолдер [+pagetitle+] в &sgRowTpl.
Подскажите кто знает, как вывести?
avatar
Помогите пожалуйста.
Не могу побороть, что за ошибка. Обновили модекс.
Php 7.0, nginx, apach


Fatal error: Uncaught Error: Call to undefined method SimpleGallery\sgData::params() in /var/www/arbolitrb/data/www/arbolitrb.ru/assets/plugins/simplegallery/lib/controller.class.php:23 Stack trace: #0 /var/www/arbolitrb/data/www/8888888888.ru/assets/plugins/simplegallery/ajax.php(35): SimpleGallery\sgController->__construct(Object(DocumentParser)) #1 {main} thrown in /var/www/88888888/data/www/8888888888888.ru/assets/plugins/simplegallery/lib/controller.class.php on line 23
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.