Jump to content

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

Featured Replies

Posted
comment_38123

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

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

В общем, я задумал реализовать меню с элементами 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>
comment_38124

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



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

<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>

Edited by spoken

  • Author
comment_38127

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

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

comment_38128

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

 

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

{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>

  • Author
comment_38132

Так, попробовал именно тот код, который вы дали, просто для проверки результата. Все приложения меню убрались в один пункт, то есть теперь в меню одна иконка 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>

Edited by Kinkl

comment_38133

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

  • Author
comment_38134


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

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

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

comment_38135

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



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

  • Author
comment_38136

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

comment_38139

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.