Дополнительные подстраницы

Добрый день, решил попросить помощи может кто подскажет верный формат работы:

Хочется реализовать вот что:
Есть раздел на сайте (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 и отдать нужную часть шаблона.

Не очень понимаю верную схему работы данного снипета( или это вообще нужно плагином делать?

Буду признателен за помощь.
Ilya Ev
26 ноября 2013, 15:07
modx.pro
1 449
0

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

Aртур Чикин
26 ноября 2013, 20:58
0
Может тебе проще было бы реализовать JS вкладки? Примерно так: site.ru/razdel/nokia/#tag
    Ilya Ev
    26 ноября 2013, 21:42
    0
    Нет, нужны именно страницы отдельные, иначе смысла нет.

    пока пришло в голову только написать снипет для шаблона
    <?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.

    можно как-то чпу к снипету прикрутить?
      Clean
      26 ноября 2013, 23:23
      0
      Нормальное решение. под вашу задачу я делал бы так же.
      В сниппете можно регуляркой проверять нужное

      $request = $_REQUEST['tag'].'/';
          preg_match('<регулярка>', $request, $matches);
      и потом разбирать что нашел

        Василий Наумкин
        26 ноября 2013, 23:59
        0
        Легко.

        Добавь плагин по OnPageNotFound, в котором будет разбираться url и выставляться $_GET['tag'], сразу перед форвардом на страницу со сниппетом.
        А сниппет даже менять не придется.

        Именно так у меня организован вывод заметок и комментов по автору.
          Ilya Ev
          27 ноября 2013, 10:27
          0
          Василий, а можно попросить код этого плагина для примера, чтобы быстрее понять верную логику работы и под себя переделать?
            Clean
            27 ноября 2013, 10:38
            0
              Ilya Ev
              27 ноября 2013, 10:40
              0
              Спасибо, почитаю)
                Ilya Ev
                27 ноября 2013, 11:41
                0
                Вроде все примерно понял, кроме одного, не получается получить в плагине id текущего документа для sendForward.

                $modx->resource->get('id'); не работает.

                Подскажите как в этом плагине получить id ресурса?
                  Ilya Ev
                  27 ноября 2013, 12:14
                  0
                  видимо так

                  $q = array(
                              'alias' => 'alias'
                              ,'deleted' => 0
                              ,'published' => 1
                          );
                  $section = $modx->getObject('modResource', $q);
                  $section_id = $section->get('id');
        Виталий Греков
        27 ноября 2013, 00:19
        0
        Если я правильно Вас понял, то есть Ajaxify блоки, контент в которых не изменился, не подгружает. Кстати, есть еще в виде компонента для MODX, но к сожалению только под EVO.
          Ilya Ev
          27 ноября 2013, 12:56
          1
          0
          Ну вроде осилил)

          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);
          		} 
          }
          
          }
          Может кому будет полезно, ну или покритикует\внесет правки кто)
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            11