Настройка VirtualPage
Здравствуйте!
Нужна помощь в настройке VirtualPage. Прежде всего разобраться в логике.
Задача следующая. Выводить один из размеров картинки Ms2Gallery (допустим [[360x270]]) на отдельной странице. На «входе» имеется ссылка вида "/foto/[[+rank]]". Я пробую настроить такой маршрут: /foto/{[0-9]+}, выставляя событие OnPageNotFound. Полагая, что обработчик (Ресурс) на отсутствие страницы для начала просто покажет мне избранный ресурс. Что бы для начала увидеть работу компонента и дальше добиваться вывода плейсхолдера картинки нужного размера. Похоже я не правильно понимаю логику, потому что на все манипуляции получаю 404.
Нужна помощь в настройке VirtualPage. Прежде всего разобраться в логике.
Задача следующая. Выводить один из размеров картинки Ms2Gallery (допустим [[360x270]]) на отдельной странице. На «входе» имеется ссылка вида "/foto/[[+rank]]". Я пробую настроить такой маршрут: /foto/{[0-9]+}, выставляя событие OnPageNotFound. Полагая, что обработчик (Ресурс) на отсутствие страницы для начала просто покажет мне избранный ресурс. Что бы для начала увидеть работу компонента и дальше добиваться вывода плейсхолдера картинки нужного размера. Похоже я не правильно понимаю логику, потому что на все манипуляции получаю 404.
Комментарии: 4
создаете обработчик в VP:
содержимое
содержимое
- тип — динамический ресурс
- содержимое — [[$images]]
/images/{res:[0-9]+}/{thumb}/{rank:[0-9]+}
создаете чанк images:содержимое
[[!images?
&tpl=`@INLINE <img src="[[+url]]">`
]]
создаете снгиппет images:содержимое
<?php
if (!isset($_REQUEST['fastrouter'])) {return '';}
$ms2Gallery = $modx->getService('ms2gallery', 'ms2Gallery', MODX_CORE_PATH . 'components/ms2gallery/model/ms2gallery/');
if (!$modx->loadClass('pdoTools', MODX_CORE_PATH . 'components/pdotools/model/pdotools/', false, true)) {
return false;
}
$pdoTools = new pdoTools($modx, $scriptProperties);
$f = $_REQUEST['fastrouter'];
if (!$File = $modx->getObject('msResourceFile', array(
'resource_id' => $f['res'],
'path' => $f['res']. '/' . $f['thumb'] . '/',
'rank' => $f['rank']
))) {
$modx->sendErrorPage();
}
$row = $File->toArray();
$scriptProperties['tpl'] = !empty($tplRow) ? $tplRow : '';
$pdoTools->setConfig(array_merge($default, $scriptProperties));
$output = empty($tpl)
? '<pre>' . $pdoTools->getChunk('', $row) . '</pre>'
: $pdoTools->getChunk($tpl, $row, $pdoTools->config['fastMode']);
if (!empty($toPlaceholder)) {
$modx->setPlaceholder($toPlaceholder, $output);
}
else {
return $output;
}
и все… радуетесь.
Благодарю за код Володя!
Я к сожалению всё равно не понимаю полностью логику, поэтому пока не удаётся реализовать вашу помощь.
Почему маршрут именно такой?
В моём же случае я пытаюсь вывести все фото галлереи с пагинацией (предполагается, что фото может быть сколько угодно много). Для этого воспользовался кодом, который предложил Василий.
Я предполагал, что если ресурс будет являться фотогаллереей, то все фото этого ресурса должны быть её детьми. Типа: /fotocategory/5.img
Но ваш вариант тоже хотелось бы понять и освоить.
Я к сожалению всё равно не понимаю полностью логику, поэтому пока не удаётся реализовать вашу помощь.
Почему маршрут именно такой?
/images/{res:[0-9]+}/{thumb}/{rank:[0-9]+}
В стандартном выводе ms2Gallery адрес получается таким/assets/images/resources/7/360x270/foto.jpg
/assets/images/resources/7/foto.jpg
Пробовал по разному выставлять маршрут, к сожалению не получается. Скажите, по вашему примеру — VP обрабатывает путь к реальной картинке (или превью)? То есть идёт подмена вывода, и событие не OnPageNotFound, если я конечно верно предполагаю.В моём же случае я пытаюсь вывести все фото галлереи с пагинацией (предполагается, что фото может быть сколько угодно много). Для этого воспользовался кодом, который предложил Василий.
[[!pdoPage?
&element=`pdoResources`
&loadModels=`ms2gallery`
&class=`msResourceFile`
&tpl=`prev.tpl`
&where=`{"resource_id":"[[*id]]","parent":"0","active":"1"}`
&limit=`12`
&sortby=`id`
&sortdir=`ASC`
&leftJoin=`{
"120x90":{"class":"msResourceFile","alias":"120x90", "on":"120x90.parent=msResourceFile.id AND 120x90.path LIKE '%/120x90/'"}
,"360x270":{"class":"msResourceFile","alias":"360x270", "on":"360x270.parent=msResourceFile.id AND 360x270.path LIKE '%/360x270/'"}
}`
&select=`{
"msResourceFile":"*"
,"120x90":"120x90.url as 120x90"
,"360x270":"360x270.url as 360x270"
}`
]]
Таким образом я получаю все фото сайта, или в данном случае, ресурса, в виде превьюшек. Задачей предполагается, что каждая превьюшка откроется на отдельной странице с большей превьюшкой. Это необходимо для возможности комментировать каждую фотографию, лайкать и тому подобное. В общем, классическая фотогаллерея, которой, благодаря Ms2Gallery очень удобно управлять, и заливать сразу сотню фото к одному ресурсу.Я предполагал, что если ресурс будет являться фотогаллереей, то все фото этого ресурса должны быть её детьми. Типа: /fotocategory/5.img
Но ваш вариант тоже хотелось бы понять и освоить.
Почему маршрут именно такой?Да он может быть каким угодно…
Прописывайте в вашем шаблоне prev.tpl ссылку на основное изображение согласно маршруту а VP и все.
Пример выше адаптировать не сложно…
Благодарю за помощь!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.