Forwarded from WebTolkRu (Sergey Tolkachyov)
При работе с кодом хорошим тоном разработки считается наглядность кода, которая обеспечивает лёгкость его восприятия. Обычно это называют "чистый, читаемый код". Согласитесь, понимать следующую запись не всегда бывает удобно:
echo '<a href="index.php?option='.$option.'&view='.$view.'&id='.$id.'" target="'.$target.'">'.$link_title.'</a>';
или пример из стандартного шаблона JoomShopping:
<a class="lightbox" id="main_image_full_<?php print $image->image_id?>" href="<?php print $this->image_product_path?>/<?php print $image->image_full;?>" <?php if ($k!=0){?>style="display:none"<?php }?> title="<?php print htmlspecialchars($image->img_title)?>">
Наглядностью и лёгкостью чтения, к сожалению, и не пахнет.
В API Joomla есть довольно богатый инструмент - класс HTMLHelper. В нём довольно много полезных фич, приведу пример для рендера ссылок как самого простого элемента. Метод
HTMLHelper::link()
принимает 3 аргумента:- $url - формируем его программно заранее и передаем как параметр
- $text - собственно текст ссылки. Это может быть любое HTML-содержимое: картинка, код и т.д. - как в вёрстке.
- $attribs - самые разные атрибуты ссылки:
class
, target
, onclick
, кастомные data-атрибуты и т.д.Согласитесь, так гораздо нагляднее. И порядок в коде.
use Joomla\CMS\HTML\HTMLHelper;
$url = 'index.php?option=' . $option . '&view=' . $view . '&id=' . $id;
$link_title = HTMLHelper::image('images/headers/raindrops.jpg', 'Alt attrib for image');
$target = '_blank';
$linkAttribs = [
'target' => $target,
'class' => 'btn btn-primary',
'onclick' => 'alert(123);',
'data-link-id' => '4a5d7f6a455sf8',
];
echo HTMLHelper::link($url, $link_title, $linkAttribs);
Частично ознакомиться с методами класса HTMLHelper можно в файле
libraries/src/HTML/HTMLHelper.php
.#joomla #php #development #разработка #html
Please open Telegram to view this post
VIEW IN TELEGRAM
Это информация о возможном сломе обратной совместимости в классе
Pagination
Joomla 5.1.3+. Релиз 5.1.3 был связан с закрытием уязвимостей. В нём был изменён подход к генерации ссылок для страниц пагинации. Как было?
До сих пор ссылки на отдельные страницы, а также ссылки на страницы "В начало", "В конец", "Вперед" и "Назад" автоматически включали все параметры запроса, которые присутствуют в текущем запросе (
$app->getInput()
). Такое поведение создает возможность атаки злоумышленников на заражение кэша.Как стало?
Чтобы смягчить этот фактор, пришлось внести изменения в поведение класса
Pagination
. Класс разбивки на страницы по умолчанию будет включать только следующие параметры запроса в процесс генерации URL-адреса:$defaultUrlParams = [
'format' => 'CMD',
'option' => 'CMD',
'controller' => 'CMD',
'view' => 'CMD',
'layout' => 'STRING',
'task' => 'CMD',
'template' => 'CMD',
'templateStyle' => 'INT',
'tmpl' => 'CMD',
'tpl' => 'CMD',
'id' => 'STRING',
'Itemid' => 'INT',
];
Если этих параметров достаточно для формирования корректного URL с помощью
Route::_()
, то можно ничего не менять. Если вам нужны нетипичные параметры (например, project_id
, cat_id
, product_id
и т.д.), то их следует добавить в объект пагинации в методе display()
вашего View
.public function display($tpl = null)
{
$app = Factory::getApplication();
$this->pagination = $this->get('Pagination');
// Flag indicates to not add limitstart=0 to URL
$this->pagination->hideEmptyLimitstart = true;
// Add additional parameters to pagination url
$queryParameterList = [
'catid' => 'int',
'project_id' => 'int',
'language' => 'string',
];
foreach ($queryParameterList as $parameter => $filter)
{
$value = $app->getInput()->get($parameter, null, $filter);
if (is_null($value))
{
continue;
}
$this->pagination->setAdditionalUrlParam($parameter, $value);
}
}
Обратите внимание, что для каждого параметра нужно указать тип фильтра:
int
, string
, cmd
, word
и т.д.Также примеры для com_finder и com_content на GitHub
#разработка #joomla #php #development
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
[4.x] Fix paginated page links for com_finder and com_content archive by SniperSister · Pull Request #43953 · joomla/joomla-cms
Summary of Changes
The 4.4.7 and 5.1.3 security release broke the pagination in com_finder (thanks Phil for reporting) and the com_content archive view.
Testing Instructions
Create a test site with...
The 4.4.7 and 5.1.3 security release broke the pagination in com_finder (thanks Phil for reporting) and the com_content archive view.
Testing Instructions
Create a test site with...
SW JProjects v.2.1.0 - обновление менеджера цифровых проектов для Joomla разработчиков
Компонент позволяет разработчикам сайтов на Joomla вести свой собственный сервер обновлений для своих расширений Joomla (шаблонов, модулей, плагинов etc), что позволяет доносить обновления сразу всем своим клиентам. Возможность скачивания по лицензионным ключам.
👩💻 Что нового?
Умный поиск. Добавлен плагин индексации проектов для компонента умного поиска Joomla. Плагин поддерживает мультиязычность, отображает иконку проекта в результатах поиска.
Исправление работы пагинации в списке версий. Релиз Joomla 5.1.3 был релизом закрытия уязвимостей. В связи с этим в механизм формирования ссылок пагинации Joomla были внесены изменения. Из-за этого перестали работать ссылки пагинации в списке версий. Исправлено.
Страница расширения
GitHub расширения
Joomla Extensions Directory
@joomlafeed
#расширения #joomla #php #разработка #development
Компонент позволяет разработчикам сайтов на Joomla вести свой собственный сервер обновлений для своих расширений Joomla (шаблонов, модулей, плагинов etc), что позволяет доносить обновления сразу всем своим клиентам. Возможность скачивания по лицензионным ключам.
Умный поиск. Добавлен плагин индексации проектов для компонента умного поиска Joomla. Плагин поддерживает мультиязычность, отображает иконку проекта в результатах поиска.
Исправление работы пагинации в списке версий. Релиз Joomla 5.1.3 был релизом закрытия уязвимостей. В связи с этим в механизм формирования ссылок пагинации Joomla были внесены изменения. Из-за этого перестали работать ссылки пагинации в списке версий. Исправлено.
Страница расширения
GitHub расширения
Joomla Extensions Directory
@joomlafeed
#расширения #joomla #php #разработка #development
Please open Telegram to view this post
VIEW IN TELEGRAM
Как добавить свой повторяемый элемент интерфейса в класс HTMLHelper Joomla 4+
В API Joomla есть полезный инструмент - класс HTMLHelper. Он выводит HTML-элементы интерфейса с нужными параметрами: модальные окна, аккордеоны, табы, изображения и т.д. Для рендера мы передаём все нужные данные: заголовки окон, содержимое табов, атрибуты изображений.
Плюс использования HTMLHelper в Joomla - это его универсальность, оторванность от контекста, возможность использования логики при рендере в зависимости от вводных данных, его можно использовать везде. Но что если нам нужно создать свой собственный класс?..
Читать статью на Хабре
#разработка #php #joomla #development
В API Joomla есть полезный инструмент - класс HTMLHelper. Он выводит HTML-элементы интерфейса с нужными параметрами: модальные окна, аккордеоны, табы, изображения и т.д. Для рендера мы передаём все нужные данные: заголовки окон, содержимое табов, атрибуты изображений.
Плюс использования HTMLHelper в Joomla - это его универсальность, оторванность от контекста, возможность использования логики при рендере в зависимости от вводных данных, его можно использовать везде. Но что если нам нужно создать свой собственный класс?..
Читать статью на Хабре
#разработка #php #joomla #development
Подготовка расширений к Joomla 6: CMSObject -> stdClass
В Joomla 6 метод
Устаревший способ
Как будет в Joomla 6
Соответствующий Pull Request уже принят в ветку Joomla 6.
PR на GitHub
#php #joomla #разработка #development #webdev
В Joomla 6 метод
getItem()
в Adminmodel
будет возвращать \stdClass
вместо CMSObject
. Это означает, что все устаревшие функции этого класса будут недоступны. Разработчики в Joomla 6 должны напрямую работать со свойствами объекта item и не использовать устаревшие методы set()
и get()
.Устаревший способ
$article = $app->bootComponent('content')->getMVCFactory()->createModel('Article', 'Administrator')->getItem(1);
echo $article->get('title');
Как будет в Joomla 6
$article = $app->bootComponent('content')->getMVCFactory()->createModel('Article', 'Administrator')->getItem(1);
echo $article->title;
Соответствующий Pull Request уже принят в ветку Joomla 6.
PR на GitHub
#php #joomla #разработка #development #webdev
SW JProjects v.2.2.0 - обновление менеджера цифровых проектов для Joomla разработчиков
Компонент позволяет разработчикам сайтов на Joomla вести свой собственный сервер обновлений для своих расширений Joomla (шаблонов, модулей, плагинов etc), что позволяет доносить обновления сразу всем своим клиентам. Возможность скачивания по лицензионным ключам.
👩💻 Что нового?
Умный поиск. Добавлен плагин индексации документации для компонента умного поиска Joomla. Плагин поддерживает мультиязычность, отображает иконку проекта в результатах поиска.
Ошибка XML в коллекции расширений.Исправлено некорректное отображение версии в XML сервера обновлений для коллекции расширений.
Мелкие исправления и рефакторинг. Несколько мелких исправлений ошибок и улучшений.
Страница расширения
GitHub расширения
Joomla Extensions Directory
@joomlafeed
#расширения #joomla #php #разработка #development
Компонент позволяет разработчикам сайтов на Joomla вести свой собственный сервер обновлений для своих расширений Joomla (шаблонов, модулей, плагинов etc), что позволяет доносить обновления сразу всем своим клиентам. Возможность скачивания по лицензионным ключам.
Умный поиск. Добавлен плагин индексации документации для компонента умного поиска Joomla. Плагин поддерживает мультиязычность, отображает иконку проекта в результатах поиска.
Ошибка XML в коллекции расширений.Исправлено некорректное отображение версии в XML сервера обновлений для коллекции расширений.
Мелкие исправления и рефакторинг. Несколько мелких исправлений ошибок и улучшений.
Страница расширения
GitHub расширения
Joomla Extensions Directory
@joomlafeed
#расширения #joomla #php #разработка #development
Please open Telegram to view this post
VIEW IN TELEGRAM
Триггеры ядра Joomla при CRUD-операциях
CRUD - аббревиатура основных операций с данными: создание (Create), чтение (Read), изменение (Update) и удаление (Delete). Практически все действия на сайте как в админке, так и пользовательской части можно описать этими действиями. Разработчикам при создании функционала часто в какие-то моменты этих действий нужно проделать некие действия с участием данных или без них.
Как найти нужное событие для своего плагина в Joomla подскажет эта статья.
Читать статью на Хабре
@joomlafeed
#разработка #php #development
CRUD - аббревиатура основных операций с данными: создание (Create), чтение (Read), изменение (Update) и удаление (Delete). Практически все действия на сайте как в админке, так и пользовательской части можно описать этими действиями. Разработчикам при создании функционала часто в какие-то моменты этих действий нужно проделать некие действия с участием данных или без них.
Как найти нужное событие для своего плагина в Joomla подскажет эта статья.
Читать статью на Хабре
@joomlafeed
#разработка #php #development
Переменная RETURN или как вернуть пользователя в свой компонент
Нетривиальная задача. Необходимо было из условного компонента «А» отправить пользователя в форму редактирования контента компонента «Б». При этом сделать так, чтобы при нажатии кнопки «Закрыть» в компоненте «Б», пользователь возвращался в компонент «А». Всё вышеописанное происходило в в административной панели сайта.
По условиям задачи автор не мог вносить изменения в компонент «Б», поскольку он поставлялся в пакете с Joomla и любые изменения исчезли бы в момент обновления системы.
Полезная заметка от участника нашего сообщества Владимира Егорова (@sitogon)
Читать заметку
@joomlafeed
#разработка #joomla #php #development
Нетривиальная задача. Необходимо было из условного компонента «А» отправить пользователя в форму редактирования контента компонента «Б». При этом сделать так, чтобы при нажатии кнопки «Закрыть» в компоненте «Б», пользователь возвращался в компонент «А». Всё вышеописанное происходило в в административной панели сайта.
По условиям задачи автор не мог вносить изменения в компонент «Б», поскольку он поставлялся в пакете с Joomla и любые изменения исчезли бы в момент обновления системы.
Полезная заметка от участника нашего сообщества Владимира Егорова (@sitogon)
Читать заметку
@joomlafeed
#разработка #joomla #php #development
Forwarded from WebTolkRu (Sergey Tolkachyov)
E-mail шаблоны Joomla 5: добавление и просмотр своих переменных
В Joomla 5 появились настраиваемые email-шаблоны, как системные, так и сторонних компонентов. Их нельзя (пока что) добавить самостоятельно, они добавляются расширениями при установке. Но их можно отредактировать в Система - Шаблоны - Шаблоны писем. В настройках шаблонов писем (кнопка настроек компонента в верхнем правом углу) мы выбираем формат писем текст или HTML. Тогда становятся доступны настройки макетов шаблонов писем Joomla. Эти глобальные параметры можно переопределить в каждом конкретном email-шаблоне. Таким образом для каждого из email-шаблонов можно указать свою вёрстку и настройки логотипа.
Это, конечно, требует отдельной подробной статьи...
Для разработчиков: как добавить свои переменные для e-mail шаблонов Joomla?
Полезны окажутся 2 триггера для плагинов:
onMailBeforeRendering - триггер, который позволяет добавлять свои шорт-коды для строковой замены в плагине. Отдать туда надо массив вида
Также полезное свойство класса для передачи данных из плагина в лейаут письма для рендера -
```php
// Получаем текущий мейлер
$mailTemplate = $event->
$data = [
'
];
// с Joomla 4 для всех типов писем. 2-й аргумент - plain - текстовый формат письма
$mailTemplate->addTemplateData($data, false);
// с Joomla 5.2 - для HTML-писем
$mailTemplate->addLayoutTemplateData($data);
// пример из ядра Joomla
// Add additional data to the layout template
$this->addLayoutTemplateData([
'siteName' => $app->get('sitename'),
'lang' => substr($this->language, 0, 2),
]);
```
onMailBeforeTagsRendering - триггер, который добавляет ваши переменные в список доступных переменных для замены в окне редактирования email шаблона Joomla. Отдать туда нужно тот же самый массив, который отдавали в предыдущем триггере.
@webtolkru
#joomla #разработка #php #development #webdev
В Joomla 5 появились настраиваемые email-шаблоны, как системные, так и сторонних компонентов. Их нельзя (пока что) добавить самостоятельно, они добавляются расширениями при установке. Но их можно отредактировать в Система - Шаблоны - Шаблоны писем. В настройках шаблонов писем (кнопка настроек компонента в верхнем правом углу) мы выбираем формат писем текст или HTML. Тогда становятся доступны настройки макетов шаблонов писем Joomla. Эти глобальные параметры можно переопределить в каждом конкретном email-шаблоне. Таким образом для каждого из email-шаблонов можно указать свою вёрстку и настройки логотипа.
Это, конечно, требует отдельной подробной статьи...
Для разработчиков: как добавить свои переменные для e-mail шаблонов Joomla?
Полезны окажутся 2 триггера для плагинов:
onMailBeforeTagsRendering
и onMailBeforeRendering
. onMailBeforeRendering - триггер, который позволяет добавлять свои шорт-коды для строковой замены в плагине. Отдать туда надо массив вида
[ variable_name => variable_value ]
. Из админки свои переменные нужно добавлять уже с фигурными скобками: {variable_name}
заменится на variable_value
. Аргументом $event
плагина является экземпляр класса BeforeRenderingMailTemplateEvent, в котором есть кроме прочих 2 метода: getTemplate()
(получение объекта мейлера, куда можно добавлять свои данные) и getTemplateId()
(получение id шаблона письма вида com_users.registration.admin.new_notification
), по которому мы определяем нужный ли это для нас email-шаблон или нет. Аналогично контексту в контент-плагинах. Также полезное свойство класса для передачи данных из плагина в лейаут письма для рендера -
$layoutTemplateData
. Это ассоциативный массив. ```php
// Получаем текущий мейлер
$mailTemplate = $event->
getTemplate()
;$data = [
'
variable_name
' => 'variable_value'];
// с Joomla 4 для всех типов писем. 2-й аргумент - plain - текстовый формат письма
$mailTemplate->addTemplateData($data, false);
// с Joomla 5.2 - для HTML-писем
$mailTemplate->addLayoutTemplateData($data);
// пример из ядра Joomla
// Add additional data to the layout template
$this->addLayoutTemplateData([
'siteName' => $app->get('sitename'),
'lang' => substr($this->language, 0, 2),
]);
```
onMailBeforeTagsRendering - триггер, который добавляет ваши переменные в список доступных переменных для замены в окне редактирования email шаблона Joomla. Отдать туда нужно тот же самый массив, который отдавали в предыдущем триггере.
@webtolkru
#joomla #разработка #php #development #webdev
Совет по Joomla: метод debug() для отладки лейаутов
В Joomla есть понятие layout. Это кусочек вёрстки, который можно многажды использовать в любом месте сайта: как в панели администратора, так и во фронтенде. Можно рассматривать лейауты как оторванные от контекста элементы дизайна. Находятся они в папке layouts в корне сайта. Также, в случае с модулями они могут находиться в папке
Их можно переопределять в шаблонах, в чём и заключается одна из главных фишек Joomla. Лейауты чаще всего рендерятся с помощью классов
А вот как увидеть какой именно файл переопределения используется? Сколько их вообще есть и по каким путям идёт поиск макетов? Для этого есть метод
Подробнее в посте на Хабре
#разработка #php #development #webdev
В Joomla есть понятие layout. Это кусочек вёрстки, который можно многажды использовать в любом месте сайта: как в панели администратора, так и во фронтенде. Можно рассматривать лейауты как оторванные от контекста элементы дизайна. Находятся они в папке layouts в корне сайта. Также, в случае с модулями они могут находиться в папке
tmpl
модуля. А в случае с плагинами - в tmpl
плагина.Их можно переопределять в шаблонах, в чём и заключается одна из главных фишек Joomla. Лейауты чаще всего рендерятся с помощью классов
LayoutHelper
или напрямую FileLayout
. А вот как увидеть какой именно файл переопределения используется? Сколько их вообще есть и по каким путям идёт поиск макетов? Для этого есть метод
debug()
(и у LayoutHelper и у FileLayout).Подробнее в посте на Хабре
#разработка #php #development #webdev
SW JProjects v.2.3.0 - обновление менеджера цифровых проектов для Joomla разработчиков
Компонент позволяет разработчикам сайтов на Joomla вести свой собственный сервер обновлений для своих расширений Joomla (шаблонов, модулей, плагинов etc), что позволяет доносить обновления сразу всем своим клиентам. Возможность скачивания по лицензионным ключам.
👩💻 v.2.3.0. Что нового?
Поле домен для ключа. В форму создания ключа добавлено поле домен. Поле хранится в отдельной ячейке таблицы базы данных.
Новый раздел: ключи пользователя. Во фронтенд добавлен новый раздел - ключи пользователя. Вы можете создать пункт меню для пользователя, где он сможет увидеть список всех своих лицензионных ключей. Раздел доступен только авторизованным пользователям сайта.
Мелкие исправления и рефакторинг. Несколько мелких исправлений ошибок и улучшений.
Страница расширения
GitHub расширения
Joomla Extensions Directory
@joomlafeed
#расширения #joomla #php #разработка #development
Компонент позволяет разработчикам сайтов на Joomla вести свой собственный сервер обновлений для своих расширений Joomla (шаблонов, модулей, плагинов etc), что позволяет доносить обновления сразу всем своим клиентам. Возможность скачивания по лицензионным ключам.
Поле домен для ключа. В форму создания ключа добавлено поле домен. Поле хранится в отдельной ячейке таблицы базы данных.
Новый раздел: ключи пользователя. Во фронтенд добавлен новый раздел - ключи пользователя. Вы можете создать пункт меню для пользователя, где он сможет увидеть список всех своих лицензионных ключей. Раздел доступен только авторизованным пользователям сайта.
Мелкие исправления и рефакторинг. Несколько мелких исправлений ошибок и улучшений.
Страница расширения
GitHub расширения
Joomla Extensions Directory
@joomlafeed
#расширения #joomla #php #разработка #development
Please open Telegram to view this post
VIEW IN TELEGRAM
SW JProjects v.2.4.0 - обновление менеджера цифровых проектов для Joomla разработчиков
Компонент позволяет разработчикам сайтов на Joomla вести свой собственный сервер обновлений для своих расширений Joomla (шаблонов, модулей, плагинов и т.д.), что позволяет доносить обновления сразу всем своим клиентам. Возможность скачивания по лицензионным ключам.
👩💻 v.2.4.0. Что нового?
Плагин логирования действий пользователя. Добавлен плагин группы Лог действий, записывающий все основные действия пользователя в компоненте SW JProjects в лог действий пользователя.
Мультиязычность. Улучшена работа компонента (панель администратора) на мультиязычных сайтах.
Исправление ошибок и рефакторинг. Проведен текущий рефакторинг и исправление некоторых ошибок.
Страница расширения
GitHub расширения
Joomla Extensions Directory
@joomlafeed
#расширения #joomla #php #разработка #development
Компонент позволяет разработчикам сайтов на Joomla вести свой собственный сервер обновлений для своих расширений Joomla (шаблонов, модулей, плагинов и т.д.), что позволяет доносить обновления сразу всем своим клиентам. Возможность скачивания по лицензионным ключам.
Плагин логирования действий пользователя. Добавлен плагин группы Лог действий, записывающий все основные действия пользователя в компоненте SW JProjects в лог действий пользователя.
Мультиязычность. Улучшена работа компонента (панель администратора) на мультиязычных сайтах.
Исправление ошибок и рефакторинг. Проведен текущий рефакторинг и исправление некоторых ошибок.
Страница расширения
GitHub расширения
Joomla Extensions Directory
@joomlafeed
#расширения #joomla #php #разработка #development
Please open Telegram to view this post
VIEW IN TELEGRAM