We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 22532
    • 349 Posts
    Не подскажите ли как мне на PHx сделать подобную конструкцию?..
    мне нужно в шаблоне в определенных местах выводить разный текст в зависимости от того в каком разделе я нахожусь
    я хочу через UltimateParent узнать ID раздела в катором я нахожусь и писать тот или иной текст (будет порядка 5 разделов)

    может ктото знает способ получше как это организовать? можно и не на phx, а сниппетом..
      • 785
      • 2,113 Posts
      Лично я PHx не слишком люблю, а решение похожей задачи описывал в статье о многоязычном сайте. Конкретный язык – фактически раздел сайта. Он определяется в плагине и в зависимости от этого на странице подставляются нужные значения в плэйсхолдеры.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 22532
        • 349 Posts
        попытался разобраться у вас в коде
        но что то не очень получилось так как знания php слабоваты..

        решил попробовать написать чтото на основе кода сниппета UltimateParent и уже в получившемся сниппете включить конструкцию switch case как и хотел сделать в начале на phx

        если кому надо то воть..
        где left определяет место вызова в шаблоне (там текст чуть разный будет)

        <?php
        $left= isset ($left) && intval($left) ? $left : 0;
        $top=0;
        $id=$modx->documentIdentifier;
        $topLevel=2;
        if ($id && $id != $top) {
            $pid= $id;
            if (!$topLevel || count($modx->getParentIds($id)) >= $topLevel) {
                while ($parentIds= $modx->getParentIds($id, 1)) {
                    $pid= array_pop($parentIds);
                    if ($pid == $top) {
                        break;
                    }
                    $id= $pid;
                    if ($topLevel && count($modx->getParentIds($id)) < $topLevel) {
                        break;
        }   }   }   }
        switch($id)
        {
        	case 18:
        		if($left) echo("111"); else echo("11");
        		break;
        	case 19:
        		if($left) echo("222"); else echo("22");
        		break;
        	default:
        		if($left) echo("333"); else echo("33");
        }
        ?>
        
          • 785
          • 2,113 Posts
          В принципе первая часть выполняет то же самое, что и у меня, только у меня меньше дополнительных вычислений делается. Можно посмотреть, как реализована функция getParentIds и не вызывать ее несколько раз, а написать по аналогии свой код.
          А насчет switch – тут все зависит от конкретного случая. Иногда удобнее прямо в сниппете описать все варианты, а иногда лучше описать варианты в чанках, добавив в плагин механизм замены (как у меня написано).
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 24489
            • 60 Posts
            [+placeholder:select=`0=OFF&1=ON&2=UNKNOWN`+]

            как вам?
              Плагин для ресайза картинок AutoResizer
              Сниппет для вывода полей документа DocInfo

              Создание ТВ типа checkbox/dropdown из списка дочерних документов tvsLinks