We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 20246
    • 33 Posts
    Новичек в этой системе.

    Использую вот такой snippet, для выпадающего меню. Так как новичек, а он очень чисто выводит ul, других нормальных не нашел.

    Но возникла проблема. В новостях, которые я делаю с помощью Ditto и создаю дочерние документы. Так вот эти дочерние документы выводятся в этом выпадающем меню. Помогите мне отрубать по id, тот раздел, в котором не надо выводить выпадающее меню.

    Типо [[ListSiteMap?LSM_Disable=23]]

    Премного благодарен.

    Сниппет брал тут http://modxcms.com/forums/index.php/topic,3914.0.html
    // --------------------
    // Snippet: ListSiteMap
    // --------------------
    // Version: 0.6h
    // Date: 2006.01.20
    // [email protected]
    //
    // This snippet was designed to show a nested
    // list site map with each pagetitle being a
    // link to that page. It will not include
    // unpublished folders/pages OR its children,
    // even if the children ARE published.
    
    // Config
       // $siteMapRoot [int]
       // The parent ID of your root. Default 0. Can be set in 
       // snippet call with LSM_root (to doc id 10 for example):
       // [[ListSiteMap?LSM_root=10]]
       $siteMapRoot = 0;
    
       // $showDescription [true | false]
       // Specify if you would like to include the description
       // with the page title link.
       $showDescription = false;
    
       // $titleOfLinks [ string ]
       // What database field do you want the title of your links to be?
       // The default is pagetitle because it is always a valid (not empty)
       // value, but if you prefer it can be any of the following:
       // id, pagetitle, description, parent, alias, longtitle
       $titleOfLinks = 'pagetitle';
       
       // $removeNewLines [ true | false ]
       // If you want new lines removed from code, set to true. This is generally
       // better for IE when lists are styled vertically. 
       $removeNewLines = true;
       
       // $maxLevels [ int ]
       // Maximum number of levels to include. The default 0 will allow all
       // levels. Also settable with snippet variable LSM_levels:
       // [[ListSiteMap?LSM_levels=2]]
       $maxLevels = 2;
       
       // $selfAsLink [ true | false ]
       // Define if the current page should be a link (true) or not
       // (false)
       $selfAsLink = true;
       
       // $showUnpubs [ true | false ]
       // Decide to include items in unpublished folders. This will show the
       // unpublished items as well. No links will be made for the unpublished items
       // but they will be shown in the structure. You will not likely want to do
       // this but the option is yours.
       $showUnpubs = false;
    
    // Styles
    //
    // .LSM_currentPage    span surrounding current page if $selfAsLink is false
    // .LSM_description    description of page
    // .LSM_N              ul style where N is the level of nested list- starting at 0
    
    // ###########################################
    // End config, the rest takes care of itself #
    // ###########################################
    
    // Initialize
    $siteMapRoot = (isset($LSM_root))? $LSM_root : $siteMapRoot ;
    $maxLevels = (isset($LSM_levels))? $LSM_levels : $maxLevels ;
    $ie = ($removeNewLines)? '' : "\n" ;
    
    // Overcome single use limitation on functions
    
    if(!function_exists('MakeSiteMap')){
      function MakeSiteMap($funcmodx, $listParent, $listLevel, $description, $titleOfLinks,$maxLevels,$su,$selfAsLink){
        $children = $funcmodx->getAllChildren($listParent, 'menuindex', 'ASC', 'id, pagetitle, description, parent, alias, longtitle, published');
        $output .= '<ul>'.$ie;
        foreach($children as $child){
        
          // skip unpubs unless desired
          if (!$su && !$child['published']) continue;
          
          $descText = ($description)? ' <span class="LSM_description">'.$child['description'].'</span>' : '';
          $output .= '<li>';
          if ((!$selfAsLink) && ($child['id'] == $funcmodx->documentIdentifier)){
            $output .= '<a href="[~'.$child['id'].'~]" title="'.$child[$titleOfLinks].'" class="hr">'.$child['pagetitle'].'</a>';
          } else if (!$child['published']){
            $output .= '<span class="LSM_unpubPage">'.$child['pagetitle'].'</span>';
          } else {
            $output .= '<a href="[~'.$child['id'].'~]" title="'.$child[$titleOfLinks].'">'.$child['pagetitle'].'</a>';
          }
          $output .= $descText;
          if ($funcmodx->getAllChildren($child['id']) && (($maxLevels==0) || ($maxLevels > $listLevel+1 ))){
            $output .= MakeSiteMap($funcmodx,$child['id'],$listLevel+1,$description,$titleOfLinks,$maxLevels,$su,$selfAsLink);
          }
          $output .= '</li>'.$ie;
        }
        $output .= '</ul>'.$ie;
        return $output;
      }
    }
    
    return MakeSiteMap($modx, $siteMapRoot, 0, $showDescription, $titleOfLinks,$maxLevels,$showUnpubs,$selfAsLink);

      • 33114
      • 518 Posts
      Экзотичное решение:)
      А почему вам не подошел DropMenu?

      Обычно ваш случай решается заданием уровня вывода документов, например, задав 2 уровня, получите вывод главных разделов и подразделов а все остальное отрубается. Далее, если хотите вручную установить, где что не выводить можно скомбинировать первый прием и параметр showinmenu.

      А вообще если не получается вы лучше не сниппет приводите, а структуру меню и укажите где там и что спрятать надо.

        http://modx.ru - российская поддержка MODx
        http://newscup.ru - экспериментальный проект
        http://yentsun.com - персональный сайт
        • 20246
        • 33 Posts
        Не спорю. Дроп-даун большой и не нужный.

        Вот как выглядит мой код. Как видите, тут не надо столько классов, и надо чтобы первый уровень всегда были ссылками.

        <ul>
        					<li><a href="./" class="hr">ГЛАВНАЯ</a></li> <!-- выделенный пункт -->
        					<li><a href="./">НОВОСТИ</a>
        						<ul> <!-- а тут не должно выпадать -->
        							<li>а вот это не надо показывать...... новсть 1</li>
        							<li>а вот это не надо показывать...... новсть 1</li>
        						</ul>
        					</li>
        					<li><a href="./">КАТАЛОГ</a>
        						<ul> <!-- выпадающее меню -->
        							<li><a href="./">Подъемное оборудование</a></li>
        							<li><a href="./">Шиномонтажное и балансировочное оборудование</a></li>
        							<li><a href="./">Диагностическое оборудование</a></li>
        							<li><a href="./">Вытяжные системы</a></li>
        							<li><a href="./">Пневмооборудование</a></li>
        							<li><a href="./">Другое</a></li>
        						</ul>
        					</li>
        					<li><a href="./">О КОМПАНИИ</a></li>
        					<li><a href="./">Фото-архив</a></li>
        					<li><a href="./">СТАТЬИ</a></li>
        					<li><a href="./">ВАКАНСИИ</a></li>
        					<li><a href="./">КОНТАКТ</a></li>					
        				</ul>


        Просто это первый сайт на этой системе. Я не могу сказать, что то решение экзотичное. Очень удобно вставлять еще и отдельные блоки меню.
          • 33114
          • 518 Posts
          Пример ясен.
          Тот сниппет что вы правели, как раз был основой для DropMenu. И DropMenu вовсе не большой и ненужный (непонятно откуда такое впечатление взяться могло), он просто расширеный вариант ListSiteMap, использует функции MODx. ListSiteMap как известно разработан для Etomite.

          Так вот. Если продолжать использовать ListSiteMap - можно просто вставить проверку в цикл сниппета и запретить разделу новости выводить дочерние документы. Если пользоваться DropMenu, то новостям можно просто не ставить галочку "showinmenu/Отображается в меню"

          Первый способ требует небольшого знания php, второй требует DropMenu.

          PS. не исключено что существуют еще способы.
            http://modx.ru - российская поддержка MODx
            http://newscup.ru - экспериментальный проект
            http://yentsun.com - персональный сайт
            • 20246
            • 33 Posts
            Сэнкс. Попытаюсь попробовать dropdown
              • 33114
              • 518 Posts
              если все-таки не выйдет как задумано, я наверное смог бы дописать DropMenu что б он исключал какие-то разделы.
                http://modx.ru - российская поддержка MODx
                http://newscup.ru - экспериментальный проект
                http://yentsun.com - персональный сайт
                • 20246
                • 33 Posts
                Я тут нашел нужный dropmenu.

                Вроде и ссылки оставляет, и если галочку убрать отображать в меню, то пункт меню.

                Только вот заполнять не я буду. Главное чтобы не забывали smiley
                  • 33114
                  • 518 Posts
                  чего ж вы его искали если он по умолчанию в системе стоит? smiley
                    http://modx.ru - российская поддержка MODx
                    http://newscup.ru - экспериментальный проект
                    http://yentsun.com - персональный сайт
                    • 20246
                    • 33 Posts
                    Такой как по умолчанию, мне немного не подходил. нашел более чистый в плане вывода меню. ну и надо было заменить еще одну строчку.

                    Но вроде все работает. А Тот вариант первоначальный, зато оказался тоже очень удобным для вывода кучи всякой альтернативной навигации.

                    Первый сайт собрал за полдня.

                    Уже даже в инете тестим.
                      • 33114
                      • 518 Posts
                      ладно не буду мешать далее smiley. просто помните, тот DropMenu, что в поставку входит - проверенный временем и кучей пользователей. да, он не совершенен, но по набору параметров - самый полный.
                        http://modx.ru - российская поддержка MODx
                        http://newscup.ru - экспериментальный проект
                        http://yentsun.com - персональный сайт