У макеті-прикладі є три типи навігації: однорівневе меню, багаторівневе меню і хлібні крихти.
Навігація на сайті формується за допомогою наступних функцій:
- nc_browse_level () - висновок меню певного рівня вкладеності;
- nc_browse_path () - висновок хлібних крихт;
- nc_browse_path_range () - висновок хлібних крихт (з параметрами);
- nc_browse_sub () - висновок меню з певного розділу;
- nc_cond_browse_sub () - висновок меню з певного розділу (з умовою);
- nc_browse_cc () - висновок меню Інфоблоки розділу;
- nc_browse_catalogue () - висновок меню сайтів.
Розберемо на прикладах кожну з функцій.
Існує три функції для виведення меню:
- nc_browse_level ($ level, $ browse_template).
Висновок меню певного рівня вкладеності. - nc_browse_sub ($ browse_parent_sub, $ browse_template, $ ignore_check = 0, $ where_cond = "", $ level = 0)
Висновок меню з певного розділу. - nc_cond_browse_sub ($ browse_parent_sub, $ browse_template, $ where_cond = "")
Висновок меню з певного розділу з умовою. Функція є окремим випадком попередньої.
однорівневе меню
Перший тип меню в макеті-прикладі - однорівневе:
У коді макеті меню виглядає так:
Для формування однорівневої меню можна скористатися першою або другою функцією.
У функцію необхідно передати обов'язкові параметри:
- $ Level - номер рівня розділів (найвищому рівню відповідає значення 0);
- $ Browse_template - шаблон виводу навігації.
Шаблон виведення навігації являє собою одномірний масив $ browse_template виду:
У шаблонах навігації доступні наступні макропеременние:
- % NAME - назва елемента (розділу);
- % URL - шлях до розділу;
- % PARENT_SUB - номер батьківського розділу (тільки для розділів);
- % KEYWORD - ключове слово розділу (тільки для розділів);
- % SUB - номер розділу;
- % COUNTER - номер виведеного елемента в списку (починаючи з нуля);
- % NEXT_LEVEL - відображення наступного рівня меню. Використовується при побудові багаторівневих меню.
- % Імя_поля_в_сістемной_табліце - довільна змінна, що задається в блоці «Розділи» в системних таблицях.
Деякі з змінних призначені тільки для формування меню.
Масив формування навігації може мати елементи:
Змінимо масив $ browse_template відповідно до заданого html-кодом:
Помістіть цей масив в поле шаблону виведення навігації.
У шаблоні замість html-коду пропишіть функцію:
Цифра 0 у функції позначає рівень виведення меню. В даному випадку будуть виведені всі включені пункти тільки кореневого розділу.
На малюнку розділи, помічені сірим кольором, виведені не будуть.
Зараз фрагмент коду верхній частині сайту виглядає так:
багаторівневе меню
У боковій колонці сайту представлено багаторівневе меню:
У разі, коли в боковій колонці знадобилося б вивести підпункти горизонтального меню (тобто тільки один рівень), можна використовувати ту ж функцію, але з параметром рівня рівним 1, 2 і т. Д. В залежності від рівня вкладеності:
В даному випадку виводяться підрозділи певного розділу і для його виведення скористаємося функцією:
Функцію можна використовувати як для формування однорівневої меню, так і багаторівневого. У функцію необхідно передати обов'язкові параметри:
- $ Browse_parent_sub - id батьківського розділу, з якого повинні формуватися пункти меню. Кореневий розділ має номер 0.
- $ Browse_template - шаблон виводу навігації. У функцію необхідно передати змінну з висновком рівня меню і масив шаблону.
Так само можна вказати необов'язкові параметри:
- $ Ignore_check = 0 - якщо параметр встановлено в 1, будуть виведені всі вимкнені розділи.
- $ Where_cond = "" - параметр визначає додаткові умови вибірки з таблиці Subdivision.
- $ Level = 0
Використання необов'язкових параметрів буде описано нижче.
У коді висновок меню поки виглядає так:
Складемо масив виведення багаторівневого меню:
Так як меню є багаторівневим, в шаблон навігації додається нова макропеременная% NEXT_LEVEL.
У макеті замість HTML-коду пропишіть виклик функції:
де 299 - номер батьківського розділу, з якого виводяться підрозділи. У карті сайту це виглядає так:
Розглянемо на прикладі, в яких випадках можна використовувати параметр $ where_cond функції nc_browse_sub () і nc_cond_browse_sub ().
Припустимо, що карта сайту має близько п'ятнадцяти пунктів в кореневому розділі. Деякі з пунктів потрібно вивести в верхньому меню, деякі в нижньому. Залежно від дизайну, меню можуть розташовуватися в різних місцях і їх може бути більше, ніж два.
Без використання параметра умови $ where_cond виконання завдання сильно ускладнюється. Рішення просте - в системних таблицях в блок «Розділи» потрібно додати нові поля.
Полів має бути стільки, скільки типів меню.
В результаті, на вкладці додаткових налаштувань у кожного розділів з'явиться опція, яку потрібно виставити в потрібно значення.
У функції виведення тепер потрібно дописати параметр $ where_cond, що містить ім'я поля. наприклад,
Аналогічну вставку потрібно зробити і для інших випадків виведення меню.
Використання функцій s_browse_
Якщо вам не вистачає даних макропеременних, або ви хочете використовувати PHP умови, ви можете використовувати функції з префіксом s_browse_. в них доступний внутрішній масив $ data [] і виконується eval () шаблонів, завдяки чому можна передавати в шаблон PHP код (екранований). Масив $ data [] містить всі дані з таблиці Subdivision про поточні підрозділах виведених функцією.
наприклад:
Так само в шаблоні можна використовувати додаткові запити. Наприклад, вам потрібно вивести кількість елементів в розділах. Для цього дописується запит в шаблон:
де XX - номер компонента підключеного в розділах.
Зверніть увагу на Слеш перед знаками $ і ", вони є обов'язковими, оскільки обробка цього масиву і виконання вкладених функцій повинні здійснюватися всередині функції s_browse_, а не на етапі ініціалізації масиву $ browse_sub.
Важливо: у функціях s_browse_ недоступна макропеременная% NEXT_LEVEL.
Важливо: функції s_browse_ не вибирають автоматично рівень шаблона як це робиться в% NEXT_LEVEL, тому необхідно при виконанні функції передавати один конкретний рівень шаблона, наприклад
Для того щоб вивести наступний рівень масиву, необхідно прописати виклик функції для наступного рівня усередині шаблону і заекранувати так, щоб виклик прозошел всередині функції поточного рівня.
Також шаблон наступного рівня $ left_menu1 [1] НЕ буде доступний в області видимості функції s_browse_sub, тому потрібно отримати до нього доступ через глобалізацію:
Повний приклад на 3 рівня вкладеності:
Важливо: в разі якщо шаблон навігації описується в шаблоні компонента (префікс / системні налаштування), то необхідно додатково вивести масив шаблон з області видимості компонента в загальну:
Карта сайту
Список всіх розділів (карти сайту) на самому сайті виводиться так само вельми просто. Для карти сайту потрібно створити новий розділ, до нього підключити макет дизайну такого змісту:
- в шаблон виводу навігації прописати:
- в місце виведення карти прописати виклик функції:
В даному прикладі кожен елемент шаблону викликає функцію ще раз з однаковим шаблоном, а в якості номера розділу передається ID поточного виведеного розділу. Таким чином у вас на одній сторінці буде виведена повна ієрархія структури сайту.
Хлібні крихти
Останній елемент навігації на сторінці - хлібні крихти. Формується за допомогою функцій:
- nc_browse_path ($ browse_template)
Висновок за заданим шаблоном - nc_browse_path_range ($ from, $ to, $ browse_template, $ reverse = 0, $ show = 0)
Висновок із зазначеними параметрами
В якості змінних $ browse_template так само необхідно вказати масив даних. У коді хлібні крихти виводяться в рядку:
Потрібно скласти масив для виведення:
і прописати в макеті висновок:
підсумковий вид
Елементи навігації адаптовані і зараз в поле «Шаблони виведення навігації» знаходиться 4 блоки масивів:
Верхня частина макета значно скоротилася і тепер вона виглядає так:
- nc_browse_sub () - виведення списку підрозділів заданого розділу відповідно до шаблону $ template
- nc_browse_catalogue () - виведення списку сайтів
- nc_browse_level () - висновок меню (списку розділів) певного рівня
- nc_browse_messages () - формує лістинг сторінок з об'єктами
- nc_browse_path () - висновок шляху «хлібні крихти»
- nc_browse_path_range () - висновок шляху ( «хлібні крихти») зазначеного діапазону