Перейти к содержанию

Помогите реализовать Dropdown меню стандартными средствами


Kinkl

Рекомендуемые сообщения

Доброго времени суток!

Помогите сделать меню, застрял на одном моменте...

В общем, я задумал реализовать меню с элементами dropdown, как на мафии. И столкнулся с такой проблемой.

В шаблоне пункты меню (приложения) отдельно не задаются, для них всех присвоен один код, так как в настройках приложений их можно скрывать.

Немного подумав, я решил сделать так: скрыть все приложения из меню с помощью настроек, и прописать каждое приложение отдельно в коде шаблона. И вот тут я столкнулся с проблемой. Как правильно прописать приложения? Какие перменные использовать? Вот соорудил я такой код на примере для пункта главная страница

<li id='nav_home' class='left'><a href='{$this->settings['home_url']}' title='{$this->lang->words['homepage_title']}' rel="home"><img src="{style_images_url}/_custom/navIcon.png" class='navIcon' alt='' /><br />{$this->settings['home_name']}</a></li>

А как сделать такое, например, для файлов, галереи и т.д.?

 

Кстати, функцию Dropdown решил взять из самого шаблона, там есть отдельный пункт меню с соцсетями, и там задан вот такой код:

<li id="nav_more" data-dropdown="right">
			<a href="#"><img src="{style_images_url}/_custom/navIcon.png" class='navIcon' alt='' /><br />More <img src="{style_images_url}/_custom/dropdown_arrow.png" alt="" /></a>
			<ul>
				<li><a href="__www.twitter.com/username"><img src="{style_images_url}/_custom/icon-social_twitter.png" alt="" /> Follow Us on Twitter</a></li>
				<li><a href="__www.facebook.com/page"><img src="{style_images_url}/_custom/icon-social_facebook.png" alt="" /> Like Us on Facebook</a></li>
				<li><a href="__www.youtube.com/page"><img src="{style_images_url}/_custom/icon-social_youtube.png" alt="" /> Subscribe on Youtube</a></li>
			</ul>
</li>
Ссылка на комментарий
Поделиться на другие сайты

Ээээ, включите обратно отбражение приложений в меню и возьмите код ссылки приложения.



Вот этот код выводит все ваши приложения и ссылки на них. Вам надо его переделать, чтобы он формировал выпадающее меню. Справитесь с циклом?

<if test="applicationsloop:|:is_array($header_items['applications']) AND count($header_items['applications'])">
								<foreach loop="applications:$header_items['applications'] as $data">
									<if test="showingapp:|:$data['app_show']">
										{parse variable="appActive" default="" oncondition="$data['app_active']" value="active"}
										<li id='nav_app_{$data['app_dir']}' class="left {parse variable="appActive"}"><a href='{parse url="{$data['app_link']}" seotitle="{$data['app_seotitle']}" template="{$data['app_template']}" base="{$data['app_base']}"}' title='{parse expression="sprintf( $this->lang->words['go_to_prefix'], IPSLib::getAppTitle($data['app_dir']) )"}'>{IPSLib::getAppTitle($data['app_dir'])}</a></li>
									</if>
								</foreach>
							</if>
Изменено пользователем spoken
Ссылка на комментарий
Поделиться на другие сайты

spoken, вот как раз с этим и проблема, пока не очень силен в циклах, массивах да и в математике в целом, я гуманитарий в большей степени :D Но стараюсь учить и понимать по мере сил.

Поясню точнее: для каждого пункта меню мне нужно отдельное выпадающее со своими ссылками. Этот код реально переделать под такое? Тут, я так понимаю, исходя из настроек каждого приложения (включено ли его отображение в меню или нет), они заносятся в массив, а после выводятся на экран с общими настройками отображения для всех. Поправьте если не то сказал :D

Ссылка на комментарий
Поделиться на другие сайты

Ага, типа того. Переделать реально.

 

Вот эти две строчки формируют саму ссылку

{parse variable="appActive" default="" oncondition="$data['app_active']" value="active"}
<li id='nav_app_{$data['app_dir']}' class="left {parse variable="appActive"}"><a href='{parse url="{$data['app_link']}" seotitle="{$data['app_seotitle']}" template="{$data['app_template']}" base="{$data['app_base']}"}' title='{parse expression="sprintf( $this->lang->words['go_to_prefix'], IPSLib::getAppTitle($data['app_dir']) )"}'>{IPSLib::getAppTitle($data['app_dir'])}</a></li>

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



Примерно так, идею поймёте

<if test="applicationsloop:|:is_array($header_items['applications']) AND count($header_items['applications'])">
<li id="nav_more" data-dropdown="right">
            <a href="#"><img src="{style_images_url}/_custom/navIcon.png" class='navIcon' alt='' /><br />More <img src="{style_images_url}/_custom/dropdown_arrow.png" alt="" /></a>
            <ul>
<foreach loop="applications:$header_items['applications'] as $data">
									<if test="showingapp:|:$data['app_show']">
										{parse variable="appActive" default="" oncondition="$data['app_active']" value="active"}
										<li id='nav_app_{$data['app_dir']}' class="left {parse variable="appActive"}"><a href='{parse url="{$data['app_link']}" seotitle="{$data['app_seotitle']}" template="{$data['app_template']}" base="{$data['app_base']}"}' title='{parse expression="sprintf( $this->lang->words['go_to_prefix'], IPSLib::getAppTitle($data['app_dir']) )"}'>{IPSLib::getAppTitle($data['app_dir'])}</a></li>
									</if>
								</foreach>
            </ul>
</li>
							</if>

Ссылка на комментарий
Поделиться на другие сайты

Так, попробовал именно тот код, который вы дали, просто для проверки результата. Все приложения меню убрались в один пункт, то есть теперь в меню одна иконка More, а там все приложения Форум, Файлы, Галерея и т.д. Хоть что-то в принципе :D Теперь нужно понять как сделать Форум -> Ссылка 1, Ссылка 2, ... ; Файлы -> Ссылка 1, Ссылка 2..., и т.д. Не совсем понимаю как разграничить приложения из массива, то есть выделить их по-отдельности.

Попробовал сделать просто для главной страницы, получилось замечательно, то что мне нужно. Но это просто если строго прописывать прямые ссылки на приложения, что не совсем правильно, хотелось бы с помощью переменных все-таки реализовать...

<li id='nav_home' class='left' data-dropdown="left"><a href='__сайт.ru' title='Главная' rel="home"><img src="{style_images_url}/_custom/navIcon.png" class='navIcon' alt='' /><br />Главная &nbsp <img src="{style_images_url}/_custom/dropdown_arrow.png" alt="" /></a>
<ul>
				<li><a href="__www.twitter.com/username"><img src="{style_images_url}/_custom/icon_stats.png" alt="" /> Follow Us on Twitter</a></li>
				<li><a href="__www.facebook.com/page"><img src="{style_images_url}/_custom/icon-social_facebook.png" alt="" /> Like Us on Facebook</a></li>
				<li><a href="__www.youtube.com/page"><img src="{style_images_url}/_custom/icon-social_youtube.png" alt="" /> Subscribe on Youtube</a></li>
			</ul>
</li>
Изменено пользователем Kinkl
Ссылка на комментарий
Поделиться на другие сайты

Так это несколько другая задача. А вот это Ссылка 1, Ссылка 2 это что и откуда? Это руками прописывать, видимо. Ну а ссылки на сами приложения мой код вам сгенерировал, их можно просто взять из исходника страницы и вставить в шаблон.

Ссылка на комментарий
Поделиться на другие сайты


А вот это Ссылка 1, Ссылка 2 это что и откуда?

Ну вот для примера посмотрите меню на этом сайте, вот точно так же я хочу реализовать.

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

Ссылка на комментарий
Поделиться на другие сайты

Может вам лучше хук подойдёт, видел что-то такое с названием proMenu или типа того. Смотрели?



На этот посмотрите.

Ссылка на комментарий
Поделиться на другие сайты

spoken, променю отличный компонент, установлен на втором проекте, но для первого он не совсем подходит, ввиду нестандартного меню. Плюс у него оформление выпадающего меню выглядит совсем не хорошо, помню пытался настраивать, ничего не вышло хорошего.

Ссылка на комментарий
Поделиться на другие сайты

Тогда есть два варианта - или писать ссылки для приложений руками (это вам не подходит из-за прав доступа групп к приложениям) или делать в шаблоне более сложный код. $header_items['applications'] это типа массива со всеми приложениями. Нужно пройтись циклом по массиву или через case сделать. Это более сложная доработка, не осилю.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...