Новости Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla

Вышел WT Quick links v.2.4.0 - релиз модуля для Joomla.Это модуль-конструктор для быстрого создания набора элементов. Это могут быть ссылки на компоненты Joomla, пункт меню или пользовательская ссылка. Есть условия для исключений показа элементов списка. Вы можете создавать собственные макеты вывода модуля, создавая таким образом почти всё, что угодно: от простого списка ссылок до стены фотографий на главную страницу или ссылки-теги для перелинковки категорий интернет-магазина, список FAQ, табы или аккордеоны. Модуль позволяет выводить изображения, адаптивные изображения, видео, адаптивные видео.v.2.4.0. Что нового?Добавлена поддержка новых компонентов. Добавлены новые типы ссылок и исключений для них: - Phoca Download, - Phoca Gallery, - RadicalMart (@radicalmart).Joomla 6. Успешно протестирована работа модуля на Joomla 6-alpha2.РазработчикамПроведён большой рефакторинг кода. Для типов ссылок созданы классы-драйверы. Теперь для того, чтобы добавить новый тип ссылки в модуль достаточно скопировать класс-образец из
modules/mod_wt_quick_links/src/Driver/Collection и наполнить его данными по образцу, а так же добавить необходимые языковые константы в панели администратора Joomla.Модуль бесплатный. Страница расширенияGitHub расширенияJoomla Extensions Directory👩‍💻 Подпишись на @joomlafeed.#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

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

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Имеется скрипт:
Спойлер
[свернуть]

Делается это для того, чтобы потом сравнить title страницы и наименование категории, если совпадает - выводим инфу о категории.
Теперь о проблеме. Категорий около 30 000, когда я начинаю выполнять $parent_cat = $cat_model->getCategory($product->virtuemart_category_id); , страница начинает "думать".

Подозреваю, что делаю что-то не так. Пожалуйста, укажите, что не так. Спасибо заранее! ^-^
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
А сколько у Вас count( $products ) ?
Да и в обще - Вы для каждого товара в модели запрашиваете данные категории ..
Ну если сильно нужно то там по моему есть получить список категорий id которых в массиве !
то есть это будет 1 запрос а не == count( $products )
То есть если сильно хотите - то соберите id категорий в массив - и получите все категории одним запросом
что то типа
Код
' WHERE #__virtuemart_category.category_id IN ( ' . implode( ' , ' , $arrayCat_id ). ' ) ';
Ну или через модель - но своим запросом будет быстрей !
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
Код
if($products as $product) {
    ...
}
Может тут надо не if, а foreach?

Но дело даже не в этом.
Зачем эта проверка? Хотите определить в шаблоне является ли эта страница страницей просмотра категории?
Возможно, будет интересно: Интеграция с Ozon
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Может тут надо не if, а foreach?
Ха - А я и не глянул ! Что логический оператор перепутали с итерацией ! )))
то я бы на месте сервера - тоже долго думал бы что от меня хотят -  встретив такое  ! )))
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
я бы на месте сервера - тоже долго думал бы что от меня хотят -  встретив такое  ! )))

 :laugh:
Возможно, будет интересно: Интеграция с Ozon
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Может тут надо не if, а foreach?

Но дело даже не в этом.
Зачем эта проверка? Хотите определить в шаблоне является ли эта страница страницей просмотра категории?

Прошу прощения, опечатался, в коде было именно foreach.
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
А сколько у Вас count( $products ) ?
Да и в обще - Вы для каждого товара в модели запрашиваете данные категории ..
Ну если сильно нужно то там по моему есть получить список категорий id которых в массиве !
то есть это будет 1 запрос а не == count( $products )
То есть если сильно хотите - то соберите id категорий в массив - и получите все категории одним запросом
что то типа
Код
' WHERE #__virtuemart_category.category_id IN ( ' . implode( ' , ' , $arrayCat_id ). ' ) ';
Ну или через модель - но своим запросом будет быстрей !

Прошу прощения, выше упомянул, что опечатался, на самом деле указан foreach,  а не if.

count( $products ) возвращает 710.
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
@rsn
Цитировать
Зачем эта проверка? Хотите определить в шаблоне является ли эта страница страницей просмотра категории?

Возможно, вы знаете модуль mod_virtuemart_products, в нём есть функция фильтрации вывода товара по родительской категории.
У меня имеется около 400 страниц с некоторым "калькулятором ссылки" на исходный товар. На каждой из страниц необходимо вывести ссылку на товар + наименование товара + картинку товара.

Мой мозг, зеленый в подобных затеях, подумал: зачем создавать 400 модулей, если можно брать категорию из title страницы, и вывести товар по сверке title и соотв. категории.
Код
if (strpos($current_title, $allParentsCategory)!== false) {
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Ну то как придумает так и решает !
Главное что бы это по ресурсам не затратно было !!
Кста - включите отладку (общие настройки Joomla ) и там можно посмотреть - сколько какой процесс - хавает памяти и времени ! -
*

rsn

  • Давно я тут
  • 520
  • 34 / 3
@Damarkuzz не понял Вашу задачу. Попробуйте объяснить другими словами.
Возможно, будет интересно: Интеграция с Ozon
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Код
count( $products ) возвращает 710.
Что то Вы точно не совсем то затеяли !
при таких количествах count( $products ) возвращает 710 - я бы не советовал в обще ни каких вычислений и расчетов проводить !
А тем более  в прямом потоке HTTP - Запроса !
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
не понял Вашу задачу. Попробуйте объяснить другими словами.
Та да ! - То ли объяснили не так - то ли - что то не то делаете - типа как делить на ноль ! == можно - но ненужно ! )))
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Делается это для того, чтобы потом сравнить title страницы и наименование категории, если совпадает - выводим инфу о категории.
Т.е. фильтрация PHP, а не SQL ?
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
@rsn
Цитировать
@Damarkuzz не понял Вашу задачу. Попробуйте объяснить другими словами.

Вкратце.

1) На 400 страницах в SP PageBuilder требуется вывести по одной категории товаров VirtueMart (всего 400 категорий).

2) Чтобы не создавать 400 разных модулей mod_virtuemart_products (на каждую категорию), я решил перебрать вызвать все товары через foreach ($products as $product). Возникает вопрос, как нам теперь из общего потока товаров всех категорий вывести нужную? (моё решение в п.3)

3) С помощью PHP мы берем title заголовка, и сопоставляем его с перечнем категорий
Код
foreach ($products as $product) {
   if (strpos($current_title, $allCategories)!== false) {
      print_r($product)
   }
}
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
@draff
Цитировать
Т.е. фильтрация PHP, а не SQL ?
Цитировать
Да, по другому пока что не умею
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Как вариант хак модуля, включить фильтр и добавить в точку входа модуля
$doc = JFactory::getDocument();
$current_title = $doc->getTitle();
$db = JFactory::getDbo();
            
            $query = $db
               ->getQuery(true)
               ->select('virtuemart_category_id')
               ->from($db->quoteName('#__virtuemart_categories_ru_ru'))
               ->where($db->quoteName('category_name'). " = " . $db->quote($current_title));
            $db->setQuery($query);
            $category_id = $db->loadResult();
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
@draff
Цитировать
Как вариант хак модуля, включить фильтр и добавить в точку входа модуля


Спасибо, пытался выполнить Ваш код, дописав некоторые вещи:


Спойлер
[свернуть]


Данным действиями я получил родительскую категорию, затем вызвал дочерние, в которых находятся товары, которые нужно вывести.
Но теперь, если выводить продукты через конструкцию foreach ($product as $products) {...}, выводятся все товары, без фильтрации по категории. Подскажите, как вывести товар, но отфильтровав по категориям?

*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Вы создаете новый модуль или используете стандартный Вирт для вывода продуктов ?
п.с.
Выводит товары из подкатегории в стандартном модуле Вирт и без фильтрации по группе.
Спойлер
[свернуть]
« Последнее редактирование: 04.12.2020, 05:22:30 от draff »
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Запрос на получение родительской категории
Код
$query = $db
->getQuery(true)
->select($db->quoteName('vc.category_parent_id'))
->from($db->quoteName('#__virtuemart_categories', 'vc'))
->join('INNER', $db->quoteName('#__virtuemart_categories_ru_ru', 'rc'). '  ON ' . $db->quoteName('rc.virtuemart_category_id'). ' = ' . $db->quoteName('vc.virtuemart_category_id'))
->where($db->quoteName('rc.category_name'). " = " . $db->quote($current_title));
$db->setQuery($query);
$category_id = !empty($db->loadResult())? $db->loadResult() : $category_id;
*

Damarkuzz

  • Захожу иногда
  • 116
  • 1 / 0
Вы создаете новый модуль или используете стандартный Вирт для вывода продуктов ?
п.с.
Выводит товары из подкатегории в стандартном модуле Вирт и без фильтрации по группе.
Спойлер
[свернуть]

Большое спасибо, получилось вывести товары:
1) Главной категории (Тест)
2) Дочерней категории первой вложенности (Тест -> Тапочки)

Но, если товары находятся во второй вложенности и далее (Тест->Тапочки->Тканевые) - товары не выводятся.
*

draff

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

Damarkuzz

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

Один пункт меню думает что он главный

Автор DamaVbubi

Ответов: 4
Просмотров: 958
Последний ответ 13.02.2024, 19:49:10
от DamaVbubi
Долго грузятся страницы категорий

Автор SuperRomario

Ответов: 4
Просмотров: 1820
Последний ответ 03.07.2023, 17:59:07
от Wood
Ошибка 1054 Unknown column 'created_by' in 'field list' VirtueMart

Автор Evgen Kulibin

Ответов: 3
Просмотров: 1302
Последний ответ 26.02.2023, 01:56:42
от lakshmi
Как вывести в категории VirtueMart кастомное поле с редактором?

Автор dc_web

Ответов: 4
Просмотров: 607
Последний ответ 05.10.2022, 11:07:00
от sivers
Проблема с выводом изображения в VirtueMart 3

Автор vetkrs

Ответов: 0
Просмотров: 484
Последний ответ 30.09.2022, 17:22:43
от vetkrs