WebTolkRu
99 subscribers
618 photos
72 videos
2 files
643 links
Joomla-разработчик. Контрибьютер ядра Joomla. https://web-tolk.ru. Разработка Joomla на заказ. Также пишу в @JoomlaFeed.
@sergeytolkachyov Хабр: https://habr.com/ru/users/sergeytolkachyov/posts/
Download Telegram
👩‍💻 Совет по Joomla: как указать форму слова в зависимости от количества
Например, при создании способа доставки вы хотите показывать "дня", "дней" в зависимости от количества дней: "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 и выполнить команду:
php /path/to/site/public_html/cli/joomla.php scheduler:run

Если требуется запустить конкретную задачу, то посмотреть список можно с помощью команды
php /path/to/site/public_html/cli/joomla.php scheduler:list

а затем запустить задачу по её id
php /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(). В геттере (getCurrentUser()) под капотом проверяется назначен ли текущий пользователь и если нет, то он получается из объекта Приложения.

👩‍💻 Как использовать трейт CurrentUserTrait в Joomla?
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 и поэтому получившую префикс "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
👍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
👍6❤1
Forwarded from Joomla Feed (Sergey Tolkachyov)
Нужно ли в PHP перед вызовом функций ставить обратный слэш? Статья на Хабре.
Вышла статья, в которой освещается простой способ ускорить работу своего 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
👩‍💻 Совет по Joomla: расположение полей Form в параметрах модулей и плагинов.

Обычно поля настроек модулей и плагинов идут столбиком - сверху вниз. Название поля находится слева, а само поле - справа. В вёрстке админки мы видим 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
👩‍💻 Совет по Joomla: значение переменной по умолчанию с помощью класса Joomla\Registry\Registry.
Очень часто в 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
👍2🔥1
👩‍💻 Компонент просмотра логов Joomla View logs v.2.3.0.
Компонент просмотра сохраненных логов ядра и расширений Joomla.

Что нового?
1️⃣ Новый параметр компонента. В настройках добавлена возможность отключить показ лога PHP. Добавлено сообщение о невозможности удалить лог PHP со страницы списка логов. Кнопкам "архивации" и "удалить" добавлен атрибут disabled для лога PHP.
2️⃣ Ссылка на скачивание.
Добавлена ссылка на скачивание zip-архива в сообщении об архивации лога.
3️⃣ Различные исправления.
Исправлен путь чтения для лога PHP. Исправлены ссылки для скачивания логов в формате csv со страницы списка логов. Исправлено скачивание логов в формате csv со страницы логов (ранее логи скачивались с html-кодом шаблона). Исправлен перевод заголовков столбцов таблицы лога.

👩‍💻❤️ Большое спасибо за работу участнику Joomla-сообщества @jetfox_2nd!

Страница расширения
GitHub расширения

@webtolkru

#joomla #php #logs #dev #разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from Joomla Feed (Sergey Tolkachyov)
👩‍💻 Морфологическая библиотека Morphos для Joomla.

Библиотека предназначена для разработчиков. Склоняет имена собственные, названия географических объектов, склонение и плюрализация имен собственных и другое.
Работает с русским и английским языками.
Пример задачи для библиотеки:
$name = Morphos::inflectName('Иванов Петр', 'родительный'); //склонение имени
$gender = Morphos::detectGender('Петя Канаков'); //определение поля по имени

Данное расширение "оборачивает" оригинальную библиотеку в Joomla-расширение для удобного штатного обновления библиотеки и подключения её в свои расширения.
Мейнейнер Joomla-расширения - участник нашего сообщества Дмитрий Денисов (@mitriy_bug).

- Страница расширения
- Github библиотеки

#joomla #расширения #dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1