Как использовать позицию левой боковой панели Joomla для пользовательского меню компонента

Клиентский веб-сайт использует шаблон Joomla с большим количеством модулей в левой колонке, но для пользовательского компонента, который я разрабатываю, эти модули должны быть заменены вертикальным меню. Решение хака, которое я придумал, состоит в том, чтобы скрыть эти модули с помощью CSS:

div#leftpad > div {
    display:none;
}

а затем вставьте <div id='compmenu'> в <div id='leftpad'> с помощью javascript и установите display:block. С jQuery я мог бы сделать

jQuery('#compmenu').appendTo('#leftpad').show();

Компонент отображает карту Google, поэтому в любом случае требуется javascript. Кто-нибудь из экспертов Joomla знает более элегантный или простой метод для достижения того же результата?


person yitwail    schedule 16.05.2011    source источник


Ответы (2)


Почему бы вам не использовать сборку в Menu-Bind для модулей, чтобы скрыть их, когда отображается ваш модуль или компонент, это был бы чистый способ. Я думаю, что ваш модуль/компьютер привязан к пункту меню.

Редактировать: Ваш клиент должен правильно реализовать ваш модуль/композицию. Делать что-то подобное с помощью хака очень плохо.

  • Создайте пункт меню для вашего компонента (программный)
  • Создать скрытое меню
  • Добавьте свой компонент в это меню
  • Отвязать все модули из этого меню

API Joomla содержит хорошую серию руководств по созданию компонентов. Я прошел через них в прошлом, но, как я вижу, они улучшили их. Насколько я понимаю, ваш компонент относительно прост, поэтому меню по умолчанию должно быть таким, как вы хотите. Это описано в установочном XML

 <administration>
  <!-- Administration Menu Section -->
  <menu>MyMenuLink</menu>

  <!-- some other stuff -->

 </administration>

И будет доступен на Joomla! menumanager после того, как ваш клиент установил ваш компонент. Так что думаю вам будет не сложно.

person sra    schedule 16.05.2011
comment
Можете ли вы предоставить небольшой фрагмент кода? Или, возможно, метод класса, который я могу найти в документации по API? К сожалению, мои знания Joomla не являются исчерпывающими. Мой компонент не обязательно будет иметь пункт меню. Например, его можно вызвать из ссылки на изображение на домашней странице. - person yitwail; 16.05.2011
comment
@yitwail, вы всегда должны использовать ссылку на меню в joomla, даже если это не видимое меню. Все остальное может привести к плохому поведению. Насколько я понимаю, вы разрабатываете компонент, поэтому клиенту нужно будет его установить. И обрабатывать все в бэкенде joomla. Это не зависит от вас. Вам не нужно ничего делать. Это просто не так, как работает joomla. Небольшая предыстория: каждый модуль в joomal имеет привязку MenuBinding по умолчанию для каждого меню по умолчанию «привязать ко всем». Клиент должен только развязать его для меню (или элемента меню), которые ссылаются на ваш компонент. - person sra; 16.05.2011
comment
Я бы предпочел не использовать хак. Вот почему я задал вопрос. Я попытался погуглить «модуль привязки меню joomla», и в первом результате упоминалось, что в URL-адресе указано itemid=xx. Затем я наткнулся на официально выглядящий документ об этом здесь, но он касается конкретно страниц статей. В любом случае, мне нужно как-то создать itemid для компонента, который исключает модули, которые ему не нужны? - person yitwail; 16.05.2011
comment
@yitwail API Joomla, на который вы ссылаетесь, описывает компонент по умолчанию (com_content), который предназначен для просмотра статьи. Но проблема не совсем такая, как у вас, потому что она о статье. Но вы сможете решить это с помощью этого решения, и, как вы могли заметить, это то же самое решение, которое я вам посоветовал. Подробнее см. мой отредактированный ответ - person sra; 16.05.2011
comment
@sra, вы разместили свой последний комментарий, пока я писал свой, поэтому мой последний комментарий немного не синхронизирован. Мой «клиент» на самом деле занимается веб-дизайном и знает гораздо больше joomla, чем я, но я создаю компоненты, когда он занят другими делами, поэтому я попрошу его совета. А пока спасибо за понимание. Если он возражает против «взлома», я должен сделать это должным образом, но мне платят почасово, так что он может предпочесть быстрый взлом. - person yitwail; 16.05.2011
comment
@yitwail Хорошо, неважно. Может быть, вы будете информировать меня об этом? - person sra; 16.05.2011
comment
@sra, мой клиент согласен с тобой. Но как это для компромисса: я создам скрытое меню и т. д., необходимые для генерации itemid, с которым я буду исключать все модули. Затем я вставлю свое меню с javascript. Или я должен создать дополнительный модуль только для создания меню и создания зависимости между модулем и компонентом? - person yitwail; 17.05.2011
comment
@сра, спасибо. У меня уже есть такое меню администратора. Я не понимал, что могу использовать его для itemid. Еще один вопрос, и я уйду. Если есть какие-либо модули, которые имеют Назначение меню для Все меню в Диспетчере модулей, пользователь должен изменить его на Выбрать меню. Элемент(ы) из списка и по отдельности выбрать все меню, кроме MyMenuLink? - person yitwail; 17.05.2011

В Joomla типы меню определяются различными представлениями, заданными установленными компонентами. Если ваш компонент правильно закодирован в соответствии со стандартами Joomla MVC, у вас должен быть хотя бы один вид, который даст вам хотя бы один тип меню на выбор. Как уже упоминал sra, даже если вам не нужна ссылка меню, вы должны создать скрытое меню, чтобы вы могли создать ссылку, чтобы у вас был идентификатор элемента для работы и назначения модулей.

Есть несколько расширений и веб-сайтов, которые могут помочь создать необходимые файлы для компонента, поэтому все, что вам нужно сделать, это добавить немного кода. Как только вы поймете, что такое Joomla MVC, это действительно не так сложно.

http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1

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

person Brent Friar    schedule 16.05.2011
comment
Брент, я хорошо знаком с MVC. У моего компонента есть представление карты, содержащее views/map/view.html.php и views/map/tmpl/default.php. Я изучил некоторую версию учебника, который вы упомянули. В любом случае, спасибо за вклад; Я стисну зубы и сделаю это правильно. - person yitwail; 17.05.2011