[ms2Gallery] Версия 1.3.0 - сниппет ms2GalleryResources
Как и обещал, представляю вашему вниманию новую версию ms2Gallery со сниппетом для вывода ресурсов с прикреплёнными изображениями.
Честно говоря, это вопрос №1 в поддержке магазина по ms2Gallery — «как вывести документы из контейнера такого-то с присоединением превью такого-то?». И мне очень надоело объяснять, как работает вот эта портянка:
Поэтому с версии 1.3.0 вы можете вызывать отдельный сниппет:
Сниппет называется ms2GalleryResources, потому что внутри у него старый добрый pdoResources. По большому счету, новый сниппет — это просто обёртка, которая готовит параметры и передаёт их в родительский сниппет.
Соответственно, вы можете использовать любые параметры pdoResources, плюс 3 новых:
Этот сниппет заменяет собой ms2GalleryFirstImages, который вышел не очень удачным решением.
Понятное дело, что работа напрямую через pdoResources возможна, как и прежде. Новый сниппет просто избавляет вас от необходимости вручную прописывать присоединения таблицы и выборку полей.
Обновляемся, пишем отзывы.
В следующей версии планирую добавить возможность отключения вкладки галереи для некоторых шаблонов и настройку для оформления вывода плейсхолдеров с картинками на странице.
Честно говоря, это вопрос №1 в поддержке магазина по ms2Gallery — «как вывести документы из контейнера такого-то с присоединением превью такого-то?». И мне очень надоело объяснять, как работает вот эта портянка:
[[!pdoPage?
&element=`pdoResources`
&loadModels=`ms2gallery`
&parents=`0`
&tpl=`myRowTpl`
&leftJoin=`{
"120x90": {"class":"msResourceFile","alias":"120x90", "on": "120x90.resource_id = modResource.id AND 120x90.path LIKE '%/120x90/' AND 120x90.rank=0"}
,"360x270": {"class":"msResourceFile","alias":"360x270", "on": "360x270.resource_id = modResource.id AND 360x270.path LIKE '%/360x270/' AND 360x270.rank=0"}
}`
&select=`{
"modResource":"*"
,"120x90":"120x90.url as 120x90"
,"360x270":"360x270.url as 360x270"
}`
]]
[[!+page.nav]]
Поэтому с версии 1.3.0 вы можете вызывать отдельный сниппет:
[[!pdoPage?
&element=`ms2GalleryResources`
&parents=`0`
&tpl=`@INLINE
<p>
<a href="[[+uri]]">[[+pagetitle]]</a>
<a href="[[+120x90.original]]"><img src="[[+120x90]]" title="[[+120x90.name]]" /></a>
</p>
`
&typeOfJoin=`inner`
&includeThumbs=`120x90,360x270`
&includeOriginal=`1`
]]
[[!+page.nav]]
Как видите, теперь всё стало гораздо проще.Сниппет называется ms2GalleryResources, потому что внутри у него старый добрый pdoResources. По большому счету, новый сниппет — это просто обёртка, которая готовит параметры и передаёт их в родительский сниппет.
Соответственно, вы можете использовать любые параметры pdoResources, плюс 3 новых:
- typeOfJoin — Тип присоединения картинок ресурса. Left — это Left Join, то есть, ресурсы будут выбираться, даже если у них нет картинок. И inner — это Inner Join, будут выбираться только ресурсы с картинками.
- includeThumbs — Список разрешенных превью через запятую. Например «120x90,360x270».
- includeOriginal — Добавление в выборку дополнительного join со ссылкой на оригинальное изображение. Будет доступно в массиве ресурса как «разрешение.original», например «120x90.original».
Этот сниппет заменяет собой ms2GalleryFirstImages, который вышел не очень удачным решением.
Понятное дело, что работа напрямую через pdoResources возможна, как и прежде. Новый сниппет просто избавляет вас от необходимости вручную прописывать присоединения таблицы и выборку полей.
Обновляемся, пишем отзывы.
В следующей версии планирую добавить возможность отключения вкладки галереи для некоторых шаблонов и настройку для оформления вывода плейсхолдеров с картинками на странице.
Комментарии: 48
Спасибо!
Спасибо!
возможность отключения вкладки галереи для некоторых шаблоново да, жду)!
Мне интереснее как завернуть превьюшки самой галереи в pdoPage. Не пачку папок, а именно сами галереи.
Для паджинации, у меня картинок может быть более 100 и выводить портянкой все на одной странице не логично.
Для паджинации, у меня картинок может быть более 100 и выводить портянкой все на одной странице не логично.
А вообще пробовали? Должно работать как часы.
А как же это:
Василий Наумкин 04 октября 2014, 08:24 #
Галерею ОДНОГО РЕСУРСА выводит сниппет ms2Gallery, без пагинации — её там нет.
Попробуй вызвать ms2Gallery, передав параметры: &page=`2` &limit=`5`, если сработает, то и pdoPage должен работать.
store.simpledream.ru/ms2gallery — последний пример.
Если нужно только превьюшки, без больших картинок, то всё еще проще:
Если нужно только превьюшки, без больших картинок, то всё еще проще:
[[!pdoPage?
&element=`pdoResources`
&loadModels=`ms2gallery`
&class=`msResourceFile`
&tpl=`@INLINE <img src="[[+url]]" />`
&where=`{"path:LIKE":"%/120x90/","active":1}`
&limit=`10`
&sortby=`id`
&sortdir=`ASC`
]]
[[!+page.nav]]
Можно еще добавить &groupby=`resource_id`
Выводится все. Добавил
&resources=`[[*id]]` &groupby=`resource_id` &depth=`0`
Но всеравно выводит все с подпапки, а не конкретный ресурс. Не пачку папок, а именно сами галереи.Вот как я должен был понять, что речь идёт об одной галерее, а не нескольких?
Укажи id ресурса, который тебе нужен:
&where=`{"resource_id":15,"path:LIKE":"%/120x90/","active":1}`
как раз надо выводить по клику большую миниатюру в colorbox.
&tpl=`@INLINE <div class="col-md-2"><a href="[[+640x480]]" class="thumbnail gallery" rel="group"><img src="[[+url]]" alt="[[+name]]" width="180" height="180"></a></div>`
&includeThumbs=`180x180,640x480`
&includeOriginal=`1`
В <a href>
пусто. У меня размеры 180x180, 640x480
А с товарами miniShop2 сниппет ms2GalleryResources должен работать? Пробую вывести превьюшки всех товаров в категории — ничего не выводит…
И не выйдет — у товаров своя галерея и свой сниппет msProducts, у которого есть параметр &includeThumbs.
Василий, спасибо за ответ. Это понятно, но что делать если нужно получить все превью товара, а не только превью основного изображения? Конкретно, нужно для экспорта каталога в csv файл, вывести все пути ко всем изображениям каждого товара. Это можно сделать через msProducts?
Это можно сделать через pdoTools — работай с классом msProductFile.
Пример для pdoResources чуть выше в комментариях, только учти, что вместе resource_id там product_id.
Пример для pdoResources чуть выше в комментариях, только учти, что вместе resource_id там product_id.
Василий, а интегрировать новый интерфейс ms2gallery в галерею для товаров miniShop2 есть в ближайших планах?
Ты прям вовремя — предлагай.
О, круто
Не выводятся иконки соответствующих типов файлов, которые складываем сюда assets/components/ms2gallery/img/mgr/extensions
Ошибка в файле core/components/ms2gallery/processors/mgr/gallery/getlist.class.php
Вот так работает:
Ошибка в файле core/components/ms2gallery/processors/mgr/gallery/getlist.class.php
if ($row['type'] != 'image') {
$row['thumbnail'] = (file_exists(MODX_ASSETS_PATH . 'components/ms2gallery/img/mgr/extensions/' . $row['type'] . '.png'))
? MODX_ASSETS_URL . 'components/minishop2/img/mgr/extensions/' . $row['type'] . '.png'
: MODX_ASSETS_URL . 'components/minishop2/img/mgr/extensions/other.png';
}
Ошибка в путях components/ms2gallery/img/mgr/extensions/Вот так работает:
if ($row['type'] != 'image') {
$row['thumbnail'] = (file_exists(MODX_ASSETS_PATH . 'components/ms2gallery/img/mgr/extensions/'.$row['type'].'.png'))
? MODX_ASSETS_URL . 'components/ms2gallery/img/mgr/extensions/'.$row['type'].'.png'
: MODX_ASSETS_URL . 'components/ms2gallery/img/mgr/extensions/other.png';
}
Такие вещи лучше писать сразу на GitHub. Поправил.
В след раз обязательно. )
Все никак руки не дойдут там зарегистрироваться и разобраться с функционалом…
Все никак руки не дойдут там зарегистрироваться и разобраться с функционалом…
Здравствуйте. Подскажите можно ли как то поменять сортировку фотографий в админке? нужно чтобы последние фото были вверху смещая старые в самый низ
Сейчас разве что вот тут поменять ASC на DESC.
А так, в источнике файлов есть настройка imageUploadDir, которая отвечает за то, куда добавлять картинку: в начало или в конец.
А так, в источнике файлов есть настройка imageUploadDir, которая отвечает за то, куда добавлять картинку: в начало или в конец.
спасибо большое, буду пробовать
А можно ли работать с первым, оригинальным изображением ресурса, через ms2GalleryResources, как с изображением загруженным в тивишку, что бы модификаторами пользоваться, ресайзить, например, и вообще, имея галерею ms2gallery? отказаться от других способов привязки изображений к ресурсам?
Заметку не читай, вопросы сразу задавай!
includeOriginal — Добавление в выборку дополнительного join со ссылкой на оригинальное изображение. Будет доступно в массиве ресурса как «разрешение.original», например «120x90.original».
Может я не врубаюсь… Если нет заранее сгенерированного размера, например 300х150, указанного в источнике файлов галереи, то «300х150.original» я вызвать не смогу. Ведь так?
Потому и вопрос, можно ли вызывать первое оригинальное изображение галереи ресурса и модифицировать его, например как тивишку модификатором phpthumbon и т.п.?
Потому и вопрос, можно ли вызывать первое оригинальное изображение галереи ресурса и модифицировать его, например как тивишку модификатором phpthumbon и т.п.?
Когда ты загружаешь любую картинку — ей делаются превьюшки, согласно настроек источника файлов. То есть, заранее сгенерированный размер всегда есть.
Но оригинальный файл есть, запись о нём в БД и ссылки в ms2GalleryResources — тоже.
что бы модификаторами пользоваться, ресайзить, напримерЭто как бы противоречит самой идее ms2Gallery. Все изображения там ресайзятся во время загрузки файла, а не страницы.
Но оригинальный файл есть, запись о нём в БД и ссылки в ms2GalleryResources — тоже.
как бы противоречит самой идее ms2Gallery— дело в том, что удобство загрузки изображений и их привязка к ресурсу, настолько самодостаточное качество ms2Gallery, что генерация превьюшек, иногда кажется не первым из достоинств.
Вот если бы еще в любом чанке можно было бы вызвать любое первое оригинальное изображение, но максимально просто, типа ms2GalleryResources+id ресурса и вот оно))) да еще потом его заресайзить как надо…
А на все случаи жизни превьюшек не создашь, тем более что вертикальные и горизонтальные изображения нужно учитывать…
PS пойду куплю еще одну ms2Gallery )) Благо у меня уже 50% скидка.
А какое именно из всех изображений ресурса, первое? Вот тебе простейший сниппет:
Вызывать как-то так:
<?php
$pdo = $modx->getService('pdoFetch');
$id = $modx->getOption('id', $scriptProperties, $modx->resource->id);
$rank = $modx->getOption('rank', $scriptProperties, 0);
$res = $pdo->getObject('msResourceFile',
array('resource_id' => $id, 'rank' => $rank),
array('loadModels' => 'ms2gallery','select' => 'url')
);
return $res ? $res['url'] : '';
Вызывать как-то так:
[[ms2GalleryImage?id=`[[*id]]`]]
О!… пошел пробовать) Спасибо!
Василий, а можешь немного дополнить, чтобы в этом сниппете можно было размер превью указать?
Заранее благодарен.
Заранее благодарен.
для этого сниппета размер превью указывается в «источниках файлов», в строке thumbnails.
Вот по такому принципу:
Вот по такому принципу:
[{"w":240,"h":240,"q":90,"zc":"1","bg":"FFFFFF"},{"w":75,"h":75,"q":90,"zc":"1","bg":"FFFFFF"}]
Может кто подскажет, как доработать данный сниппет, чтобы можно было выбирать размер превьюшек? Заранее, спасибо!
Вот, собственно:
<?php
$pdo = $modx->getService('pdoFetch');
$id = $modx->getOption('id', $scriptProperties, $modx->resource->id);
$rank = $modx->getOption('rank', $scriptProperties, 0);
$size = $modx->getOption('size', $scriptProperties, '360x270');
$res = $pdo->getObject('msResourceFile',
array('resource_id' => $id, 'rank' => $rank, 'path:LIKE' => '%/'.$size.'/'),
array('loadModels' => 'ms2gallery','select' => 'url')
);
return $res ? $res['url'] : '';
Параметр &size=`360x270` (например).
Возник отдельный вопрос. Только что приобрел ms2Gallery для сайта, который базируется на компоненте Collections. В дочерних ресурсах вкладка ms2Gallery отсутствует. Кто то сталкивался? Может уже есть решение?
Вопрос снят. (поспешил)
отличное дополнение! я думал тут речь о превью первой картинки для списка ресурсов — в итоге разобрался сам что нужно rightJoin (если нет в галерее картинок то пропустить) и image.rank=0 (чтобы только первая картинка отображалась, а не все сразу)
Спасибо, что не забросили компонент! Обновился аж с 1.0.x, исправились все глюки и интерфейс стал значительно удобней.
ЗЫ/ Сниппет FirstImage действительно разрывал мозг ))
ЗЫ/ Сниппет FirstImage действительно разрывал мозг ))
На здоровье!
а как скрестить этот сниппет с babel? что бы превьюшки он брал с оригинала
Если делать так
[[!pdoPage?
&element=`ms2GalleryResources`
&parents=`[[*id]]`
&depth=`0`
&tpl=`babelLanguageLinks`
&typeOfJoin=`left`
&includeThumbs=`1000x450`
&includeOriginal=`1`
&sortby=`menuindex`
&sortdir=`ASC`
]]
то babelLanguageLinks дает только один одинаковый ID, игнорируя вложенные документы.
Если делать так
[[!pdoPage?
&element=`ms2GalleryResources`
&parents=`[[*id]]`
&depth=`0`
&tpl=`babelLanguageLinks`
&typeOfJoin=`left`
&includeThumbs=`1000x450`
&includeOriginal=`1`
&sortby=`menuindex`
&sortdir=`ASC`
]]
то babelLanguageLinks дает только один одинаковый ID, игнорируя вложенные документы.
Как вывести noimage если в галерее пусто?
<a href=""><img class="shk-image" src="[[+360x270]]" alt="[[+pagetitle]]"/></a>
Решил проблему так, но это некрасиво. Может у кого получше есть варианты или всё таки предусмотрены варианты отсутствия картинки?
[[ms2GalleryImage?id=`[[*id]]`]]
<?php
$pdo = $modx->getService('pdoFetch');
$id = $modx->getOption('id', $scriptProperties, $modx->resource->id);
$rank = $modx->getOption('rank', $scriptProperties, 0);
$res = $pdo->getObject('msResourceFile',
array('resource_id' => $id, 'rank' => $rank),
array('loadModels' => 'ms2gallery','select' => 'url')
);
if(empty($res['url'])){
$res['url'] = '/assets/cache_image/noimage_400x400_166.jpg';
}
return $res ? $res['url'] : '';
<div id="msGallery">
{if $files?}
<div class="fotorama"
data-nav="thumbs"
data-thumbheight="45"
data-allowfullscreen="true"
data-swipe="true"
data-autoplay="5000">
{foreach $files as $file}
<a href="{$file['url']}" target="_blank">
<img src="{$file['small']}" alt="" title="">
</a>
{/foreach}
</div>
{else}
<img src="{('assets_url' | option) ~ 'components/minishop2/img/web/ms2_medium.png'}"
srcset="{('assets_url' | option) ~ 'components/minishop2/img/web/ms2_medium@2x.png'} 2x"
alt="" title=""/>
{/if}
</div>
Я прошу прощения, но где можно найти нормальную документацию по параметрам плагина, с описанием каждого параметра?
Не знаю, насколько эта документация «нормальная», но другой нет.
Добрый день, достался по наследству сайт на Модекс, и там почему-то выводятся только 10 производителей. Не могу найти место, где стоит лимит на количество записей. Выводятся они так:
{extends 'file:elements/templates/base.tpl'}
{block 'page_class'}brand-page{/block}
{block 'main'}
{$_modx->resource.longtitle}
{$_modx->resource.content}
{'ms2GalleryResources' | snippet: [
'parents' => $_modx->resource.id,
'sortby' => 'menuindex',
'sortdir' => 'ASC',
'typeOfJoin' => 'inner',
'includeThumbs' => '400x400',
'tpl' => '@FILE elements/chunks/brands/brands_row.tpl'
]}
{/block}
{extends 'file:elements/templates/base.tpl'}
{block 'page_class'}brand-page{/block}
{block 'main'}
{$_modx->resource.longtitle}
{$_modx->resource.content}
{'ms2GalleryResources' | snippet: [
'parents' => $_modx->resource.id,
'sortby' => 'menuindex',
'sortdir' => 'ASC',
'typeOfJoin' => 'inner',
'includeThumbs' => '400x400',
'tpl' => '@FILE elements/chunks/brands/brands_row.tpl'
]}
{/block}
У большинства сниппетов (из pdoTools) по умолчанию если не задан лимит, то он равен 10.
Здесь
docs.modx.pro/komponentyi/ms2gallery/snippetyi/ms2galleryresources
написано, что ваш ms2GalleryResources наследует все параметры от pdoResources
значит у него таже история. Добавьте параметр limit и нужно вам количество.
Здесь
docs.modx.pro/komponentyi/ms2gallery/snippetyi/ms2galleryresources
написано, что ваш ms2GalleryResources наследует все параметры от pdoResources
значит у него таже история. Добавьте параметр limit и нужно вам количество.
благодарю
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.