Posted 2 августа, 201311 yr 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>
2 августа, 201311 yr 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 2 августа, 201311 yr by spoken
2 августа, 201311 yr Author comment_38127 spoken, вот как раз с этим и проблема, пока не очень силен в циклах, массивах да и в математике в целом, я гуманитарий в большей степени Но стараюсь учить и понимать по мере сил. Поясню точнее: для каждого пункта меню мне нужно отдельное выпадающее со своими ссылками. Этот код реально переделать под такое? Тут, я так понимаю, исходя из настроек каждого приложения (включено ли его отображение в меню или нет), они заносятся в массив, а после выводятся на экран с общими настройками отображения для всех. Поправьте если не то сказал
2 августа, 201311 yr 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>
2 августа, 201311 yr Author comment_38132 Так, попробовал именно тот код, который вы дали, просто для проверки результата. Все приложения меню убрались в один пункт, то есть теперь в меню одна иконка More, а там все приложения Форум, Файлы, Галерея и т.д. Хоть что-то в принципе Теперь нужно понять как сделать Форум -> Ссылка 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 />Главная   <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 2 августа, 201311 yr by Kinkl
2 августа, 201311 yr comment_38133 Так это несколько другая задача. А вот это Ссылка 1, Ссылка 2 это что и откуда? Это руками прописывать, видимо. Ну а ссылки на сами приложения мой код вам сгенерировал, их можно просто взять из исходника страницы и вставить в шаблон.
2 августа, 201311 yr Author comment_38134 А вот это Ссылка 1, Ссылка 2 это что и откуда? Ну вот для примера посмотрите меню на этом сайте, вот точно так же я хочу реализовать. Я бы руками все в принципе прописал прямыми ссылками, но тут есть один нюанс, а именно, что некоторые приложения доступны только для определенных групп, и соответственно их иконка видна не всем. А если руками все прописывать, то придется либо вообще ее не вставлять, либо делать открытой для всех, но по нажатию на нее у групп, которым нет доступа, будет выдаваться ошибка, что тоже не совсем хорошо. В общем, сейчас подумаю, поковыряю код, отпишу что и как вышло
2 августа, 201311 yr comment_38135 Может вам лучше хук подойдёт, видел что-то такое с названием proMenu или типа того. Смотрели? На этот посмотрите.
2 августа, 201311 yr Author comment_38136 spoken, променю отличный компонент, установлен на втором проекте, но для первого он не совсем подходит, ввиду нестандартного меню. Плюс у него оформление выпадающего меню выглядит совсем не хорошо, помню пытался настраивать, ничего не вышло хорошего.
2 августа, 201311 yr 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.