Новости 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 Гость просматривают эту тему.
  • 8 Ответов
  • 1174 Просмотров
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
С уровнями модуля меню
« : 26.06.2019, 20:19:52 »
Здравствуйте!
Работаю с Joomla еще с первой версии и впервые столкнулся с такой проблемой.
У меня есть меню с вложенными пунктами. Самый первый уровень в меню на сайте не должен отображаться.
Соотвественно я в настройках модуля устанавливаю отображение со 2-го уровня вложенности.



Все прекрасно работает (ниже будет видео).

У меня есть еще одно меню. На рабочем сайте оно скрыто. На демо - установлено в сайдбар.
Так вот, когда я перехожу в пункт меню из другого меню, первое меню перестает отображаться.

Вот видео, как это  происходит:

https://www.youtube.com/watch?v=9cOWwPhYpHI&feature=youtu.be

В итоге, если мы бродим по пунктам первого меню, где установлен 2 уровень - все хорошо.
Если мы уходим в любое другое меню - первое исчезает.

Я задал вопрос официалам, они сказали, что это не баг, это нормальное поведение  :o
А позже добавили, что нужно использовать Base Item, то есть Базовый пункт меню.

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

Кто-то понимает, как работает Базовый пункт меню?

Там даже написано в его подсказке:

Цитировать
Выберите пункт меню, который будет использован в качестве базового для данного меню. Вы должны установить Начальный уровень таким же (или выше) как у базового пункта меню. Это позволит модулю отображаться на всех назначенных страницах. Если выбрано значение «Текущий», то активный пункт меню будет использован в качестве базового. Это позволит модулю отображаться только в том случае, если активен родительский пункт меню.

Я читал это несколько раз. Пробовал разные комбинации, но ничего не вышло...
Help.

« Последнее редактирование: 26.06.2019, 21:53:53 от romagromov »
*

sivers

  • Живу я здесь
  • 2582
  • 358 / 0
Re: С уровнями модуля меню
« Ответ #1 : 26.06.2019, 23:23:26 »
Ну так правильно все. Второй уровень отображается когда активен пункт меню 1-го уровня, являющийся базовым (непосредственным родителем вашего меню 2-го уровня), ну или какой-то из его потомков. Если же перейти в 1-м уровне на другой пункт меню, то во 2-м уровне должны отобразиться пункты меню уже этого родителя. ведь базовый пункт сменился.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: С уровнями модуля меню
« Ответ #2 : 27.06.2019, 00:18:19 »
Ну так правильно все. Второй уровень отображается когда активен пункт меню 1-го уровня, являющийся базовым (непосредственным родителем вашего меню 2-го уровня), ну или какой-то из его потомков. Если же перейти в 1-м уровне на другой пункт меню, то во 2-м уровне должны отобразиться пункты меню уже этого родителя. ведь базовый пункт сменился.


Ну так как сделать, чтобы это основное меню отображалось всегда, независимо от того, какой пункт (любого) меню сейчас активен?
*

sivers

  • Живу я здесь
  • 2582
  • 358 / 0
Re: С уровнями модуля меню
« Ответ #3 : 27.06.2019, 09:04:10 »
Ну так как сделать, чтобы это основное меню отображалось всегда, независимо от того, какой пункт (любого) меню сейчас активен?
Проверил сейчас на своем сайте. Выбрал базовый пункт меню (вместо "Текущий") и выбрал меню, которому принадлежит базовый пункт. Меню второго уровня стало отображаться везде, независимо от выбранного пункта меню. Так что вы правы - должно работать. Joomla последняя стоит?
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: С уровнями модуля меню
« Ответ #4 : 27.06.2019, 11:26:44 »
Проверил сейчас на своем сайте. Выбрал базовый пункт меню (вместо "Текущий") и выбрал меню, которому принадлежит базовый пункт. Меню второго уровня стало отображаться везде, независимо от выбранного пункта меню. Так что вы правы - должно работать. Joomla последняя стоит?


Joomla последняя и у меня это не работает.
Показываю.
Вот у меня есть 2 меню.



В Main menu есть вложенные пункты:



В Second Всего один пункт.

Иду в модуль меню, выбираю базовым пунктом тот, что из второго меню:



И у меня вообще перестает Main Menu отображаться.
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: С уровнями модуля меню
« Ответ #5 : 27.06.2019, 11:27:48 »
Все, разобрался.
Нужно выбрать в Main Menu пункт, с которого начинается следующий уровень.
 ;D
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: С уровнями модуля меню
« Ответ #6 : 27.06.2019, 12:20:38 »
Только непонятно, зачем нужна эта настройка.
Если я указал, что этом модуле мне нужно отображать пункты только со 2-го уровня - неужели этого недостаточно?
Если бы я не хотел  отображать это меню, в других местах, я бы сделал это через привязку.
Короче, лишнее это на мой взгляд.
*

sivers

  • Живу я здесь
  • 2582
  • 358 / 0
Re: С уровнями модуля меню
« Ответ #7 : 27.06.2019, 14:13:02 »
Только непонятно, зачем нужна эта настройка.
Если у вас все пункты меню имеют глубокую вложенность, то с этой настройкой модуль показывал бы пункты второго уровня именно активного пункта меню. Т.е. они там менялись бы в зависимости от страницы сайта. Удобно, когда 1-й уровень меню отображается в одном месте (например, сверху), а второй и далее - в другом (сбоку).
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: С уровнями модуля меню
« Ответ #8 : 27.06.2019, 20:45:48 »
Все понял. Спасибо.
Я обычно для таких целей создавал отдельные меню и привязывал модуль.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Исчез компонент 'Поля' из меню в админке

Автор goga_pgasovav

Ответов: 2
Просмотров: 1275
Последний ответ 23.12.2024, 22:31:21
от goga_pgasovav
После обновления до Joomla 3.7 в админке в меню "Компоненты" пропали пункты

Автор lolitma3

Ответов: 39
Просмотров: 13135
Последний ответ 15.06.2023, 11:55:16
от Victor333
Вывод поля поиска первым пунктом в меню

Автор Mick_20

Ответов: 3
Просмотров: 1007
Последний ответ 03.02.2023, 13:02:46
от Mick_20
Текст меню выходит за границы меню.

Автор 7733039

Ответов: 1
Просмотров: 1419
Последний ответ 05.08.2022, 16:32:00
от marksetter
data-toggle data-target в меню Joomla?

Автор romagromov

Ответов: 6
Просмотров: 1071
Последний ответ 14.07.2022, 20:33:55
от romagromov