Настройка VirtualPage

Здравствуйте!
Нужна помощь в настройке VirtualPage. Прежде всего разобраться в логике.

Задача следующая. Выводить один из размеров картинки Ms2Gallery (допустим [[360x270]]) на отдельной странице. На «входе» имеется ссылка вида "/foto/[[+rank]]". Я пробую настроить такой маршрут: /foto/{[0-9]+}, выставляя событие OnPageNotFound. Полагая, что обработчик (Ресурс) на отсутствие страницы для начала просто покажет мне избранный ресурс. Что бы для начала увидеть работу компонента и дальше добиваться вывода плейсхолдера картинки нужного размера. Похоже я не правильно понимаю логику, потому что на все манипуляции получаю 404.
Александр Н
08 августа 2015, 21:01
modx.pro
3
1 586
+1

Комментарии: 4

Володя
09 августа 2015, 13:21
1
+2
создаете обработчик в VP:
  • тип — динамический ресурс
  • содержимое — [[$images]]
создаете маршрут в VP:
/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;
}
и все… радуетесь.
    Александр Н
    09 августа 2015, 17:20
    0
    Благодарю за код Володя!
    Я к сожалению всё равно не понимаю полностью логику, поэтому пока не удаётся реализовать вашу помощь.

    Почему маршрут именно такой?
    /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

    Но ваш вариант тоже хотелось бы понять и освоить.
      Володя
      10 августа 2015, 09:14
      0
      Почему маршрут именно такой?
      Да он может быть каким угодно…
      Прописывайте в вашем шаблоне prev.tpl ссылку на основное изображение согласно маршруту а VP и все.
      Пример выше адаптировать не сложно…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
4