Онлайн-руководство разработчика NetCat
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

nc_browse_sub()

nc_browse_sub( $sub, $template, $ignore_check = 0, $where_cond = "", $level = 0 )

Появилось в версии: 5

вывод списка подразделов заданного раздела в соответствии с шаблоном $template

Параметр Описание
$sub идентификатор родительсвого раздела. Если нужно вывести корневые разделы, нужно указать 0
$template массив шаблона
$ignore_check игнорирование вывода только включённых разделов, если $ignore_check равен 1, то выведутся все разделы
$where_cond определяет дополнительные условия выборки из таблицы Subdivision
$level уровень вывода меню

Массив $template должен иметь элементы со следующими индексами:

Индексы Описание
prefix выводится перед списком
suffix выводится после списка
active шаблон вывода активного элемента списка (а данном случае это касается текущего сайта)
active_link шаблон вывода активного элемента списка в том случае, если ссылка на этот элемент идентична адресу текущей страницы
unactive шаблон вывода неактивного элемента списка (в данном случае это касается всех сайтов, кроме текущего)
divider шаблон разделителя между элементами списка
sortby признак сортировки элементов

В шаблонах навигации доступны следующие макропеременные:

  • %NAME — название элемента (раздела);
  • %URL — путь к разделу;
  • %PARENT_SUB — номер родительского раздела (только для разделов);
  • %KEYWORD — ключевое слово раздела (только для разделов);
  • %SUB — номер раздела;
  • %COUNTER — номер выводимого элемента в списке (начиная с нуля);
  • %NEXT_LEVEL — отображение следующего уровня меню. Используется при построении многоуровневых меню.
  • %имя_поля_в_системной_таблице — произвольная переменная, задаваемая в блоке «Разделы» в системных таблицах.
Пример использования

В макете страницы необходимо вывести список всех подразделов раздела "Каталог продукции" (номер раздела - 123) в виде ненумерованного списка. Текущий раздел ссылкой выделяться не должен.

Фрагмент хедера или футера макета:

<?= nc_browse_sub(123, $cat_template); ?>

Фрагмент шаблона вывода навигации макета:

$cat_template['prefix']      = "<ul>";
$cat_template['suffix']      = "</ul>";
$cat_template['active']      = "<li>%NAME</li>";
$cat_template['active_link'] = "<li>%NAME</li>";
$cat_template['unactive']    = "<li><a href='%URL'>%NAME</a></li>";
$cat_template['divider']     = "";
$cat_template['sortby']      = "Priority DESC";

Вывести двухуровневое и более меню так же несложно. Для этого нужно сформировать массив шаблона следующим образом:

$cat_template[0]['prefix']      = "<ul>";
$cat_template[0]['suffix']      = "</ul>";
$cat_template[0]['active']      = "<li>%NAME %NEXT_LEVEL</li>";
$cat_template[0]['active_link'] = "<li>%NAME %NEXT_LEVEL</li>";
$cat_template[0]['unactive']    = "<li><a href='%URL'>%NAME</a> %NEXT_LEVEL</li>";
$cat_template[0]['divider']     = "";
$cat_template[0]['sortby']      = "Priority DESC";

$cat_template[1]['prefix']      = "<ul>";
$cat_template[1]['suffix']      = "</ul>";
$cat_template[1]['active']      = "<li>%NAME</li>";
$cat_template[1]['active_link'] = "<li>%NAME</li>";
$cat_template[1]['unactive']    = "<li><a href='%URL'>%NAME</a></li>";
$cat_template[1]['divider']     = "";

С помощью условия $where_cond можно ограничить условия вывода. Например есть задача: выводить только определённые разделы в пунктах меню. Для решения можно добавить чекбокс в настройке раздела: если включен — отображаем, иначе нет. Перейдите в: Разработка → Системные таблицы → Разделы и добавьте новое поле:

  • Название: show_in_menu
  • Описание: отображать в меню
  • Тип поля: логическая переменная (истина или ложь)
  • Обязательно для заполнения

Сохраните.

Теперь в настройках каждого из разделов вы можете видеть соответствующий чекбокс. В условии вывода меню нужно добавить условие:

<?= nc_browse_sub(123, $cat_template, 0, $where_cond = "show_in_menu='1'"); ?>
См. также

Комментарии 13

Demetriy  Донковцев Дмитрий 15 мая 2014, 00:34:05
Поправьте пожалуйста, у вас здесь ошибка, надо записать так:
[CODE]
$cat_template[0]['prefix'] = "<ul>";
$cat_template[0]['suffix'] = "</ul>";
$cat_template[0]['active'] = "<li>%NAME %NEXT_LEVEL</li>";
$cat_template[0]['active_link'] = "<li>%NAME %NEXT_LEVEL</li>";
$cat_template[0]['unactive'] = "<li><a href='%URL'>%NAME</a> %NEXT_LEVEL</li>";
$cat_template[0]['divider'] = "";
$cat_template[0]['sortby'] = "Priority DESC";

$cat_template[1]['prefix'] = "<ul>";
$cat_template[1]['suffix'] = "</ul>";
$cat_template[1]['active'] = "<li>%NAME</li>";
$cat_template[1]['active_link'] = "<li>%NAME</li>";
$cat_template[1]['unactive'] = "<li><a href='%URL'>%NAME</a></li>";
$cat_template[1]['divider'] = "";
[/CODE]
   
amigo 15 мая 2014, 15:36:18
Дмитрий, спасибо, за сообщение. Поправлено
   
sparton  Шекера Евгений 13 июня 2014, 15:16:13
А как вывести значение поля EnglishName из поля Subdivision? %EnglishName - не работает
   
amigo 13 июня 2014, 21:13:05
Можно так: [CODE]\$data[\$i][EnglishName][/CODE]
для вывода использовать [B]s_browse_[/B]
   
sparton  Шекера Евгений 16 июня 2014, 12:22:52
да вот s_browse - понятно. хотелось бы чтобы и в новой версии nc_browse_ тоже была возможность вывода полей
   
nops  Группа 5а5 03 июля 2014, 15:47:08
Коллеги.
Подскажите. За некоторыми изменениями, к меня:
[CODE]$topmenu[0]['prefix'] = "";
$topmenu[0]['active'] = "<li class='first current '><a href='%URL'>%NAME %NEXT_LEVEL</a></li>";
$topmenu[0]['unactive'] = "<li class='even '><a href='%URL'>%NAME %NEXT_LEVEL</a></li>";
$topmenu[0]['suffix'] = "";

$topmenu[1]['prefix'] = "<ul class='level-1'>";
$topmenu[1]['active'] = "<li class='first current '><a href='%URL'>%NAME</a></li>";
$topmenu[1]['unactive'] = "<li class='first '><a href='%URL'>%NAME</a></li>";
$topmenu[1]['suffix'] = "</ul>";[/CODE]

В Header вывожу так: [CODE]<?=nc_browse_sub(0,$topmenu) ?>[/CODE]
Верхний уровень меню все хорошо отображается, а вот последующие... Начинаются проблемы, а именно, в подменю каждого уровня, теред первым <li> добавляется ссылка на головной пункт меню:
[IMG='http://puu.sh/9UXUY/ef16f8b791.png']
Где я допустил ошибку, не могу разобраться.
   
nops  Группа 5а5 03 июля 2014, 15:55:08
Коллеги, разобрался самостоятельно. Просто невнимательность. На случай, если у кого-то произойдет такое же по неопытности или невнимательности, то вот решение:
вот код:
[CODE]$topmenu[0]['active'] = "<li class='first current '><a href='%URL'>%NAME %NEXT_LEVEL</a></li>";

$topmenu[0]['unactive'] = "<li class='even '><a href='%URL'>%NAME %NEXT_LEVEL</a></li>";[/CODE]
Ошибка в месте написания глобальной переменной %NEXT_LEVEL
Необходимо вынести ее за пределы <a href="">.....</a>
Выглядеть должно:
[CODE]$topmenu[0]['active'] = "<li class='first current '><a href='%URL'>%NAME</a>%NEXT_LEVEL</li>";
$topmenu[0]['unactive'] = "<li class='even '><a href='%URL'>%NAME</a>%NEXT_LEVEL</li>";[/CODE]
   
werba  Левчук Сергей 01 марта 2015, 23:58:48
А я вот так реализовал вот такое 3-х уровневое меню.

<ul id="mega-menu-1" class="mega-menu">
<li><a href="#">О компании</a></li>
<li><a href="#">Услуги</a>
<ul>
<li><a href="#">Mobile Phones &#038; Accessories</a>
<ul>
<li><a href="#" class="link">Product 1</a></li>
<li><a href="#" class="link" >Product 2</a></li>
<li><a href="#" class="link">Product 3</a></li>
</ul>
</li>
<li><a href="#">Desktop</a>
<ul>
<li><a href="#" class="link">Product 4</a></li>
<li><a href="#" class="link">Product 5</a></li>
<li><a href="#" class="link">Product 6</a></li>
<li><a href="#" class="link">Product 7</a></li>
<li><a href="#" class="link">Product 8</a></li>
<li><a href="#" class="link">Product 9</a></li>
</ul>
</li>
<li><a href="#">Laptop</a>
<ul>
<li><a href="#" class="link">Product 10</a></li>
<li><a href="#" class="link">Product 11</a></li>
<li><a href="#" class="link">Product 12</a></li>
<li><a href="#" class="link">Product 13</a></li>
</ul>
</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>


$cat_template[0]['prefix'] = "";
$cat_template[0]['suffix'] = "";
$cat_template[0]['active'] = "<li><a style='color:#ff9b00' >%NAME </a>" ;
$cat_template[0]['active_link'] = "";
$cat_template[0]['unactive'] = " <li><a href='%URL'>%NAME </a>%NEXT_LEVEL ";

$cat_template[1]['prefix'] = "";
$cat_template[1]['suffix'] = "";
$cat_template[1]['active'] = "";
$cat_template[1]['active_link'] = "";
$cat_template[1]['unactive'] = "<ul><li><a href='%URL'>%NAME </a> %NEXT_LEVEL ";

$cat_template[2]['prefix'] = "";
$cat_template[2]['suffix'] = "";
$cat_template[2]['active'] = "";
$cat_template[2]['active_link'] = "";
$cat_template[2]['unactive'] = "<ul><li><a class='link' href='%URL'>%NAME</a></li></ul></ul> ";

в макете дизайна вставлено это

<ul id='mega-menu-1' class='mega-menu'>
<?= nc_browse_sub(4, $cat_template); ?>
</ul>

Пример можете посмотреть на моём новом проекте www.stroyexpro.ru

   
A.Popov  Kit.team 10 июля 2014, 13:02:50
Почему нельзя на 2-ом сайте вывести список подразделов от первого сайта с помощью этой функции?
   
ru__slan  Руслан Асадулин 06 августа 2014, 16:47:37
каким образом мне вставить туда некий запрос, например
- подсчитать сколько объектов в текущем разделе
- вывести переменную $i которая была доступна в s_browse_sub
и вообще, каким образом делать там вставку php?
   
amigo 13 августа 2014, 10:02:37
Для вставки PHP воспользуйтесь функцией s_browse_sub или [URL='http://netcat.ru/developers/docs/navigation/class/']новым классом навигации[/URL].

Добавили в описание все возможные переменные.
   
John Smith 17 декабря 2014, 17:59:57
Не вижу чтобы в документации было как-либо рассказано о том, в каком формате должна задаваться [B]$where_cond[/B].

Методом тыка получилось сделать вывод только элементов у которых стоит в админке чекбокс (поле в системной таблице разделов). Для этого в виде строки было просто указано имя этого поля.
   
amigo 22 декабря 2014, 10:25:15
Добавлен пример
   
Описание проекта