Как сделать Выбор физического раздела с помощью селект с отображением выбранного раздела, если компонент в шаблоне страницы, как стандартное меню?
Здравствуйте!
Подскажите, есть ли такая возможность организовать меню, то есть навигацию по физическим разделам с помощью селект, с тем условием, чтобы запоминался выбранный раздел после перезагрузки.
Сделал подобное из меню, работает, но не запоминает, на примере vertical multilevel пробовал играться с SELECTED, но ничего не выходит ввиду отсутствия таких знаний и практики. Там, насколько я понял SELECTED присваивается css стиль, он выделяется, но по поводу чтобы он сохранялся в селекте я не додумался, но это скорее всего не в том направелнии.
Цикл не могу сделать, хоть и по примерам, но я чего-то не понимаю пока.
Почему выбрал для этого Меню - потому что можно организовать разное меню, и получается удобная навигация и вроде как не сильно пострадал стандартный компонент. Вот как запомнить выбранную позицию, не могу понять, помогите.
для начало давай сделаем пример html который будет в шаблоне меню
<select id="cd-dropdown" class="cd-select" onchange="top.location=this.value">
<option value="http://site.ru/papka/silka.html">Выбери меня</option>
<option value="http://site.ru/papka/silka1.html">Выбери меня 1</option>
<option value="http://site.ru/papka/silka2.html">Выбери меня 2</option>
</select>
Тут мы организуем переход по страницам.
Дальше берем Битрикс АПИ $silka = $APPLICATION->GetCurDir();
которая нам даст получить страницу на которой мы находимся после этого делаем проверку в шаблоне
Если $silka == "ссылки из меню (переменую)" то вставляем в тег option значения selected
что нам даст выбраны элемент
логику я тебе всю расписал, осталось только собрать шаблон компонента меню
Здравствуйте, а не могли бы вы написать свежий примерчик на коленке.
В битрикс АПИ я пока не могу сообразить.
Вызывает вопрос первая строка $silka = $APPLICATION->GetCurDir(); , ее начало <? - такое?
далее
- тут само собой вопрос, как оформить эту переменную, потмоу что эта взята прямо из кода компонента и она там таким образом отображается. И есть ли знаки перед и после $silka , то есть ковычки или одинарные ковычки.
Ну, значение selected в option поставить смогу!))
Извините, просмотрел ответ!
Насчет шаблона - будет простой селект, поэтому не знаю что отправить, а вот компонент, отправлю, чтобы не страдать ерундой - отправлю полностью, но выделю пустыми строчками место, где формируется код пунктов.
Сверху с самого селект, внизу заканчивается.
В этом выделенном отрезке первая строка с option - в ней формируются ссылки и в ней же текст TEXT - это первая строка с тегом option в выделенном отрывке.
Если что-то не так - извините)))
Вот кусок с другого меню - здесь просто попроще, все так же работает, но лишнее просто убрал:
<select id="ul" onchange="top.location=this.value">
<?foreach($arResult["MENU_STRUCTURE"] as $itemID => $arColumns):?> <!-- first level-->
<option value="<?=$arResult["ALL_ITEMS"][$itemID]["LINK"]?>"><?=$arResult["ALL_ITEMS"][$itemID]["TEXT"]?></option>
<?endforeach;?>
</select>
Здравствуйте, немного не понимаю, скопировать в свое пространство имен, у меня стандартный компонент, я его модифицирую, при этом разумеется копирую в свой шаблон, если это имеется ввиду.
Получается примерно такая вот конструкция
<select id="ul_<?=$menuBlockId?>" onchange="top.location=this.value">
<?foreach($arResult["MENU_STRUCTURE"] as $itemID => $arColumns):?> <!-- first level-->
<option value="<?=$arResult["ALL_ITEMS"][$itemID]["LINK"]?>"><?=$arResult["ALL_ITEMS"][$itemID]["TEXT"]?></option>
<?endforeach;?>
</select>
Все работает ок, но как только страница перезагрузилась, само собой, данные в селекте, то есть если представить placeholder - они не остаются, подставляется первый option в списке. Можно седелать "Выберите раздел", но это как-то не комильфо!
Это уже из catalog vertical поделка- то же самое, только без SELECTED в шаблоне меню.
Я путаюсь в этих переменных, которые присутствуют в цикле.
ALL_ITEMS - сами пункты
LINK - ссылка на пункты
TEXT-название пунта визуальное
проверил цикл, там (возможно) все верно, потому что убрать оттуда нельзя ничего.
Другая версия - есть Переключатель сайтов, вот там все как надо и до предела просто. но, там совершенно другие переменные, и вот этот цикл, которы я напсал я составлял как вроде бы там, но, не соответствет пока.
Судя по вашему коду вы используете какой то нестандартный массив пунктов меню, который сами сделали. Но суть не меняется. Вам нужно SELECTED проверять и проставлять нужному option атрибут selected.
Артём Лучников, здесь использован компонент (именно в этом примере) от catalog vertical, просто href заменен на value для селекта и того чтобы можно было перейти по onchange.
В vertical multilevel такой код формирует ссылки
SELECTED здесь- это класс css для выбранного пункта. Он выделяет выбранный пункт. А атрибут для option - selected пишется в самом option.
Здесь класс указан для ордного пункта ИЛИ обычный ИЛИ SELECTED, поэтому он меняется каждый раз. Весь список формируется из 1 строки, в этой строке пункту может быть присвоен класс либо обычный, либо SELECTED, а option всего 1, selected ему не поставить. А если поставить, то selected будут все пункты, но показываться будет последний пункт списка по умолчанию. Можно поставить hidden selected, будет показываться текущий раздел, но не будут видны никакие пункты, то есть выбрать нельзя т.к. у option атрибут hidden.
Короче классы классами, а атрибут я не вижу где поставить в option. Другие option и списки, видимо для других уровней или типов меню, в данном случае все формируется в том коде, в первой строке.
Если делали - подскажите.