Forwarded from Александр Карпов
О строгости кода
Продолжая тему исключений, я бы хотел поговорить о строгости кода. Когда я описываю бизнес-логику в доменном слое, мой код изобилует такими местами:
Довольно часто коллеги приходят ко мне с вопросом, можно ли им выпилить из моего кода ту, или иную конструкцию
На каждый такой вопрос я отвечаю отрицательно и поясняю, что:
🍀 Каждая конструкция
🍀 Демонтаж
🍀 Если метод не выполняется так, как вы ожидаете, и плюется исключениями, вы должны решать эту проблему в клиентском коде (т. е. в том, который вы пишите).
Давайте разберемся чуть подробнее. Класс
То есть:
⚙️ Если вы написали код, который приводит к выбросу
⚙️ Тот, кто написал класс или метод, который вы используете, не предполагает его использование тем способом, который вы выбрали.
⚙️ Исключения, выбрасываемые методом, являются частью контракта, такой же, как тип возвращаемого значения.
В следующем посте расскажу о том, почему строгий код лучше, чем нестрогий.
Продолжая тему исключений, я бы хотел поговорить о строгости кода. Когда я описываю бизнес-логику в доменном слое, мой код изобилует такими местами:
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)
На старте его сайт на 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 от Яндекса. Сам его использую в своём блоге на сайте и у некоторых клиентов. Сегодня решил проверить нет ли чего нового на странице документации и обнаружил, что страница удалена, но все еще присутствует в индексе поисковой системы. Тех.поддержка ответила, что проект закрыт. Таким образом и мой плагин 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
Компонент позволяет сделать свой мини-Joomla Extensions Directory - каталог расширений для CMS (не только для Joomla) или файлов. Есть возможность скачивания по лицензионным ключам.
Этот релиз прежде всего связан с 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)
Несколько адаптированный перевод статьи одного из основателей 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
- макеты Uikit переписаны с использование Bootstrap
- добавлена настройка использования макетов компонента вместо макетов модуля
- макет default переименован в list
- удалена настройка Количество колонок
- актуализированы настройки сортировки
Совместимость только с RadicalMart 3.
В связи с изменением настроек рекомендуется пересохранить настройки модуля, проверить названия макетов и верстку в переопределениях.
Расширение распространяется бесплатно. Поддержка функционала из коробки бесплатна и осуществляется только свободное от работы время в рабочие дни. Настойчивые требования и все претензии будут полностью игнорированы. Возможна доработка функционала под необходимые требования на платной основе.
https://sovmart.ru/catalog/radicalmart/modules/spisok-tovarov-radicalmart
👍2
Forwarded from Joomla Feed (Sergey Tolkachyov)
FancyBox для изображений материалов плагин для Joomla.
Плагин добавляет ссылку на модальное окно
1. когда задана ширина. Срабатывает, когда тегу
2. по классу. Напишите классы изображений, которые нужно обработать. Можно написать несколько классов через запятую.
Разработчик - участник нашего сообщества Дмитрий Денисов (@mitriy_bug).
Скрипты FancyBox подключаются самостоятельно, либо с помощью плагина WT Fancybox.js.
Также следует помнить, что
- Скачать плагин FancyBox для изображений материалов плагин
- Плагин веб-ассета WT Fancybox.js
- Цены на тарифы Fancybox.js
#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 позволит создавать простые калькуляторы на Вашем сайте под управлением 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
Forwarded from Sergey Tolkachyov
Перенес статью @Joomjoomjoom об 1М уников на Joomla на Joomlaportal, так как VC уже довольно давно закрыл от индексации статьи некоммерческих аккаунтов. Кто использует эту статью в кейсах - вот ссылка https://joomlaportal.ru/news/community/istoriya-vzljota-i-padeniya-novostnogo-sajta-ot-10-tysyach-do-1-mln-unikov-v-sutki-i-obratno-i-pri-chjom-tut-joomla
Joomlaportal
История взлёта и падения новостного сайта от 10 тысяч до 1 млн уников в сутки и обратно и при чём тут Joomla! - Joomlaportal
История из жизни о том, как сайт-новостник на Joomla смог вырасти до посещаемости до 1 миллиона уникальных посетителей в сутки. Скриншоты статистики и нагрузки сервера. Автор Виталий Куликов
👍2
Аддон - Доп.информация о Производителе на странице товара JoomShopping 5+
При помощи аддона - 1.0 можно:
1. Вывести отдельный блок информации о Производителе в любом месте на странице товара.
2. В блоке Производителя сможете показать:
1) Название производителя;
2) Логотип производителя;
3) Краткое описание производителя;
4) Полное описание производителя;
5) Специальное (для стр.товара) описание производителя;
6) Ссылки на списки товаров (по категориям) производителя;
7) Ссылку на все товары производителя.
*Внимание: Вывод логотипа Производителя на странице товара по умолчанию в аддоне отключен! Логотип выводиться в блоке дополнительной информации о Производителе. #НОВОЕ
При помощи аддона - 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
Проект 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
Joomlaportal
Вышли релизы Joomla 6.0.1 и Joomla 5.4.1 - Joomlaportal
Проект Joomla рад сообщить о выпуске релизов Joomla 6.0.1 и Joomla 5.4.1
👍1
Forwarded from Joomla Feed (Sergey Tolkachyov)
Вышла официальная русская локализация 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 на Joomlaportal актуальную информацию по датам выхода релизов. Известна дата выхода Joomla 6.1.
Актуализировал данные и поправил некоторые битые ссылки на странице русской локализации Joomla.
До кучи добавил информацию о последних версиях Joomla в Wikidata (из неё подтягиваются стандартизированные данные на все языковые версии статей википедии) и на русской странице Joomla в Wikipedia.
@webtolkru
#joomla #community
Please open Telegram to view this post
VIEW IN TELEGRAM
Joomlaportal
План развития (roadmap) Joomla с датами выхода релизов - Joomlaportal
План развития (roadmap) Joomla, графиком выпуска версий с датами, информация о планируемом функционале. Joomla 5, Joomla 6, Joomla Framework
👍2
Forwarded from Joomla Feed (Sergey Tolkachyov)
This media is not supported in your browser
VIEW IN TELEGRAM
Плагин умеет отправлять данные заказа из 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, правка ошибок.
Подробнее
Вставляйте контакты Joomla везде, где работают плагины контента. Используйте шорт-код {wt_contact_wf contact_id=XXXX tmpl=XXXX}. Создавайте собственные макеты вывода в папке tmpl плагина. Также показывает блок информации об авторе в материалах Joomla.
Список изменений
- Joomla 6. Улучшение совместимости с Joomla 6, правка ошибок.
Подробнее
👍1
Media is too big
VIEW IN TELEGRAM
Саратов. Карл Орф. Последний, 24-й номер кантаты "Carmina Burana" плавно перетекает в знаменитый хор "O, Fortuna!"
Поделюсь немного не-айтишными впечатлениями)
Поделюсь немного не-айтишными впечатлениями)
👍5😱1
Как быстро настроить интеграцию 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
YouTube
AmoCRM + Joomla: быстрая настройка интеграции. Библиотека WT AmoCRM.
Как быстро настроить интеграцию AmoCRM и сайта на Joomla? - использовать PHP библиотеку WT AmoCRM для Joomla, которая предполагает использование её разработчиками. А разработчики могут написать любое количество плагинов и решений по интеграции и автоматизации…
👍3