VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Создаем "сложный" модуль меню с большим количеством вложений и сворачиванием
3
Часто возникает необходимость сделать модуль Меню более сложным. Например с большим количеством позиций меню или например с 4 уровнями вложенности.
В то же время представить себе дизайн портала с 40 позициями меню довольно сложно. Как минимум высота модуля меню в этом случае будет в несколько раз превышать размер содержания по высоте.
Хочу описать путь создания своего модуля меню любой сложности со сворачиванием не активных позиций меню
Пример работы такого модуля меню http://www.oriflame.kashglobal.org
Создаем php файл модуля в каталоге modules
Это пример файла, его содержание нужно отредактировать под ваши нужды
В этом файле описывается меню и обрабатывается и создается результирующий html
Само меню описывается в массиве, каждый элемент массива представляет собой позицию меню в очередности обработки
Разберем элемент массива
8000 - уникальный ключ в массиве link - ссылка на страницу содержания, куда будет сделан переход parent - для того, что бы при переходе на страницу содержания, вышестоящие позиции меню отображались в модуле, необходимо вставить через запятую список уникальных ключей массива. Например '4000,4400' Если это первый уровень меню, то необходимо вставить значение '-1' child - список уникальных ключей массива, которые будут развернуты и отображены в меню при переходе на страницу содержания. Если это конечный пункт меню в ветке, то необходимо вставить значение '-1'. Перечислять уникальные ключи необходимо через запятую. pageid - id страницы в vBadvanced CMPS. Это значение необходимо для корректной идентификации активной страницы. title - просто название пункта меню level - значение вложенности в меню, необходим для организации отступов при отображении меню.
Во вложении представлено 3 файла маркеров списка, вы можете установить свои маркеры.
Эти изображения необходимо загрузить в каталог images/misc/
Создаем php модуль.
При создании модуля необходимо в позициях:
Подключаемый файл выбрать файл меню, который только что создали
Использованные шаблоны добавить созданные шаблоны adv_portal_advmenu и adv_portal_advmenu_bit
Использовать шаблон оболочки модуля - Да
Добавляем модуль на страницы.
Надеюсь описал достаточно понятно. Естественно все можно сделать под свои нужды.
Обновлять меню можно очень простым способом, просто отредактировав php файл.
Я, конечно, плохо разбираюсь в VBAdvansed, но разве массив, что в php файле, запросом в БД получить низя?
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1707
Репутация в разделе: 163
0
Sellrion, Можно, но для этого надо сначала создать табличку в бд с необходимыми полями и заполнить ее, а для этого надо в админке сделать интерфейс управления, прописать в нем все действия .... такие как добавление, перемещение, удаление, редактирование.... что же касается основного модуля меню, то его никто не отменяет, он как работал так и работает, да и не всегда нужно такое сложное меню. У меня просто стояла такая задача реализовать именно такую функциональность.
В общем я не вижу причины наворачивать админский интерфейс на то, что можно вполне скорректировать в файле.
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,835
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20332
Репутация в разделе: 468
2
наверное в данном случае данных в БД просто нет, менюшка создается руками
нечто подобное делал именно с использованием настроек воблы и своими таблицами в базе
в админке добавлялись данные о строке меню и указывался родительский элемент
пример здесь http://forum.clubvolvo.ru/?styleid=18
верхняя строка в навбаре
вложенность под-менюшек практически любая
а js или даже на css не проще ли? а то и менюшка раскрывается, только при переходе на следующую страницу
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1707
Репутация в разделе: 163
0
Quote:
Originally Posted by Вектор
а js или даже на css не проще ли? а то и менюшка раскрывается, только при переходе на следующую страницу
Само меню это не проблема, проблема в том, что нужно оставить раскрытым элемент меню соответствующий содержанию и все вышестоящие позиции тоже.
С js вероятно возможно сделать то же самое но с чистым css точно нет.
К то му же можно предусмотреть раскрытие всех вложенных уровней при нахождении в каждой конкретной позиции меню.
Именно для этого и предусмотрены элементы в массиве parent и child.
Sellrion
Kernel panic
Join Date: Aug 2007
Location: Екатеринбург
Posts: 2,536
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 1921
Репутация в разделе: 40
0
Эм, я все равно чего-то не понимаю.) Вот например у нас есть элемент меню:
У этого элемента есть элемент 'link', в значении которого есть идентификатор news. Это значит что данная ссылка ведет на какую-то страницу с этим идентификатором. То есть в БД должна быть запись об идентификаторе news и, возможно, контент, к ней привязанный. Там же должен быть тогда и title и уж точно pageid. Что касается иерархии, то во-первых на мой взгляд элемент 'child' - лишний: всех потомков элемента можно найти по элементу 'parent', который должен совпадать с индексом текущего элемента, во-вторых вышесказанное касается того случая, когда данные в БД находятся. А тут автор уже вручную, при помощи многомерности массива menu реализовал необходимую иерархию элементов. То есть в случае с заранее существующим массивом, ни parent ни child ни level не нужны - они заранее очевидны из структуры массива. Тогда в чем же проблема-то взять данные из БД?) Я чего-то не понимаю?)
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1707
Репутация в разделе: 163
0
Sellrion, Все можно, и ты прав можно получить массив прямо из бд, но надо будет его еще и сформировать и составить правильно, фактически сделать его таким же как и в модуле.
Quote:
Originally Posted by Sellrion
У этого элемента есть элемент 'link', в значении которого есть идентификатор news. Это значит что данная ссылка ведет на какую-то страницу с этим идентификатором. То есть в БД должна быть запись об идентификаторе news и, возможно, контент, к ней привязанный. Там же должен быть тогда и title и уж точно pageid.
Не совсем так, а что делать с ссылками в меню на форум или на блоги или на галереи или на альбомы...... Портал дает возможность интегрировать это содержание но страница с интеграцией всегда одна и та же. В стандартном модуле меню все ссылки добавленные в настройках выводятся после страниц портала, что часто не совсем корректно, иногда надо сделать пункт меню со ссылкой на форум сразу после первой позиции в меню...
По поводу title, можно решить создав несколько страниц интеграции и разделив интегрируемый контент на несколько страниц по теме. Тогда то что ты предлагаешь будет корректно работать. Но все равно остается вопрос порядка расположения ссылок на содержание, которое не является страницей портала.
Quote:
Originally Posted by Sellrion
Что касается иерархии, то во-первых на мой взгляд элемент 'child' - лишний: всех потомков элемента можно найти по элементу 'parent', который должен совпадать с индексом текущего элемента, во-вторых вышесказанное касается того случая, когда данные в БД находятся.
Можно но фактически ты придешь к тому, что сформируешь аналогичный массив.
Quote:
Originally Posted by Sellrion
А тут автор уже вручную, при помощи многомерности массива menu реализовал необходимую иерархию элементов. То есть в случае с заранее существующим массивом, ни parent ни child ни level не нужны - они заранее очевидны из структуры массива.
Данные элементы нужны для установки значений dispay: hide и dispay: block при формировании html, без них довольно сложно установить каждой позиции правильное значение свойств отображения. Вернее можно, создав рекурсивную функцию. Просто я посчитал, что наворачивать сюда еще и функцию будет лишним, хотя безусловно можно обойтись и дез этих элементов массива, если мы не ищем простых путей.
Quote:
Originally Posted by Sellrion
Тогда в чем же проблема-то взять данные из БД?) Я чего-то не понимаю?)
О нет взять данные можно, но в результате мы фактически получим тот же массив с теми же элементами, просто у нас будет на один запрос к бд больше, к тому же мы будем формировать массив практически в том же виде, а потом будем выводить его в html.
И так +1 запрос к бд +1 функция, для содержания которое фактически не изменяется динамически, а часто вообще не изменяется.
Лично я посчитал, что так будет проще. Хотя может быть и не совсем кошерно и не абсолютно девелоперски не правильно.... но я то и не девелопер.
но в любом случае спасибо за конструктивную критику. Пока обсуждали пришел к нескольким правильным мыслям, например на создание нескольких страниц интеграции для индикации в меню разных позиций. Имею ввиду своя страница для Альбомов, Форума, Блога, Кабинета.... как то сразу не допер, что там в общем то можно сделать и так будет правильней.
Sellrion
Kernel panic
Join Date: Aug 2007
Location: Екатеринбург
Posts: 2,536
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 1921
Репутация в разделе: 40
0
Quote:
Originally Posted by SMak044
а что делать с ссылками в меню на форум или на блоги или на галереи или на альбомы......
А вот для этого по хорошему и надо бы использовать БД с интерфейсом в админке. Но раз уж этого делать не хочется, то можно задействать этот самый файл. Только текст там будет раз в... 10 меньше. Что-то вроде:
С последующим array_merge с тем, что ты получишь из БД. Такой файл редактировать под себя в разы проще и быстрее, согласись.
Quote:
Originally Posted by SMak044
Можно но фактически ты придешь к тому, что сформируешь аналогичный массив.
Конечно. Но из в разы меньшего количества исходных данных, которые ты предлагаешь юзеру редактировать вручную, что совершенно не нужно. Так ведь?)
Quote:
Originally Posted by SMak044
И так +1 запрос к бд +1 функция, для содержания которое фактически не изменяется динамически, а часто вообще не изменяется.
Лично я посчитал, что так будет проще. Хотя может быть и не совсем кошерно и не абсолютно девелоперски не правильно.... но я то и не девелопер.
Зато я вот - девелопер, и я бы никогда не заставил юзера вручную редачить километровый файлик, когда можно обойтись немного более сложным кодом. +1 функция вообще роли не играет чисто с точки зрения производительности. +1 запрос к БД может быть, но уж лучше задействовать его чем подобные головняки с редактированием. ИМХО, конечно.)
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1707
Репутация в разделе: 163
0
Quote:
Originally Posted by Sellrion
Зато я вот - девелопер, и я бы никогда не заставил юзера вручную редачить километровый файлик
И я бы юзера не заставлял, но мы то говорим не о юзере, а об админе и файлик, пусть и километровый, админ как то один раз ручками может подправить
Кстати я не позиционировал данную модификацию как продукт, потому и назвал статьей, если кто то возметься привести данный мод к продукту или модулю с настройками, скажу спасибо и даже сам себе установлю.
Quote:
Originally Posted by Sellrion
А вот для этого по хорошему и надо бы использовать БД с интерфейсом в админке.
Я уже говорил, что мысль про то что разнообразный контент можно развести на разные страницы интеграции в портале, очень здравая и спасибо за нее. Тогда да фактически мы получим запись в бд, а вот если не разводить контент по разным страницам интеграции, то получим id только той что есть...