We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 32122
    • 3 Posts
    Здравствуйте.
    Опишу ситуацию. Стоит MODx Evolution 1.0.3. Есть дерево документов:

    • Главная
    • Оборудование
      [list]
      [li]Оборудование 1
    • Оборудование 2
    [/li]
    [li]Документы[/li]
    [li]Поддержка[/li]
    [li]Контакты[/li]
    [/list]
    Оборудование это раздел, содержащий документы. Поскольку содержимого для страницы Оборудование просто нет, она сделана Веб-ссылкой и ссылается на первый "дочерний" документ. Далее, есть место на странице, где красиво выводится название раздела, в котором мы сейчас находимся, например "Оборудование", на какой из страниц раздела мы бы не присутствовали, мы видим menutitle раздела. Документы и Поддержка, а может и Контакты, также в будущем станут разделами, потому решил реализовать красивый универсальный код, который бы брал этот самый menutitle, не зависимо от того, является ли документ контейнером или нет. Вот собственно код.
    <?php
    $id=$modx->documentIdentifier;
    $par=$modx->getParent($id, 'id, menutitle');
    $doc=$modx->getDocument($id, 'menutitle');
    if ($par['id']  != '11')
    {
    echo $par['menutitle'];
    } else {
    echo $doc['menutitle'];
    }
    ?>

    != ’11’ - Относительно этого момента. 11 - это идентификатор корневого документа (контейнера) в русскоязычной версии сайта. И теперь собственно проблема. Когда документ не есть контейнером, menutitle выводится чудестно, но в случае с разделом Оборудование, контейнер (корневой документ) всех страниц этого раздела имеет тип Веб-ссылка, и этот самый менютайтл не выводится. Не подскажете, может я чего-то не знаю, что делать? То есть, жмем на Оборудование - переходим к Оборудование 1, все корректно, но вышеуказанный код не срабатывает. Спасибо.
      • 32122
      • 3 Posts
      Может хоть кто-то ответит? Может я что-то упустил, всем настолько очевидное, что никто даже не черкнет заметку? smiley
        • 29487
        • 385 Posts
        Можно так:
        <?php
        $menutitle=$modx->documentObject['menutitle'];
        $parent=$modx->documentObject['parent'];
        if ($parent != 11){
        	$doc=$modx->getDocument($parent, 'menutitle');
        	$menutitle=$doc['menutitle'];
        }
        return $menutitle;
        ?>


        А можно что-нибудь более универсальное придумать, на случай многоуровнего меню:
        <?php
        if (!isset($top)) $top=11;
        $menutitle=$modx->documentObject['menutitle'];
        $parent=$modx->documentObject['parent'];
        if ($parent != $top){
        	$parentIds=$modx->getParentIds($modx->documentIdentifier);
        	if (in_array($top,$parentIds)) {
        		while (current($parentIds) !== $top) next($parentIds);
        		$parent =prev($parentIds);
        		$doc=$modx->getDocument($parent, 'menutitle');
        		$menutitle=$doc['menutitle'];
        	}
        	else return;
        }
        return $menutitle;
        ?>
        
          • 32122
          • 3 Posts
          Оу, работает!!!
          Только сам подумал, что, видимо, при использовании getParent нельзя узнать menutitle, но сам бы не смог такой код реализовать! Второй вариант оттестирую с под-меню, отпишусь.
          В любом случае - огромное человеческое спасибо! wink laugh

          Upd. Все работает, все прекрасно. laugh