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

master-smeta

  • Захожу иногда
  • 298
  • 10 / 0
Привет всем! Возник такой вопрос: если у материала установить дату окончания публикации, то при наступлении этой даты материал будет снят с публикации. А как это изменить?
Например я хочу сделать так, чтобы материал продолжал публиковаться (т.к. на него идет трафик из ПС...), но получал метку "просрочено" или "не действительно"?
« Последнее редактирование: 15.03.2014, 21:53:12 от b2z »
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Эмм, в стандарте такого функционала нет. А что должно произойти после того, как материал становится недействительным? Если он не должен исчезать, то что?
*

master-smeta

  • Захожу иногда
  • 298
  • 10 / 0
А что должно произойти после того, как материал становится недействительным? Если он не должен исчезать, то что?
Я же написал:
Цитировать
получал метку "просрочено" или "не действительно"
Возможно я непонятно объяснил желаемый результат. Попробую объяснить на примере:
Допустим на сайте есть раздел "акции и специальные предложения". Каждая "акция" оптимизируется под какие-то определенные ключевые слова и приносит определенный трафик. Но акция не вечна, а действует всего месяц, причем дата окончания акции всегда точно известна. После чего начинает действовать другая акция, заточенная под другие ключевики...
Но на старую акцию шел трафик и терять его не хотелось бы. Можно конечно вручную заходить в "истекшую" акцию и писать что-нибудь типа: "Эта акция устарела. Заходи в раздел такой-то, чтобы ознакомиться со свежими акциями...". Но это неудобно.
Было бы удобнее привязать некую функцию к дате окончания публикации материала. Как только эта дата наступает - срабатывает моя функция, но материал продолжает публиковаться...
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Было бы удобнее привязать некую функцию к дате окончания публикации материала. Как только эта дата наступает - срабатывает моя функция, но материал продолжает публиковаться...
Ну такое можно на крон повесить. Только я все равно не понял, что значит получал метку "просрочено" или "не действительно". Что Вы вкладываете в эти действия? Изменение текста материала?
*

master-smeta

  • Захожу иногда
  • 298
  • 10 / 0
Только я все равно не понял, что значит получал метку "просрочено" или "не действительно". Что Вы вкладываете в эти действия? Изменение текста материала?
Появление/изменение картинки/текста... Это не важно, что там делаться будет. Важно то, что это действие будет происходить с момента наступления определенной даты, которая равна дате окончания публикации материала. Короче говоря, если дата не наступила, то на картинке зеленый светофор. Иначе - красный.
С добавлением условия у меня проблем не возникает. Проблема в том, что материал при наступлении даты окончания публикации убирается с сайта, а мне надо чтобы он продолжал висеть на сайте.
Я могу добавить в шаблон новое поле с типом календаря и в материалах указывать дату через него, а дату окончания публикации не указывать вообще. но зачем делать то, что уже и так реализовано? нужно всего-лишь подправить условие
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Ну условие Вы не поправите, потому что это заложено в выборке материалов.
*

master-smeta

  • Захожу иногда
  • 298
  • 10 / 0
Ну условие Вы не поправите, потому что это заложено в выборке материалов.
значит остается только добавить "дополнительную дату" и условие привязывать к ней, а окончание публикации вообще не указывать.
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
*

master-smeta

  • Захожу иногда
  • 298
  • 10 / 0
Нашел решение, оказывается всё уже есть и работает (хотя без напильника никуда): просто нужно материал перенести в архив. В итоге он он продолжает продолжает публиковаться по старой ссылке, но из основной категории он исчезает. С помощью "напильника" можно будет замутить какую-нибудь особую картинку (или функцию), для визуального указания "архивности" материала.
Но вот чего действительно не хватает, так это возможности настройки этих действий в админке.
Было бы удобно, если при указании даты окончания публикации, мы могли бы указать действия с материалом (ничего не делать, снять с публикации, перенести в категорию...,  перенести в архив). Мне кажется я такое где-то видел, но не помню где...
*

terveg

  • Захожу иногда
  • 86
  • 17 / 0
  • ставь "+" руки не отсохнут
есть такой плагин - делает автоматически все
http://extensions.joomla.org/extensions/authoring-a-content/archive/25086

а метку как ты говоришь, можно добавить с помощью CSS content:after если задать уникальный стиль для тайтла архивной статьи
*

master-smeta

  • Захожу иногда
  • 298
  • 10 / 0
есть такой плагин - делает автоматически все
http://extensions.joomla.org/extensions/authoring-a-content/archive/25086

а метку как ты говоришь, можно добавить с помощью CSS content:after если задать уникальный стиль для тайтла архивной статьи
Вот! То что нужно! Спасибо огромное!

С оформлением метки проблем не возникает
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Call to a member function NewColorizeImage() on null при переходе PHP 7 [Решено]

Автор Eholov

Ответов: 3
Просмотров: 3188
Последний ответ 17.03.2023, 11:03:04
от Olexa
После обновления Joomla до версии 3.9.23 проблема сохранения материала (Решено)

Автор yarek

Ответов: 6
Просмотров: 1560
Последний ответ 23.01.2021, 20:42:45
от wishlight
Ошибка при авторизации в админке [Решено]

Автор flat

Ответов: 0
Просмотров: 1174
Последний ответ 03.12.2020, 05:29:16
от flat
Undefined property: stdClass::$publish_up не видит дату публикации в компоненте

Автор Dolphin4ik_1

Ответов: 2
Просмотров: 1070
Последний ответ 02.09.2020, 13:35:06
от draff
[Решено. Причина не найдена] Failed to read session data Joomla 3.8.1 php 7.1.11

Автор capricorn

Ответов: 6
Просмотров: 12244
Последний ответ 17.07.2020, 03:33:08
от d1KdaT