Новости Joomla

Свои типы полей в 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 для атрибута addfieldprefixnamespace 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 #разработка

Обновлена информация в Плане развития Joomla

👩‍💻 Обновлена информация в Плане развития Joomla.Здесь собрана информация о датах релизов, описаны принципы версионирования, указаны ответственные за релизы, а так же даты окончания поддержки релизов. Опираясь на эту информацию вы можете планировать развитие ваших интернет-проектов.👩‍💻 Что нового?⛔️ Joomla 4.Дата окончания исправления ошибок безопасности в версии 4.x - 14 октября 2025г. ⚠️ После этой даты Joomla 4 прекратит получать какие-либо обновления, в том числе безопасности - вообще. Рекомендуем обновить ваши сайты до актуальной Joomla 5.✅ Joomla 5.- Дата окончания исправления ошибок в версии 5.x - 13 октября 2026г.- Дата окончания исправления ошибок безопасности в версии 5.x - 12 октября 2027 года.- Текущая актуальная (на момент написания заметки) версия - 5.3.1.- Опубликовано расписание выхода релизов Joomla 5.4. Стабильный релиз ожидается 14 октября 2025 года.✅ Joomla 6.- Дата окончания исправления ошибок в версии 6.x - 17 октября 2028г.- Дата окончания исправления ошибок безопасности в версии 6.x - 16 октября 2029г.- Опубликовано расписание выхода релизов Joomla 6.0. Стабильный релиз ожидается 14 октября 2025 года.- Для разработчиков уже доступна Joomla 6.0.0-alpha1.✅ Joomla! Framework.Обновлена информация о Joomla! Framework - полноценном PHP-фреймворке для разработки. Он в версиях 1.х и 2.х был самостоятельным параллельным проектом, однако начиная с версии Joomla 4.0 стал её основой. Добавлена информация о Joomla! Framework 3.x, который вышел 6 октября 2023 года. Его можно использовать в тех случаях, когда вам в проекте не нужна CMS Joomla целиком.Подробнее на сайте Joomla-сообщества Joomlaportal.ru#joomla #community

Компания JetBrains рассказала о своей поддержке Joomla

Компания JetBrains рассказала о своей поддержке Joomla

JetBrains - один из мировых лидеров в разработке программного обеспечения для разработчиков. Её программные продукты - это IDE - профессиональные среды разработки, которые отличаются от простого блокнота/редактора с плагинами набором всевозможных инструментов для разработчиков, глубоким анализом кодовой базы, подсказками по ней и по языку программирования, отладкой ошибок и многим-многим другим. Одним из самых известных продуктов компании является IDE PHP Storm, который можно назвать отраслевым стандартом PHP-разработчика.

В статье How PhpStorm Helps Maintain PHP Open-Source Projects: Interviews and Real-World Examples в блоге компании описываются Open Source проекты, которым JetBrains оказывает поддержку (это могут быть бесплатные лицензии для разработчиков для некоммерческих проектов).

В список попали:

  • PHPUnit - фреймворк для unit-тестирования в PHP
  • Doctrine DBAL - библиотека для PHP, которая предоставляет лёгкий и гибкий слой для коммуникации с базой данных. Она поддерживает различные базы данных через единый и согласованный API.
  • CodeIgniter — популярный MVC-фреймворк для разработки на PHP
  • Joomla! - наша любимая CMS.

Эти названия (кроме "Joomla") чаще всего не слышат вебмастера и разработчики обычных сайтов и интернет-магазинов. Но эти названия хорошо знакомы PHP-разработчикам, которые создают сложные и высоконагруженные проекты и микросервисы. То, что Joomla оказалась в одном ряду с такими программными инструментами - делает ей честь.

🙏 За ссылку спасибо участнику нашего сообщества Ринату Кажетову (@rkazhet).

Подпишитесь на @joomlafeed

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

maxis

  • Захожу иногда
  • 119
  • 1 / 0
С праздником, Коллеги!

Копаюсь в компоненте
Код
com_tags в Joomla 3.x
и пытаюсь переопределить шаблон вывода материалов по меткам (тегам).

Хочу вывести программу мероприятия по дням (в роли дней метки), формат вывода:
Название метки
материал1, материал2, ...
Название метки2
материал3, материал4, ...
...

Лично мне это позволит построить гибкий список материалов, где метками можно управлять под каким названиями материал будет отображаться. Конкретная задача - расписание программ мероприятий на фестивале. Т.е. описание программы одно, но может попадать в разные даты. Для того, чтобы снять с программы на любой день, просто убираю метку с датой или добавляю при необходимости.

Если кто-то знает другие решения для такой задачи на Joomla 3.x - буду очень признателен.

столкнулся со следующими трудностями:
- не могу понять в каком месте компонент определяет кол-во меток, чтобы менять вывод (и если честно не до конца понял, где в шаблоне зависимость вида от кол-ва меток)
- как разделить результат запроса по нескольким меткам по конкретным меткам для группированного вывода в шаблоне.
- как получить список меток и их свойства, чтобы вывести заголовок метки и описание
- надо ли объединять шапку и список

Возможно есть другие решения, но я пока не придумал.

« Последнее редактирование: 21.05.2016, 13:08:19 от maxis »
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Может на описание работы компонента, кто ссылку даст?
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
В общем решил вопрос следующим образом (возможно есть более изящные)

1. Добавил в файл tags.php по адресу libraries/cms/helper
следом за 547 строкой перед скобкой:
Код
. ', ' . 'tags.title AS tag_title'
и после 577 строки вставил строку:
Код
->join('LEFT', '#__tags AS tags ON tags.id = m.tag_id')
Это для того, чтобы по тегу можно было отсортировать в шаблоне вывода (это тот самый костыль, который не нравится)

2. в шаблоне вывода списка тегов шаблон\html\com_tags\tag\default_items.php переопределил вместо стандартного (заменяем код с 62 строки по 93 тем, что в спойлере):   
Спойлер
[свернуть]

Детали вывода надо дополнять, конечно, но основную канву выводит как надо.
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Рано радовался...
Выводит только по последнему указанному тегу. А надо, чтобы материал выводился по каждому тегу.

Может, кто подкинет идею, где копать?
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Добрался до того, что надо запрос немного переделывать, убирать лишнюю группировку. Только не знаю какую группировку убирать.
Есть у кого идеи?
Результирующий запрос получается такой:
Спойлер
[свернуть]

Не понимаю для чего так много значений с оператором MAX, может в этом загвоздка?
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
А где можно поправить количество результатов по тегам по умолчанию? Столкнулся с тем, что выдаёт только 20 строк запроса.
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Нашел на форуме похожую задачу: http://joomlaforum.ru/index.php?topic=311732.0
проделывал похожее, но количество не поменялось. Нужно сделать так, чтобы все выбранные записи выводились с указанными параметрами. Упорно выдаёт 20 записей, хотя я меняю 20 на 60 здесь:
Код
$limit = $params->get('display_num', $app->get('list_limit', 20));
и здесь в значение по умолчанию задавал 60 (3-й параметр)
Код
$limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $limit, 'uint');

Есть несколько вопросов для знатоков:
Куда в конечном счёте передаётся итоговый запрос $query для выборки?
protected function populateState в моделе com_tags - кто и когда вызывает или через что вызывается. Не нашёл связей?


Знаю, что где-то на верном пути, но не нашёл ни документации и материалов как делать. Только общие советы.

HELP!
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Как оказалось всё гораздо проще. При отключенном фильтре компонент com_tags ориентируется на глобальные настройки. Там по умолчанию 20 стоит. Заодно и для админ панели добро сделал - 50 установил.
Исправляется здесь: Общие настройки -> Сайт -> Длина списка по умолчанию

Но вернулся к изначальной проблеме - список материалов. Оказывается не всё так просто... для меня. Копаем дальше.

Благодарю всех за внимание, помогать не стоит, сам как-нибудь доберусь до Истины.
До новых постов.
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
На всякий случай, если вдруг кому-то интересно покопаться, текст запроса до применения пагинации:
Код
SELECT
m.type_alias,
m.content_item_id,
m.core_content_id,
count(m.tag_id) AS match_count,
MAX(m.tag_date) as tag_date,
MAX(c.core_title) AS core_title,
MAX(c.core_params) AS core_params,
tags.title AS tag_title,
MAX(c.core_alias) AS core_alias,
MAX(c.core_body) AS core_body,
MAX(c.core_state) AS core_state,
MAX(c.core_access) AS core_access,
MAX(c.core_metadata) AS core_metadata,
MAX(c.core_created_user_id) AS core_created_user_id,
MAX(c.core_created_by_alias) AS core_created_by_alias,
MAX(c.core_created_time) as core_created_time,
MAX(c.core_images) as core_images,
CASE WHEN c.core_modified_time = '0000-00-00 00:00:00' THEN c.core_created_time ELSE c.core_modified_time END as core_modified_time,
MAX(c.core_language) AS core_language,
MAX(c.core_catid) AS core_catid,
MAX(c.core_publish_up) AS core_publish_up,
MAX(c.core_publish_down) as core_publish_down,
MAX(ct.type_title) AS content_type_title,
MAX(ct.router) AS router,
CASE WHEN c.core_created_by_alias > ' ' THEN c.core_created_by_alias ELSE ua.name END AS author,
ua.email AS author_email
FROM
#__contentitem_tag_map AS m INNER JOIN #__ucm_content AS c ON
m.type_alias = c.core_type_alias AND
m.core_content_id = c.core_content_id AND
c.core_state IN (1) AND
(c.core_publish_up = '0000-00-00 00:00:00' OR c.core_publish_up <= '2016-05-12 09:05:34') AND
(c.core_publish_down = '0000-00-00 00:00:00' OR c.core_publish_down >= '2016-05-12 09:05:34')
INNER JOIN #__content_types AS ct ON
ct.type_alias = m.type_alias
LEFT JOIN #__users AS ua ON
ua.id = c.core_created_user_id
LEFT JOIN #__tags AS tags ON
tags.id = m.tag_id
WHERE m.tag_id IN (3,4,5,6) AND
`c`.`core_language` IN ('ru-RU', '*') AND
m.type_alias IN ('com_content.article') AND
c.core_access IN (0,1,5)
GROUP BY m.type_alias, m.content_item_id, m.core_content_id, core_modified_time, core_created_time, core_created_by_alias, name, author_email ORDER BY MAX(`c`.`core_title`) ASC

Буду признателен, если подскажете, что здесь лишнее исходя из задачи. В выборку должны попадать не только уникальные, но и повторяющиеся материалы согласно таблице #__contentitem_tag_map
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Пока решил таким образом:
Закомментировал в выборке вот эти строки
Код
->group('m.type_alias, m.content_item_id, m.core_content_id, core_modified_time, core_created_time, core_created_by_alias, name, author_email')
. ', ' . 'count(m.tag_id) AS match_count'

убрал из запроса группировку по максимальным значениям MAX

Теперь выбираются не только уникальные строки, но и добавлены строки, где установлено несколько тегов (меток), с учётом настроек компонента. Возможно некорректно работает параметр Строгое соответствие или не строгое соответствие.
« Последнее редактирование: 20.05.2016, 09:47:11 от maxis »
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Благодарю всех за помощь!

Задачу по переопределению вывода списка материалов по метке в компоненте метки com_tags решил следующим образом:

1. установил максимальное кол-во позиций в списке в глобальных настройках Общие настройки -> Сайт -> Длина списка по умолчанию
2. Закомментировал следующие строки в SQL Запросе:
Код
->group('m.type_alias, m.content_item_id, m.core_content_id, core_modified_time, core_created_time, core_created_by_alias, name, author_email')
. ', ' . 'count(m.tag_id) AS match_count'
3. переопределил шаблон вывода имяшаблона/html/com_tags/tag/default_item.php
Добавил непосредственно перед выводом списка:
Код
<?php $sort_by_tag = array();
foreach ($items as $item) {
$sort_by_tag[$item->tag_title][] = $item;
}
?>
Изменил вывод списка вместо простого вывода списка по умолчанию, поставил вот это:
Код
<?php foreach ($sort_by_tag as $tag => $items_by_tag): ?>
<div class="h2dev"><h2>Мероприятия на <?php echo $tag; ?></h2></div>
<ul class="category list-striped">
<?php foreach ($items_by_tag as $item): ?>
...и в конце не забываем закрыть циклы foreach:
Код
</li> <!-- завершает вывод позиции списка в оригинальном варианте -->
<?php endforeach; ?>
</ul>
<?php endforeach; ?>

Не проверял опцию по соответствию, она может некорректно работать так как переменная, которая отвечает за условие, которое добавляется в запрос закомментирована match_count в первом пункте  ^-^
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Совместными усилиями результат достигнут, благодаря моему другу, который хорошо разбирается логике построения запросов Владимир Герасимчук v.gerasimchuk@mail.ru
 :D :D :D

По сути тему можно закрывать, но если кто-то хочет добавить свои альтернативные решения или уже готовые, то будет отличное дополнение ветки. Благодарю всех за внимание!

Всех благ!
 ^-^
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Вы случайно от id не избавлялись в брауз.строке в тегах?
В плане такая ссылка при клике на тег : /component/tags/tag/id-тег
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Вы случайно от id не избавлялись в брауз.строке в тегах?
В плане такая ссылка при клике на тег : /component/tags/tag/id-тег

Читал Ваш пост, прикинул как это можно сделать но не придумал. Столкнулся с тем, что без ID материала ссылка некликабельная становится, но я полагаю, что неглубоко копал.
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
А при чём тут id материала?
Это id тега по счёту из компонента:если тег создан 7-ой по счёту "joomla", то и id будет 7.
И ссылка будет /component/tags/tag/7-joomla
Вот от этого я хочу избавиться.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
А при чём тут id материала?
Это id тега по счёту из компонента:если тег создан 7-ой по счёту "joomla", то и id будет 7.
И ссылка будет /component/tags/tag/7-joomla
Вот от этого я хочу избавиться.

Я понял Вас, но не ставил себе такой задачи. А в чём сложность? На каком месте неразрешимая проблема?
*

vipiusss

  • Гуру
  • 5739
  • 344 / 11
  • Скайп: renor_
Решил плагином скрытия ид.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями
*

easy_simple

  • Осваиваюсь на форуме
  • 49
  • 0 / 0
Уважаемые господа, вы так хорошо разбираетесь в Joomla. может знаете как фильтровать по тэгу внутри категории? то есть нахожусь я в определённой категории и хочу только в ней отфильтровать материалы по тэгу.
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Уважаемые господа, вы так хорошо разбираетесь в Joomla. может знаете как фильтровать по тэгу внутри категории? то есть нахожусь я в определённой категории и хочу только в ней отфильтровать материалы по тэгу.

Движком не предусмотрена такая сортировка. Либо тег, либо категория. Сам хотел это использовать, но сами видите во что это вылилось.
*

maxis

  • Захожу иногда
  • 119
  • 1 / 0
Тему можно закрывать.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Плагин для вывода похожих материалов картинками

Автор jess

Ответов: 33
Просмотров: 4781
Последний ответ 14.05.2023, 19:45:43
от franzheinzel
Глюки с модулем вывода последних опубликованных материалов

Автор MultiMatrix83

Ответов: 3
Просмотров: 754
Последний ответ 13.11.2021, 19:46:25
от draff
После обновления до 3.10.2 пропали из списка обновлеия

Автор newalex

Ответов: 1
Просмотров: 723
Последний ответ 07.10.2021, 14:17:33
от ProtectYourSite
Условие для image_intro в альтернативном макете вывода статьи

Автор Olg

Ответов: 2
Просмотров: 892
Последний ответ 24.05.2021, 12:55:38
от Olg
Проблема с выводом материалов в две колонки

Автор blind

Ответов: 3
Просмотров: 816
Последний ответ 27.02.2021, 21:21:38
от IToro82