WebTolkRu
99 subscribers
619 photos
72 videos
2 files
644 links
Joomla-разработчик. Контрибьютер ядра Joomla. https://web-tolk.ru. Разработка Joomla на заказ. Также пишу в @JoomlaFeed.
@sergeytolkachyov Хабр: https://habr.com/ru/users/sergeytolkachyov/posts/
Download Telegram
Работа - не волк, в лес не убежит. Она как ручная, ходит за тобой везде 😂
👍4👀2
О строгости кода

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

class LoyaltyCard
{
public function setLevel(LoyaltyLevel $level): void
{
if (!$this->isGuestBound()) {
throw new \DomainException('Невозможно установить уровень карты при отсутствии привязанного гостя');
}

if ($level->getProgramId() !== $this->programId) {
throw new \DomainException('Невозможно установить уровень карты от другой программы лояльности');
}

if (!$this->guestProfileFilled) {
throw new \DomainException(
'Невозможно изменить уровень карты лояльности при незаполненном профиле гостя',
);
}

if (null !== $this->level && $this->level->getRequiredAmount() > $level->getRequiredAmount()) {
throw new \DomainException('Уровень карты не может быть понижен');
}

if (null !== $this->level && $this->level->getId() === $level->getId()) {
throw new \DomainException('Карте лояльности уже присвоен этот уровень');
}

//...
}
}


Довольно часто коллеги приходят ко мне с вопросом, можно ли им выпилить из моего кода ту, или иную конструкцию throw. Еще хуже, когда они не спрашивают, а выпиливают выброс исключения молча (см. пост выше о замалчивании ошибок).

На каждый такой вопрос я отвечаю отрицательно и поясняю, что:

🍀 Каждая конструкция throw - это выражение средствами языка PHP бизнес-требований, продиктованных заказчиком.

🍀 Демонтаж throw - это не только демонтаж бизнес-логики, но и ослабление строгости кода в угоду сиюминутной потребности.

🍀 Если метод не выполняется так, как вы ожидаете, и плюется исключениями, вы должны решать эту проблему в клиентском коде (т. е. в том, который вы пишите).

Давайте разберемся чуть подробнее. Класс \DomainException является прямым наследником \LogicException, в описании которого сказано:

This kind of exception should lead directly to a fix in your code.


То есть:

⚙️ Если вы написали код, который приводит к выбросу \LogicException и его наследников, вы исправляете свой код (а не тот, который бросает exception).

⚙️ Тот, кто написал класс или метод, который вы используете, не предполагает его использование тем способом, который вы выбрали.

⚙️ Исключения, выбрасываемые методом, являются частью контракта, такой же, как тип возвращаемого значения.

В следующем посте расскажу о том, почему строгий код лучше, чем нестрогий.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Forwarded from Joomla Feed (Sergey Tolkachyov)
👩‍💻 Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях.
На старте его сайт на Joomla 3 вообще не смог обновиться на Joomla 5. Пришлось делать экспорт/импорт материалов. Проделав всё это он запустил-таки этот объём данных на Joomla 5. Тестовый скрипт грузил 200 материалов из этого объёма всего за 94 секунды ))) А главная страница с категориями грузилась 20 секунд.

Добавив индекс для таблицы #__content
CREATE INDEX idx_catid_state ON #__content (catid, state);

он сократил время загрузки категорий до 1 секунды. Затем наш герой решил поковырять SQL-запрос в ArticleModel, который отвечает за выборку материалов. И решил заменить тип JOIN на STRAIGHT_JOIN для категорий.
// ->from($db->quoteName('#__content', 'a'))
->from(
$db->quoteName('#__content', 'a')
. ' STRAIGHT_JOIN ' . $db->quoteName('#__categories', 'c')
. ' ON ' . $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid')
)
// ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))

Что сократило загрузку 200 материалов из 150к с 94 секунд до 5. К слову сказать, боевой сайт на Joomla 3 крутится на 12CPU 64GB рамы. А все манипуляции с кодом он делает на базовом 1CPU 1GB сервере и замеры скорости даны именно для базового сервера.

Но это всё в дискуссии, хотя в идеале должно вылиться в Pull Requests.

Мы - Open Source сообщество, где никто никому ничего не должен. Джунгли. Но человек ищет пути оптимизации Joomla и предлагает решения. Если оказать поддержку и предложить помощь хотя бы с тестированием самых разнообразных сценариев, то возможно эти улучшения смогут войти в ядро. Пусть не быстро, пусть через несколько лет, пусть не все, но войдут. Достаточно предложить руку помощи и приложить немного усилий.

Дискуссию на GitHub можно почитать здесь.

@joomlafeed

#joomla #community #php
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
👩‍💻 Яндекс завершил поддержку скрипта Share2.
Долгое время на сайтах использовались кнопки "поделиться" в соц.сетях. Одним из таких скриптов был Share2 от Яндекса. Сам его использую в своём блоге на сайте и у некоторых клиентов. Сегодня решил проверить нет ли чего нового на странице документации и обнаружил, что страница удалена, но все еще присутствует в индексе поисковой системы. Тех.поддержка ответила, что проект закрыт. Таким образом и мой плагин WT Yashare2 теряет свою актуальность. Он ещё работает с акцентом на слове "ещё".

#яндекс #joomla
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯2
Forwarded from Joomla Feed (Sergey Tolkachyov)
Media is too big
VIEW IN TELEGRAM
👩‍💻 SW JProjects v.2.6.0 - компонент каталога расширений для Joomla.
Компонент позволяет сделать свой мини-Joomla Extensions Directory - каталог расширений для CMS (не только для Joomla) или файлов. Есть возможность скачивания по лицензионным ключам.

👩‍💻 v.2.6.0. Что нового?
Этот релиз прежде всего связан с SEO и AI-оптимизацией.
- Микроразметка Schema.org.
Добавлен плагин микроразметки Schema.org для сущностей компонента. Для списков используется ListItem, для страницы проекта и версии - SoftwareApplication, для страницы документации - TechArticle. Плагин группы schemaorg в отличие от стандартных плагинов заполняет данные автоматически, но встраивает данные в граф сущностей микроразметки Joomla. Также исправляется одна ошибка генерируемой ядром микроразметки в зоне ответственности компонента.
- Улучшение поиска по ключам. В панели администратора в списке ключей теперь можно искать по номеру заказа, email, домену, содержимому примечания к ключу.
- Список ключей в админке. В списке ключей в панели администратора добавлен вывод домена и примечания
- Поиск в списке проектов. Поиск в списке проектов в панели администратора стал более точным. Из полей для поиска убраны лишние поля.

Компонент работает на Joomla 6 без включённого плагина обратной совместимости.

Страница расширения и скачать
GitHub расширения.
Joomla Extensions Directory

#joomla #расширения
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Forwarded from Joomla Feed (Sergey Tolkachyov)
👩‍💻 Кому принадлежит ваша CMS?
Несколько адаптированный перевод статьи одного из основателей Joomla - Брайана Тимена. Сохранён tone of voice автора.

Читаем на Хабре

@joomlafeed

#joomla #community
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Forwarded from Dmitriy Vasyukov
Список товаров RadicalMart - Версия 2.0.0

- макеты Uikit переписаны с использование Bootstrap
- добавлена настройка использования макетов компонента вместо макетов модуля
- макет default переименован в list
- удалена настройка Количество колонок
- актуализированы настройки сортировки

Совместимость только с RadicalMart 3.

В связи с изменением настроек рекомендуется пересохранить настройки модуля, проверить названия макетов и верстку в переопределениях.

Расширение распространяется бесплатно. Поддержка функционала из коробки бесплатна и осуществляется только свободное от работы время в рабочие дни. Настойчивые требования и все претензии будут полностью игнорированы. Возможна доработка функционала под необходимые требования на платной основе.

https://sovmart.ru/catalog/radicalmart/modules/spisok-tovarov-radicalmart
👍2
Forwarded from Joomla Feed (Sergey Tolkachyov)
FancyBox для изображений материалов плагин для Joomla.

Плагин добавляет ссылку на модальное окно FancyBox к изображениям материалов. В параметрах плагина можно выбрать один из двух параметров обработки изображений:
1. когда задана ширина. Срабатывает, когда тегу img задан параметр width и он меньше, чем реальный размер изображения
2. по классу. Напишите классы изображений, которые нужно обработать. Можно написать несколько классов через запятую.

Разработчик - участник нашего сообщества Дмитрий Денисов (@mitriy_bug).

Скрипты FancyBox подключаются самостоятельно, либо с помощью плагина WT Fancybox.js.
Также следует помнить, что Fancybox.js распространяется автором (Fancyapps) под коммерческой лицензией. Для использования его на своих сайтах вы должны ознакомиться с лицензионным соглашением и приобрести лицензию согласно одному из тарифных планов Fancyapps, чтобы использовать его на своих сайтах без возможных юридических последствий.

- Скачать плагин FancyBox для изображений материалов плагин
- Плагин веб-ассета WT Fancybox.js
- Цены на тарифы Fancybox.js

#joomla #расширения
👍4🔥1
Forwarded from Joomla Feed (Sergey Tolkachyov)
This media is not supported in your browser
VIEW IN TELEGRAM
👩‍💻 joomLab Calculator - модуль создания калькулятора для Joomla.

Модуль joomLab Calculator позволит создавать простые калькуляторы на Вашем сайте под управлением CMS Joomla и получать расчеты от пользователей на E-mail.

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

Модуль работает на Joomla 5 и Joomla 6. Для расчетов модуль использует библиотеку Math Executor, поэтому Вы можете использовать любые, доступные в библиотеке, математические операторы.

Разработчик - участник нашего сообщества Александр Новиков (@pro_portal).

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

@joomlafeed

#joomla #расширения
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Аддон - Доп.информация о Производителе на странице товара JoomShopping 5+
При помощи аддона - 1.0 можно:
1. Вывести отдельный блок информации о Производителе в любом месте на странице товара.
2. В блоке Производителя сможете показать:
1) Название производителя;
2) Логотип производителя;
3) Краткое описание производителя;
4) Полное описание производителя;
5) Специальное (для стр.товара) описание производителя;
6) Ссылки на списки товаров (по категориям) производителя;
7) Ссылку на все товары производителя.
*Внимание: Вывод логотипа Производителя на странице товара по умолчанию в аддоне отключен! Логотип выводиться в блоке дополнительной информации о Производителе. #НОВОЕ
👍2
Forwarded from Joomla Feed (Dmitrijs Rekuns)
🚀 Вышли релизы Joomla 6.0.1 и 5.4.1⚡️

Проект Joomla рад сообщить о выпуске Joomla 6.0.1 и Joomla 5.4.1. Это релиз исправлений ошибок и улучшений для серии Joomla 6.1 и Joomla 5.4.

https://joomlaportal.ru/news/release-news/vyshli-relizy-bezopasnosti-joomla-5-3-4-i-joomla-4-4-15
👍1
Forwarded from Joomla Feed (Sergey Tolkachyov)
👩‍💻 Русская локализация для Joomla 6.0.1
Вышла официальная русская локализация Joomla 6.0.1 и Joomla 5.4.1.
Перевод готовится силами участников сообщества. Присоединиться к процессу перевода может любой желающий и тем самым ускорить выход релиза. Работа ведётся на GitHub https://github.com/JPathRu/localisation

Спасибо за перевод участнику сообщества @kostelano

- Скачать пакеты локализации с Joomlaportal
- Скачать с GitHub
- - Русская локализация Joomla 6.0.1
- - Русская локализация Joomla 5.4.1
@joomlafeed

#локализация
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
👩‍💻 Обновлено расписание выхода релизов Joomla 5.4 и Joomla 6.

Добавил в плане развития Joomla на Joomlaportal актуальную информацию по датам выхода релизов. Известна дата выхода Joomla 6.1.

Актуализировал данные и поправил некоторые битые ссылки на странице русской локализации Joomla.

До кучи добавил информацию о последних версиях Joomla в Wikidata (из неё подтягиваются стандартизированные данные на все языковые версии статей википедии) и на русской странице Joomla в Wikipedia.

@webtolkru

#joomla #community
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Обновился до Joomla 6.0.1. Выдохнули.

Если что-то где-то поломалось - пишите.

@webtolkru

#joomla
👍2
Forwarded from Joomla Feed (Sergey Tolkachyov)
This media is not supported in your browser
VIEW IN TELEGRAM
👩‍💻 WT AmoCRM - RadicalMart плагин интеграции интернет-магазина на Joomla с CRM.
Плагин умеет отправлять данные заказа из Joomla компонента интернет-магазина RadicalMart в AmoCRM, а так же оставлять примечания к сделке при смене статуса заказа (выберите необходимые статусы заказа RadicalMart в настройках плагина).

Возможности плагина
- создание сделок в AmoCRM в момент создания заказа в интернет-магазине RadicalMart
- выбор воронки AmoCRM, в которой создавать сделки
- выбор тега, которым будут помечаться созданные сделки
- в комментарий к сделке при создании заказа пишутся:
-- точная общая сумма заказа (Amo CRM не принимает дробные значения в поле бюджет, например с копейками)
-- статус заказа
-- информация о доставке (способ, адрес и комментарий)
-- информация о способе оплаты
-- контактные данные покупателя (могут отличаться от данных пользователя, создавшего заказ. Например, если доставка для другого человека)
-- прямая ссылка на заказ в панели администрирования сайта
-- список товаров заказа (опционально)
добавление комментария к сделке при изменении статуса заказа в интернет-магазине RadicalMart (выберите необходимые статусы заказа в настройках плагина)
-- добавляет в интерфейс просмотра заказа ссылку на сделку в AmoCRM, если таковая обнаружена (соответствие заказов и сделок хранится в базе данных)
-- UTM-метки для сделки. Указывает, если на сайте используется комплект плагинов RadicalForm и WT AmoCRM - RadicalForm.

Для работы плагина необходима установка и настройка библиотеки WT Amo CRM library для Joomla версии 1.3.0 и выше.


Плагин бесплатный. Тестировался на Joomla 5.4 и RadicalMart 2.2.4.

Страница расширения и скачать

Так же:
- Интернет-магазин RadicalMart
- WT Amo CRM библиотека интеграции Joomla и AmoCRM
- RadicalForm плагин обратной связи
- WT AmoCRM - RadicalForm - плагин отправки сообщений из RadicalForm в AmoCRM

@joomlafeed

#joomla #crm #amocrm #radicalmart
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
WT Contact anywhere with fields v.1.1.1
Вставляйте контакты Joomla везде, где работают плагины контента. Используйте шорт-код {wt_contact_wf contact_id=XXXX tmpl=XXXX}. Создавайте собственные макеты вывода в папке tmpl плагина. Также показывает блок информации об авторе в материалах Joomla.
Список изменений
- Joomla 6. Улучшение совместимости с Joomla 6, правка ошибок.
Подробнее
👍1
WT YooKassa PHP библиотека для Joomla v.3.11.1
Официальная PHP библиотека платёжного сервиса YooKassa, "обёрнутая" в пакет для использования в Joomla 4 и 5. Для разработчиков PHP Joomla.
Список изменений
- v.3.11.1. Обновление библиотеки до v.3.11.1
Подробнее
👍4🔥1
Media is too big
VIEW IN TELEGRAM
Саратов. Карл Орф. Последний, 24-й номер кантаты "Carmina Burana" плавно перетекает в знаменитый хор "O, Fortuna!"

Поделюсь немного не-айтишными впечатлениями)
👍5😱1
👩‍💻 [ВИДЕО] AmoCRM + Joomla: быстрая настройка интеграции. Библиотека WT AmoCRM.
Как быстро настроить интеграцию AmoCRM и сайта на Joomla? - использовать PHP библиотеку WT AmoCRM для Joomla, которая предполагает использование её разработчиками. А разработчики могут написать любое количество плагинов и решений по интеграции и автоматизации AmoCRM и Joomla.

Смотреть на:
- Youtube
- Rutube
- VK Видео

👩‍💻 Содержание:
00:15 - что такое эта библиотека и как она работает? Тех.ликбез.
03:00 - установка с сайта или с GitHub
04:00 - собственно установка и настройка интеграции.
05:10 - создание внешней интеграции в интерфейсе AmoCRM
08:05 - что-то пошло не так... Почему и как исправить (случай с пересозданием интеграции)
08:48 - успешное подключение к AmoCRM
11:11 - как понять что всё работает?
11:50 - демонстрация работы: отправка заказа из компонента интернет-магазина RadicalMart в AmoCRM
14:20 - потенциальные возможности по автоматизации бизнес-процессов в связке Joomla с AmoCRM

Скачать с сайта
Скачать с GitHub

Есть ряд готовых решений для интеграции:
- JoomShopping - Joomla компонент интернет-магазина
- RadicalMart - Joomla компонент интернет-магазина
- RadicalForm - Joomla плагин формы обратной связи

@webtolkru

#joomla #crm #amocrm #php #разработка #webdev #development
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3