We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 9135
    • 81 Posts
    можно ли через API определить уровень вложенности документа?
    т.е. для:
    главная
    каталог
     - подкаталог 1
     - подкаталог 2
    новости
     - группа новостей
        - новость
    

    главная, каталог и новости - это был бы 1 (ну или 0);
    подкаталог 1, подкаталог 2, группа новостей - был бы 2 (1);
    новость - был бы 3 (2).
      • 23451
      • 232 Posts
      Как вариант: рекурсивно подниматься по дереву и считать уровни. Пара строк на пхп.
        • 9135
        • 81 Posts
        а как на это можно сделать, да, и проверять надо на "0", т.е. "0" будет как бы "самым верхом", так?
          • 19164
          • 1,215 Posts
          Примерно так

          <?php
          $level = 0;
          
          $pid['id'] = $modx->documentIdentifier;
          
          while ($pid['id'] != 0) {
              $pid = $modx->getParent($pid['id'],1,'id');
              if($pid['id'] == 0) { return $level; }
              $level++;
          }
          ?>
          

          $level = 0; // Это значение самого верхнего уровня - можно поставить 1, тогда самый верхний уровень будет 1
            DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

            Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

            [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]
            • 9135
            • 81 Posts
            о, пасибо! smiley
              • 33694
              • 742 Posts
              Эх, поделюсь-таки своим старым проверенным способом.

              Если на сайте используются вложенные урлы, то приведённый ниже код позволяет без единого sql-запроса определить уровень вложенности текущего документа.
                $q = (substr($_GET['q'], -1) == '/') ? substr($_GET['q'], 0, -1) : $_GET['q']; // удаляем слеш в конце строки запроса
                $path = split('/', $q); // разделяем строку (запрос) на составляющие
                $level = count($path); // определяем глубину вложенности текущего документа
              


              ну, и для единомышленников особых извращенцев добавлю однострочный вариант:
              return count(split('/',(substr($_GET['q'],-1)=='/')?substr($_GET['q'],0,-1):$_GET['q']));