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

Gerostrat

  • Захожу иногда
  • 374
  • 2 / 0
  • Свидетель чайной ложки
Можно ли как-то настроить плагин, чтобы он снимался с публикации с 6 утра до 10 вечера, а с 10 вечера до 6 утра был опубликован? :)
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
*

Gerostrat

  • Захожу иногда
  • 374
  • 2 / 0
  • Свидетель чайной ложки
Настроек точно нет, поэтому и спрашиваю. Может кто делал уже подобное?
*

Gerostrat

  • Захожу иногда
  • 374
  • 2 / 0
  • Свидетель чайной ложки
Т.е. можно в файле плагина добавить php условие, мол, если время такое-то – ничего не делать, если время такое-то – тут "содержание плагина"?
Код
<?php if (/*время с 6 утра до 11 вечера*/) {
/* код плагина */
} else {

}
« Последнее редактирование: 12.02.2020, 12:45:18 от Gerostrat »
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
ну да. единственно, что придется следить, чтобы обновление не затерло, а в остальном - всяко проще костылестроения с кронами
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Настроек точно нет, поэтому и спрашиваю. Может кто делал уже подобное?
Ну да, делал.
Т.е. можно в файле плагина добавить php условие, мол, если время такое-то – ничего не делать, если время такое-то – тут "содержание плагина"?
Код
<?php if (/*время с 6 утра до 11 вечера*/) {
/* код плагина */
} else {

}
Да, конечно,
или return false в случае если запуск в ненужное время
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Да напишите вы простейший скрипт и повесьте на крон. Все, что делает скрипт - в зависимости от команды включает/выключает нужный плагин в базе данных. Например:
Код
<?php
$plugin_name = 'plg_sampledata_blog'; // название плагина в базе


include 'configuration.php';

$config = new JConfig;

if ( $_GET['flag'] == 'on' ) {
$enabled=1;
}
else if ( $_GET['flag'] == 'off' ) {
$enabled=0;
}
else {
die ('Xakep! ***, fack, fack!');
}

$connect = mysqli_connect ($config->host, $config->user, $config->password, $config->db);


if (!$connect) {
die('Connect error: ' . mysqli_error());
}

$result = mysqli_query($connect, "UPDATE `".$config->dbprefix."extensions` SET `enabled` = '".$enabled."' WHERE `".$config->dbprefix."extensions`.`name` = '".$plugin_name."';");

mysqli_close($connect);


И повесьте на крон два условия, одно на включение, второе на выключение. Например,
Код
/host/mysite.ru/mysuperplugin.php?flag=on
Вот и все. И ничего при обновлении не слетит.

P.S. Написал корявенько, костыльненько, но рабочий вариант, проверил.
P.P.S. Но все же лучше написать разработчику вашего плагина и попросить реализовать возможность запуска по таймеру.
« Последнее редактирование: 12.02.2020, 23:56:43 от SeBun »
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Полное отключение кэширования

Автор mvn77

Ответов: 1
Просмотров: 967
Последний ответ 10.04.2024, 02:01:54
от mvn77
Проблема вебвизором в Яндекс метрике при использовании плагина jch optimize

Автор polezniy

Ответов: 32
Просмотров: 4126
Последний ответ 01.03.2024, 10:26:31
от Vastriet
Как сделать отображение времени создания материала?

Автор Pzhigalov

Ответов: 0
Просмотров: 833
Последний ответ 27.09.2023, 22:45:29
от Pzhigalov
Получить текущий номер страницы плагина "Разрыв страницы" (pagebreak)

Автор sertlan

Ответов: 1
Просмотров: 749
Последний ответ 12.06.2023, 18:14:09
от sertlan
После установки и активации плагина Add Custom CSS упал сайт (решено)

Автор paramonaff

Ответов: 9
Просмотров: 766
Последний ответ 04.11.2022, 19:53:04
от marksetter