Новости Joomla

Свои типы полей в Joomla.

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути

libraries/src/Form/FormField.php, а так же в
libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он? В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note" name="your_note_for_user" label="Заголовок примечания" title="Альтернативный способ для заголовка" description="Текст примечания" class="col-12 alert alert-info" heading="h1" close="true" />

heading - указывать уровень заголовка.
close - позволяет закрыть это примечание. В классе поля
libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён. Поэтому берём и создаём свой класс поля, который мы унаследуем от
NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля
Note + то, что мы сами добавим. В XML-манифест добавляем наше поле

<field type="systempluginstatus" name="systempluginstatus" addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>

-

type - имя файла и класса,-
addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный-
name - нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла
modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php.А в классе поля будет написано следующее:

<?php // namespace для атрибута addfieldprefix namespace Joomla\Module\Wtquicklinks\Site\Fields; // нельзя напрямую обращаться к этому файлу defined('_JEXEC') or die; // подключаем родительский класс для переопределения use Joomla\CMS\Form\Field\NoteField; use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\PluginHelper; // имя класса и имя файла точь-в-точь class SystempluginstatusField extends NoteField { protected $type = 'Systempluginstatus'; protected function getLabel() { // если плагин не включён if(PluginHelper::isEnabled('system','wtquicklinks')) { // меняем свойства родительского класса $this->class = 'alert alert-danger w-100'; $this->element['label'] = '⚠️ А-а-а-а!'; $this->element['description'] = 'Плагин не включён!!'; // и просто рендерим его с нашими свойствами return parent::getLabel(); } // А иначе всё хорошо, скрываем поле из виду. $this->parentclass = 'd-none'; return ''; } }

Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает. @webtolkru#joomla #php #webdev #разработка

0 Пользователей и 1 Гость просматривают эту тему.
  • 16 Ответов
  • 3652 Просмотров
*

sezon

  • Захожу иногда
  • 54
  • 0 / 0
На сайте (Joomla 1.5.20) присутствует верхнее меню, ведущее на один из материалов. Также включен и настроен плагин Modalizer.

Если в обычном материале сделать ссылку вида:

Код
<div align="center">
{modal url=old_news.php?param=news-07-10|width=800|height=600}Архив за<br>2007 - 2011 год{/modal}
</div>

То модальное окно работает.

А вот как это окно прикрутить к одному из пунктов меню - ХЗ.

Требуется:
При нажатии на один из пунктов меню, тот материал, на который ссылается пункт меню, открывался через модальное окно. НО! Все другие пункты меню должны работать по-умолчанию ... открывать материал как обычно, не через модальное окно.

Прошу помощи!

PS: Пункт меню ведёт на внешний URL.
*

gogagidze

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Sezon, решилась проблема?
*

sezon

  • Захожу иногда
  • 54
  • 0 / 0
Нет, не решилась ... :(
*

gogagidze

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
у меня из-за этого дела проект остановился...пока понять в чём дело не могу...
*

sezon

  • Захожу иногда
  • 54
  • 0 / 0
там всё построено на безе данных
все поля, включая ссылки пунктов меню, хранятся в записях базы
как их вытаскивать примерно знаю, но вот есть модуль mod_menu, который отвечает за вывод - вот тут и загвоздка
если его править, то изменяться все ссылки меню, т.к. модуль - глобальный
*

gogagidze

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
про такую штуку в курсе? <?php JHTML::_('behavior.modal'); ?>
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
RTFM

Modalizing menu links

You can also use the {modal} tags in menu items to make them open in a modal popup window.

Simply surround the title with {modal}...{/modal}.
You can also add the extra parameters. If you define a url in the tag, it will overrule the menu items own url.
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

gogagidze

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
RTFM
.....
негодуе?

когда поставил плагин и ПРОЧИТАЛ мануал, понял что такой вариант работает только внутри материала.
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
В модализер можно настроить вызов на класс ссылки. В <li> есть такое дело (itemx) нужно только перенести его ещё и в <a>. Как-то так
Поменять в helper.php
Цитировать
case 0:
               // _top
               $data = '<a href="'.$tmp->url.'">'.$image.$tmp->name.'</a>';
на
Цитировать
case 0:
               // _top
               $data = '<a href="'.$tmp->url.'" class="item'.$this->_current->id.'" >'.$image.$tmp->name.'</a>';
Создание сайтов, шаблонов, помощь в решении проблем.
*

gogagidze

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
В модализер можно настроить вызов на класс ссылки. В <li> есть такое дело (itemx) нужно только перенести его ещё и в <a>. Как-то так
Поменять в helper.phpна

Спасибо.
*

gogagidze

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Как связать верхнее меню с Modalizer'ом?
« Ответ #10 : 08.05.2012, 20:34:02 »
.....
Simply surround the title with {modal}...{/modal}.
You can also add the extra parameters. If you define a url in the tag, it will overrule the menu items own url.
Taatshi, я так понял что в админке Joomla надо закрыть название меню в этот тэг. Или опять ступил?
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Re: Как связать верхнее меню с Modalizer'ом?
« Ответ #11 : 08.05.2012, 21:32:00 »
Я не пробовала, так поняла, что тайтл пункта заключить в теги. Возможны два варианта: прямо там, где прописываете название пункта либо в коде mod_menu

Пробуйте. Поскольку написано "Просто заключите..." - скорее всего, когда прописываете название.

ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

gogagidze

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Как связать верхнее меню с Modalizer'ом?
« Ответ #12 : 09.05.2012, 11:11:22 »
Я не пробовала, так поняла, что тайтл пункта заключить в теги. Возможны два варианта: прямо там, где прописываете название пункта либо в коде mod_menu

Пробуйте. Поскольку написано "Просто заключите..." - скорее всего, когда прописываете название.


делал, ноль эффекта. руки кривые?
*

sezon

  • Захожу иногда
  • 54
  • 0 / 0
Re: Как связать верхнее меню с Modalizer'ом?
« Ответ #13 : 10.05.2012, 19:19:40 »
изначально суть была такая:

Есть обычный редактор главного, основного меню. В нём делаю пункт меню со ссылкой на внешнюю страницу PHP.
Требуется эту самую внешнюю страницу открыть в модальном окне.

Повторяю. Если в обычном материале (НЕ в меню) прописать {modal} ... {/modal} , то из материала вс работает как надо. А из стандортного пункта меню - не работает.

Как это побороть?
*

gogagidze

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Как связать верхнее меню с Modalizer'ом?
« Ответ #14 : 11.05.2012, 13:31:45 »
изначально суть была такая:

Есть обычный редактор главного, основного меню. В нём делаю пункт меню со ссылкой на внешнюю страницу PHP.
Требуется эту самую внешнюю страницу открыть в модальном окне.

Повторяю. Если в обычном материале (НЕ в меню) прописать {modal} ... {/modal} , то из материала вс работает как надо. А из стандортного пункта меню - не работает.

Как это побороть?
Так суть-то одинаковая, из материала всё работает, а из пунктов меню - нет. Или не так понял?
*

sezon

  • Захожу иногда
  • 54
  • 0 / 0
Re: Как связать верхнее меню с Modalizer'ом?
« Ответ #15 : 11.05.2012, 23:46:37 »
да, правильно понял
*

gogagidze

  • Осваиваюсь на форуме
  • 21
  • 0 / 0
Re: Как связать верхнее меню с Modalizer'ом?
« Ответ #16 : 12.05.2012, 00:05:44 »
Я не пробовала, так поняла, что тайтл пункта заключить в теги. Возможны два варианта: прямо там, где прописываете название пункта либо в коде mod_menu

Пробуйте. Поскольку написано "Просто заключите..." - скорее всего, когда прописываете название.

Хотел уточнить какой файл именно править? mod_menu.php? Я, если честно так хорошо вопросом не владею, и когда открыл mod_menu.php то совершенно не понял что закрывать в тэг. Вот что в файле:
Код
<?php
/**
* @version $Id:mod_menu.php 2463 2006-02-18 06:05:38Z webImagery $
* @package Joomla
* @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

require_once( dirname(__FILE__).DS.'helper.php' );

$hide = JRequest::getInt('hidemainmenu');

if ( $hide ) {
modMenuHelper::buildDisabledMenu();
} else {
modMenuHelper::buildMenu();
}

?>
Подскажите пожалуйста кто знает чего править?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

убрать из меню заголовки h3

Автор nexter

Ответов: 19
Просмотров: 7889
Последний ответ 03.02.2020, 18:49:47
от durte
При добавлении нового пункта меню не отображается содержимое

Автор Denko

Ответов: 2
Просмотров: 3296
Последний ответ 16.01.2020, 18:40:55
от Denko
Не нажимается пункт меню на мобильной версии

Автор Sensession

Ответов: 7
Просмотров: 4797
Последний ответ 04.01.2020, 16:45:27
от xpank
Не отображаются пункты в меню

Автор physic

Ответов: 20
Просмотров: 23005
Последний ответ 20.09.2019, 16:54:01
от beliyadm
Как в ARI Ext Menu добиться работы параметра "Показать в меню"?

Автор vasmed

Ответов: 1
Просмотров: 3543
Последний ответ 01.03.2019, 11:12:18
от vasmed