Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Меню с идентификаторами

00 голосов
4
Доброго времени суток.

Подскажите пожалуйста как реализовать подобный html каркас в системе

Код
   <ul id="menu">

      <li class=""><a href="#" id="menu-home" class="hide">Главная</a></li>
      <li class=""><a href="#" id="menu-news" class="hide">Новости</a></li>
      <li class="prev"><a href="#" id="menu-ad" class="hide">Объявления</a></li>
      <li class=""><a href="#" id="menu-article" class="hide current">Статьи</a></li>
      <li class=""><a href="#" id="menu-photo" class="hide">Фото</a></li>
      <li class=""><a href="#" id="menu-video" class="hide">Видео</a></li>              
      <li><a href="#" id="menu-contacts" class="hide">Контакты</a></li>

   </ul>

Необходимо, чтобы в шаблон текущего пункта меню страницы добавлялся <a> класс curernt
А в предыдущий пункт меню, добавлялся [*] класс prev
При этом на каждый <a> приходился свой ID

Если делать в массиве
<a href id="sameID">sametxt</a>
а потом выводить его в шаблон, тогда возникают сложности с включением в <a> сласса <current>

Если же делать в массиве
"sametxt"
тогда возникают сложности с включением в шаблон ID элементов

Если класс current прикреплять не к <a>, а к LI, тогда рушиться Java скрипт, преобразующий классы <a> c hiden на visible

Есть ли возможность включения в шаблон массива с ID элементом?
спросил 14 Дек, 13 от Xenam (160 баллов)

4 Ответы

00 голосов
Да, можно. Переходите в расширенный режим редактирования меню. Для каждого пункта задайте параметр (назовем его, к примеру, IDENT). В нем прописываете ID для каждого пункта. В шаблоне меню:
Код
foreach($arResult as $arItem)
{
    $strClass = 'hide';
    if ($arItem['SELECTED']) $strClass .= ' current';
    if ((true ==isset($arItemp['PARAMS']['IDENT'])) && ('' != $arItemp['PARAMS']['IDENT']))
    {
          ?><a id="<?=$arItemp['PARAMS']['IDENT']; ?>" class="<?=$strClass; ?>"  href="#"  ><?
    }
    else
    {
          ?><a class="<?=$strClass; ?>" href="#"  ><?

    }
    ?><?=$arItem['TEXT']; ?></a><?
}


Класс для пункта перед выбранным тоже просто. Создаете в шаблоне файл result_modifier.php, в нем обходите меню, находите нужный пункт (перед активным) и задаете ему еще один параметр. В шаблоне меню проверяете наличие параметра.
ответил 21 Фев, 14 от Pomnep (13,960 баллов)
00 голосов
Спасибо огромное за совет.
Разобравшись самостоятельно сделал громоздкий скрипт, но ваш пример очень понравился, так как он намного короче и красивее.


к сожалению ваш скрипт выдает синтаксическую ошибку на строку
Код
    if ((true ==isset($arItemp['PARAMS']['IDENT']) && ('' != $arItemp['PARAMS']['IDENT']))

не понимаю точного ее значения поэтому изменил на
Код
   if ($arItem['PARAMS']['IDENT'])

И все заработало. Имеет ли это функциональное отличие?
ответил 11 Июнь, 14 от Xenam (160 баллов)
00 голосов
Цитата
Класс для пункта перед выбранным тоже просто. Создаете в шаблоне файл result_modifier.php, в нем обходите меню, находите нужный пункт (перед активным) и задаете ему еще один параметр. В шаблоне меню проверяете наличие параметра.


Если не сложно, можно код? :) Я только учусь php ...
Вызывает сложность фраза "находите нужный пункт (перед активным)", каким образом это делается?
ответил 10 Окт, 14 от Xenam (160 баллов)
00 голосов
Цитата
PAND-or пишет:
И все заработало. Имеет ли это функциональное отличие?

Будет работать и так. Мой вариант надежнее. Исправил ошибку в посте и отправил правильный вариант Вам в личку.
ответил 10 Фев, 15 от Pomnep (13,960 баллов)

Похожие вопросы

0 голосов
1 ответ
спросил 28 Июль, 15 от аноним
0 голосов
2 ответов
спросил 11 Фев, 14 от darunez (100 баллов)
0 голосов
3 ответов
0 голосов
4 ответов
спросил 06 Янв, 14 от XIDAN (620 баллов)
0 голосов
1 ответ
спросил 04 Ноя, 13 от SaNCHeZzz (120 баллов)