Дополнительные подстраницы
Добрый день, решил попросить помощи может кто подскажет верный формат работы:
Хочется реализовать вот что:
Есть раздел на сайте (site.ru/razdel) в котором лежат ресурсы (site.ru/razdel/nokia, site.ru/razdel/samsung и тд), все реализуется стандартными ресурсами.
шаблон каждого ресурса (site.ru/razdel/nokia) соcтаит из вывода различных блоков (pdoresurces, msproduct и тп).
задача: сделать так, чтобы при открытии страниц отдавалась только часть блоков
site.ru/razdel/nokia — отдавать все страницу полностью (по умолчанию, так и есть)
site.ru/razdel/nokia/tag — отдавать только вызов pdoresurces
site.ru/razdel/nokia/video — отдавать только вызов msproduct
site.ru/razdel/nokia/images — отдавать только content страницы
Создавать вложенные страницы внутри не хочется так как это слишком много лишней работы и она бессмысленна, так как ее можно автоматизировать, и ресурсов в системе будет меньше.
Т.е. Скрипт в шаблоне при загрузке страницы, или что-то еще, должен проанализировать url и отдать нужную часть шаблона.
Не очень понимаю верную схему работы данного снипета( или это вообще нужно плагином делать?
Буду признателен за помощь.
Хочется реализовать вот что:
Есть раздел на сайте (site.ru/razdel) в котором лежат ресурсы (site.ru/razdel/nokia, site.ru/razdel/samsung и тд), все реализуется стандартными ресурсами.
шаблон каждого ресурса (site.ru/razdel/nokia) соcтаит из вывода различных блоков (pdoresurces, msproduct и тп).
задача: сделать так, чтобы при открытии страниц отдавалась только часть блоков
site.ru/razdel/nokia — отдавать все страницу полностью (по умолчанию, так и есть)
site.ru/razdel/nokia/tag — отдавать только вызов pdoresurces
site.ru/razdel/nokia/video — отдавать только вызов msproduct
site.ru/razdel/nokia/images — отдавать только content страницы
Создавать вложенные страницы внутри не хочется так как это слишком много лишней работы и она бессмысленна, так как ее можно автоматизировать, и ресурсов в системе будет меньше.
Т.е. Скрипт в шаблоне при загрузке страницы, или что-то еще, должен проанализировать url и отдать нужную часть шаблона.
Не очень понимаю верную схему работы данного снипета( или это вообще нужно плагином делать?
Буду признателен за помощь.
Комментарии: 11
Может тебе проще было бы реализовать JS вкладки? Примерно так: site.ru/razdel/nokia/#tag
Нет, нужны именно страницы отдельные, иначе смысла нет.
пока пришло в голову только написать снипет для шаблона
site.ru/razdel/nokia/?tag=1 а site.ru/razdel/nokia/tag.
можно как-то чпу к снипету прикрутить?
пока пришло в голову только написать снипет для шаблона
<?php
if (!empty($_GET["tag"]))
{
$tag=(int)$_GET["tag"];
switch ($tag) {
case '1':чанк1
case '2':чанк2
case '3':чанк3
case '4':чанк4
default:чанк по умолчанию
};
}
Открывать их страницами site.ru/razdel/nokia/?tag=1 и вроде как работает, но хотелось бы чпу прикрутить чтобы не site.ru/razdel/nokia/?tag=1 а site.ru/razdel/nokia/tag.
можно как-то чпу к снипету прикрутить?
Нормальное решение. под вашу задачу я делал бы так же.
В сниппете можно регуляркой проверять нужное
В сниппете можно регуляркой проверять нужное
$request = $_REQUEST['tag'].'/';
preg_match('<регулярка>', $request, $matches);
и потом разбирать что нашел
Легко.
Добавь плагин по OnPageNotFound, в котором будет разбираться url и выставляться $_GET['tag'], сразу перед форвардом на страницу со сниппетом.
А сниппет даже менять не придется.
Именно так у меня организован вывод заметок и комментов по автору.
Добавь плагин по OnPageNotFound, в котором будет разбираться url и выставляться $_GET['tag'], сразу перед форвардом на страницу со сниппетом.
А сниппет даже менять не придется.
Именно так у меня организован вывод заметок и комментов по автору.
Василий, а можно попросить код этого плагина для примера, чтобы быстрее понять верную логику работы и под себя переделать?
Спасибо, почитаю)
Вроде все примерно понял, кроме одного, не получается получить в плагине id текущего документа для sendForward.
$modx->resource->get('id'); не работает.
Подскажите как в этом плагине получить id ресурса?
$modx->resource->get('id'); не работает.
Подскажите как в этом плагине получить id ресурса?
видимо так
$q = array(
'alias' => 'alias'
,'deleted' => 0
,'published' => 1
);
$section = $modx->getObject('modResource', $q);
$section_id = $section->get('id');
Если я правильно Вас понял, то есть Ajaxify блоки, контент в которых не изменился, не подгружает. Кстати, есть еще в виде компонента для MODX, но к сожалению только под EVO.
Ну вроде осилил)
if ($modx->event->name == 'OnPageNotFound') {
$request = $_REQUEST['q'].'/';
$matches=explode("/", $request);
//echo $matches[0];die;
if($matches[0]==brand && empty($matches[4]) ){
$q = array(
'alias' => $matches[2]
,'deleted' => 0
,'published' => 1
);
$section = $modx->getObject('modResource', $q);
$section_id = $section->get('id');
switch ($matches[3]) {
case 'video': $_GET['tag'] = "video";$modx->sendForward($section_id); break;
case 'price': $_GET['tag'] = "price";$modx->sendForward($section_id); break;
case 'foto': $_GET['tag'] = "foto";$modx->sendForward($section_id); break;
case 'otzivi': $_GET['tag'] = "otzivi";$modx->sendForward($section_id); break;
default:
//$_GET['tag'] = ""; $modx->sendForward($section_id);
}
}
}
Может кому будет полезно, ну или покритикует\внесет правки кто)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.