Например, при создании способа доставки вы хотите показывать "дня", "дней" в зависимости от количества дней: "3 дня", но "5 дней".
Для этого воспользуйтесь методом
Text::plural() в Joomla.PHP файл:
use Joomla\CMS\Language\Text;
// Сколько дней будет идти посылка
$period_max = 5;
/**
* Подключаем файл с языковыми константами для вывода "дней" в падежах
*/
$lang = Factory::getApplication()->getLanguage();
// Системное имя расширения
$extension = 'lib_webtolk_libraryname';
// JPATH_SITE для языковых файлов фронтенда
$base_dir = JPATH_SITE;
// Код языка
$language_tag = 'ru-RU';
// Принудительная загрузка указанного языка
$reload = true;
// Загружаем все языковые константы из файла локализации
$lang->load($extension, $base_dir, $language_tag, $reload);
?>
Срок доставки: <?php echo $period_max .' '.Text::plural('WT_SHIPPING_DAY', $period_max); ?>
Для того, чтобы это работало - ваше расширение должно иметь локализацию (языковые файлы) по канонам Joomla.
Языковой *.ini файл (локализация):
WT_SHIPPING_DAY_0 = "дней"
WT_SHIPPING_DAY_1 = "день"
WT_SHIPPING_DAY_2 = "дня"
WT_SHIPPING_DAY_MORE = "дней"
#joomla #php #cookbook #dev #web #wevdev
@webtolkru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Запуск выполнения задач планировщика задач Joomla из консоли (CLI)
Чтобы запустить выполнение задач планировщика с помощью CLI Вам нужно подключиться к своему серверу по SSH и выполнить команду:
Если требуется запустить конкретную задачу, то посмотреть список можно с помощью команды
а затем запустить задачу по её
@webtolkru
#joomla #php #cli #dev #webdev
Чтобы запустить выполнение задач планировщика с помощью CLI Вам нужно подключиться к своему серверу по SSH и выполнить команду:
php /path/to/site/public_html/cli/joomla.php scheduler:run
Если требуется запустить конкретную задачу, то посмотреть список можно с помощью команды
php /path/to/site/public_html/cli/joomla.php scheduler:list
а затем запустить задачу по её
idphp /path/to/site/public_html/cli/joomla.php scheduler:run --id=XXX
@webtolkru
#joomla #php #cli #dev #webdev
👍1
Получение объекта текущего пользователя - CurrentUserTrait в Joomla 4.2+
Трейты - фрагменты кода, оторванные от контекста и их можно использовать в самых разных местах. Они добавляют свои методы к вашим собственным классам. Так, при разработке расширений порой нужно работать с текущим пользователем сайта: гость он или авторизованный? Если авторизованный, то к какой группе доступа принадлежит? И так далее.
Начиная с Joomla 4.2 в ядре появился трейт CurrentUserTrait, который добавляет к классу вашего плагина, хелпера и т.д. - 2 метода getCurrentUser() и setCurrentUser(). В геттере (
👩💻 Как использовать трейт CurrentUserTrait в Joomla?
И таким образом можно меньше следить за актуальностью кодовой базы на данном участке, так как тут используется функционал ядра.
@webtolkru
#php #joomla #разработка #development #dev #webdev
Трейты - фрагменты кода, оторванные от контекста и их можно использовать в самых разных местах. Они добавляют свои методы к вашим собственным классам. Так, при разработке расширений порой нужно работать с текущим пользователем сайта: гость он или авторизованный? Если авторизованный, то к какой группе доступа принадлежит? И так далее.
Начиная с Joomla 4.2 в ядре появился трейт CurrentUserTrait, который добавляет к классу вашего плагина, хелпера и т.д. - 2 метода getCurrentUser() и setCurrentUser(). В геттере (
getCurrentUser()) под капотом проверяется назначен ли текущий пользователь и если нет, то он получается из объекта Приложения. use Joomla\CMS\User\CurrentUserTrait;
final class Wtcategory extends FieldsPlugin implements SubscriberInterface
{
use DatabaseAwareTrait;
use CurrentUserTrait;
public function MyMethod()
{
$user = $this->getCurrentUser();
}
}
И таким образом можно меньше следить за актуальностью кодовой базы на данном участке, так как тут используется функционал ядра.
@webtolkru
#php #joomla #разработка #development #dev #webdev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from Joomla Feed (Sergey Tolkachyov)
Обновление Radical Multifield, Quantum Manager, JIntervention Image
👩💻 Quantum Manager - альтернатива штатному файловому менеджеру Joomla. Представляет удобный интерфейс работы с файлами, изображениями.
👩💻 Radical Multifield - плагин пользовательского поля для Joomla, с помощью которого можно создать слайдер, слайдшоу, таблицы, аудиоплееры и многое другое без сложных компонентов. Если установлен Quantum Manager, то плагин поля позволяет загружать изображения drag-n-drop и менять их размер, создавая миниатюры, в том числе добавляя водяные знаки.
👩💻 Оба этих расширения используют PHP библиотеку Intervention Image, обёрнутую в расширение Joomla и поэтому получившую префикс "
⚠️ Разработчикам, использующим эту библиотеку в своих расширениях следует проверить работоспособность своего кода, так как обновление мажорной версии расширения (1-го числа в версии) означает смену API и старый код может не работать.
Joomla 4.2.7+, PHP 8+.
- Quantum Manager (GitHub)
- Radical Multifield (GitHub)
- JIntervention Image (GitHub)
#joomla #расширения #dev
J". Библиотека предоставляет разработчикам удобный инструментарий для обработки изображений. Поскольку впервые за долгое время была обновлена библиотека с версии 2.7.2 до версии 3.11, потребовалось внести изменения и в код мультиполя и файлового менеджера. ⚠️ Разработчикам, использующим эту библиотеку в своих расширениях следует проверить работоспособность своего кода, так как обновление мажорной версии расширения (1-го числа в версии) означает смену API и старый код может не работать.
Joomla 4.2.7+, PHP 8+.
- Quantum Manager (GitHub)
- Radical Multifield (GitHub)
- JIntervention Image (GitHub)
#joomla #расширения #dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Norrnext
Quantum Manager - Modern File and Media Manager for Joomla
A brand-new media and file manager for Joomla. Flexible settings, ACL, auto resize, in-built cropping and Unsplash support. Front-end side.
👍4
Создание каталога расширений на SW JProjects. Видео.
На Youtube-канале Code Along Joomla коллега из Joomla-чата обнаружил видео-инструкцию Building a platform for a developer to release their own software. Разработчикам предлагается построить собственный каталог расширений на Joomla. В качестве основы используется компонент SW JProjects - наше отечественное детище. Первый его автор - Joomla-разработчик Игорь Бердичевский. А теперь (с версии 1.7.0) этот компонент на моём попечении.
@webtolkru
#joomla #dev #webdev #community
На Youtube-канале Code Along Joomla коллега из Joomla-чата обнаружил видео-инструкцию Building a platform for a developer to release their own software. Разработчикам предлагается построить собственный каталог расширений на Joomla. В качестве основы используется компонент SW JProjects - наше отечественное детище. Первый его автор - Joomla-разработчик Игорь Бердичевский. А теперь (с версии 1.7.0) этот компонент на моём попечении.
@webtolkru
#joomla #dev #webdev #community
👍6❤1
Forwarded from Joomla Feed (Sergey Tolkachyov)
Нужно ли в PHP перед вызовом функций ставить обратный слэш? Статья на Хабре.
Вышла статья, в которой освещается простой способ ускорить работу своего PHP кода. А именно - использовать обратные слеши перед вызовом некоторых функций PHP. В этом случае интерпретатор PHP не будет тратить лишнее время на определение того, используется ли встроенная функция языка или ваша собственная в контексте вашего класса (например, в плагине).
Для отдельно взятой функции речь, конечно, идёт о настолько мизерных значениях ускорения, что казалось бы ими можно пренебречь. Но на больших сложных проектах, где вызовов функций в процессе работы Приложения очень и очень много - это может дать уже довольно ощутимый результат.
Читаем статью, а бонусом к ней добавим список из 34 функций PHP, использование обратных слешей для которых может существенно ускорить выполнение вашего PHP кода.
- strlen
- is_null
- is_bool
- is_long
- is_int
- is_integer
- is_float
- is_double
- is_string
- is_array
- is_object
- is_resource
- is_scalar
- boolval
- intval
- floatval
- doubleval
- strval
- defined
- chr
- ord
- call_user_func_array
- call_user_func
- in_array
- sizeof
- get_class
- get_called_class
- gettype
- func_num_args
- func_get_args
- array_slice
- array_key_exists
- sprintf
- clone
Список меняется от версии к версии PHP, его можно посмотреть в исходниках Zend, в файле zend_compile.c функция zend_try_compile_special_func_ex().
@joomlafeed
#joomla #php #разработка #dev
Вышла статья, в которой освещается простой способ ускорить работу своего PHP кода. А именно - использовать обратные слеши перед вызовом некоторых функций PHP. В этом случае интерпретатор PHP не будет тратить лишнее время на определение того, используется ли встроенная функция языка или ваша собственная в контексте вашего класса (например, в плагине).
defined('_JEXEC') or die();
// или
\defined('_JEXEC') or die();Для отдельно взятой функции речь, конечно, идёт о настолько мизерных значениях ускорения, что казалось бы ими можно пренебречь. Но на больших сложных проектах, где вызовов функций в процессе работы Приложения очень и очень много - это может дать уже довольно ощутимый результат.
Читаем статью, а бонусом к ней добавим список из 34 функций PHP, использование обратных слешей для которых может существенно ускорить выполнение вашего PHP кода.
- strlen
- is_null
- is_bool
- is_long
- is_int
- is_integer
- is_float
- is_double
- is_string
- is_array
- is_object
- is_resource
- is_scalar
- boolval
- intval
- floatval
- doubleval
- strval
- defined
- chr
- ord
- call_user_func_array
- call_user_func
- in_array
- sizeof
- get_class
- get_called_class
- gettype
- func_num_args
- func_get_args
- array_slice
- array_key_exists
- sprintf
- clone
Список меняется от версии к версии PHP, его можно посмотреть в исходниках Zend, в файле zend_compile.c функция zend_try_compile_special_func_ex().
@joomlafeed
#joomla #php #разработка #dev
1👍4❤1
Обычно поля настроек модулей и плагинов идут столбиком - сверху вниз. Название поля находится слева, а само поле - справа. В вёрстке админки мы видим
div.control-group, в котором находятся label и поле. Посмотрим как можно просто кастомизировать админку.Название поля НАД полем - parentclass="stack".
Если в XML-манифесте модуля или плагина добавить к полю атрибут
parentclass, то мы можем указывать любые CSS-стили для div.control-group. Если указать CSS-класс stack, то название поля встанет над самим полем. Это удобно для больших сабформ - экономится место на экране.<field type="text"
name="map_center"
label="MOD_WTYANDEXMAPITEMS_MAP_CENTER"
description="MOD_WTYANDEXMAPITEMS_MAP_CENTER_DESC"
default="51.533562, 46.034266"
hint="51.533562, 46.034266"
parentclass="stack"
/>
2 и более полей в ряд в параметрах модуля/плагина - классы span-*
Мы можем 2 или 3 небольших поля поставить рядом (для десктопов).
Табы настроек являются grid-сеткой из 4-х колонок. Для поля можно указать ширину в виде количества колонок. Нам нужно в
parentclass добавить класс span-*-inline. Допустимы числа от 1 до 4. span-1-inline - поле будет шириной в 1 колонку сетку. span-4-inline - ширина в 4 колонки, равносильно поведению по умолчанию.Этот код выведет 2 поля в админке в параметрах модуля рядом на десктопах. Поскольку используется также класс
stack - название поля будет над самим полем.<field type="list"
name="map_zoom"
label="MOD_WTYANDEXMAPITEMS_MAP_ZOOM"
default="7"
parentclass="stack span-2-inline"
filter="integer">
<option value="0">0</option>
<option value="1">1</option>
<option value="21">21</option>
</field>
<field type="list"
name="map_type"
label="MOD_WTYANDEXMAPITEMS_MAP_TYPE"
parentclass="stack span-2-inline"
default="scheme">
<option value="scheme">MOD_WTYANDEXMAPITEMS_MAP_TYPE_MAP</option>
<option value="satellite">MOD_WTYANDEXMAPITEMS_MAP_TYPE_SATELLITE</option>
</field>
@webtolkru
#joomla #php #webdev #dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍6❤1👏1
Sergey Tolkachyov
А к этому посту добавил немного описания и скриншотов чуть-чуть для наглядности.
Читать статью на сайте
@webtolkru
#joomla #php #webdev #dev
Читать статью на сайте
@webtolkru
#joomla #php #webdev #dev
1👏2🔥1
Очень часто в Joomla мы видим, что данные приходят не в виде массива или простого объекта (
stdClass), а их нужно получать с помощью метода get(). Например, в плагине или модуле:$option = $this->params->get('my_option');Это означает, что мы получили данные в виде объекта
Joomla\Registry\Registry. Возможность указать значение переменной по умолчанию. Лично для меня первое и самое важное - это возможность указать значение переменной по умолчанию, если его (значения) в параметрах нет.
Вы выпускаете новую версию своего мега-плагина и вводите в него новую опцию
my_option. Мы используем её везде в PHP коде. Однако, мы же понимаем, что люди обновятся, а обновлять настройки плагина не полезут. Не полезут до тех пор, пока не станет любопытно "а что же там нового?" или что-нибудь не отвалится. И пока они не установят новый параметр и не сохранят настройки плагина - в коде он так и не появится.Чтобы ничего не отвалилось нам в коде нужно предположить сценарий по умолчанию, которому, соответственно, нужны значения параметров по умолчанию. Вот тут нам и поможет класс
Registry.$myOption = $this->params->get('my_option', 'default_value_if_null_or_not_exists'); // string по умолчаниюИ теперь нам не надо писать свои проверки на наличие переменной и её пустоту, а так же вы всегда уверены, что получите вменяемое значение для работы в коде. По умолчанию можно указать что угодно. Чаще всего это какая-нибудь строка, число, массив.
$myOption = $this->params->get('my_option'); // null, если не найдено
$myOption = $this->params->get('my_option', []); // пустой массив по умолчанию
$myOption = $this->params->get('my_option', 100500); // ставка за час работы по умолчанию ;-)
$myOption = $this->params->get('my_option', 'Joomla'); // движок для работы по умолчанию @webtolkru
#joomla #php #webdev #dev #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Вау! Моя новость о выходе Joomla 6 попала в PHP Digest. И, насколько я помню, Joomla там не фигурировала если ни никогда, то довольно много лет!
https://t.me/phpdigest/347
#joomla #webdevelopment #разработка #coding #dev
https://t.me/phpdigest/347
#joomla #webdevelopment #разработка #coding #dev
👍2🔥1
Компонент просмотра сохраненных логов ядра и расширений Joomla.
Что нового?
1️⃣ Новый параметр компонента. В настройках добавлена возможность отключить показ лога PHP. Добавлено сообщение о невозможности удалить лог PHP со страницы списка логов. Кнопкам "архивации" и "удалить" добавлен атрибут disabled для лога PHP.
2️⃣ Ссылка на скачивание.
Добавлена ссылка на скачивание zip-архива в сообщении об архивации лога.
3️⃣ Различные исправления.
Исправлен путь чтения для лога PHP. Исправлены ссылки для скачивания логов в формате csv со страницы списка логов. Исправлено скачивание логов в формате csv со страницы логов (ранее логи скачивались с html-кодом шаблона). Исправлен перевод заголовков столбцов таблицы лога.
Страница расширения
GitHub расширения
@webtolkru
#joomla #php #logs #dev #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from Joomla Feed (Sergey Tolkachyov)
Библиотека предназначена для разработчиков. Склоняет имена собственные, названия географических объектов, склонение и плюрализация имен собственных и другое.
Работает с русским и английским языками.
Пример задачи для библиотеки:
$name = Morphos::inflectName('Иванов Петр', 'родительный'); //склонение имени
$gender = Morphos::detectGender('Петя Канаков'); //определение поля по имениДанное расширение "оборачивает" оригинальную библиотеку в Joomla-расширение для удобного штатного обновления библиотеки и подключения её в свои расширения.
Мейнейнер Joomla-расширения - участник нашего сообщества Дмитрий Денисов (@mitriy_bug).
- Страница расширения
- Github библиотеки
#joomla #расширения #dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1