[СДЕЛАЙ САМ] mFilter2 фильтрация по диапазону дат.

Приветствую, к сожалению не нашёл приемлемого для себя решения данной задачи поэтому «написал» своё, в кавычках потому что немного подправил. На мой взгляд очевидно, что дата это число, а в mFilter2 есть фильтрация по диапазону чисел, значит нужно превратить дату в число. Чтобы при обновлении компонента ничего не сломалось, создадим свой класс фильтрации customfilter.class.php в папке core/components/msearch2/custom/filters/, потом прописываем в системную настройку mse2_filters_handler_class = CustomFiltersHandler
Артур
29 марта 2021, 00:14
modx.pro
7
287
+8

Tiny MCE RTE подключение своих шрифтов

Недавно при разработке сайта, мне понадобилось подключить пару кастомных шрифтов в редактор.
Я перерыл доки, облазил интернет, закинул вопрос на форум ответа не нашел.
Может это слишком просто, но с другой стороны на одном англоязычном ресурсе, было предложение переопределить стили просто классами на странице. В общем то я так и сам сделал, но желание осуществить задуманное не покидало и я не оставлял попыток.
Эдуард
03 апреля 2021, 23:42
modx.pro
252
+6

MODX. Локализация и переводы



У меня предубеждение к людям, которые оставляют иностранные фразы без перевода. Мне, читателю, в этом случае делают комплимент, считая, что я и сам могу перевести. Но если бы они давали перевод, я бы прожил как-нибудь и без комплиментов.

М.Твен

Привет всем!

Решил изучить, как обстоят дела с локализацией базовых MODX словарей под разные языки.

Всего представлен 29 языков + исходный английский, из них полностью система локализована для трех (русский, шведский, немецкий, выделены на фото зеленым), высокой степени готовности (взял условно от 70%, в желтых квадратах) — еще 13, с остальными совсем беда.

Антон Тарасов
02 марта 2021, 12:47
modx.pro
98
+5

CronTabManager + PHPunit (Автоматические тесты)

Всем привет.
Недавно занимался возможность интеграции PHPunit тестов со своим компонентом CrontabManager.

Сегодня удалось завершить эту разработку.
Теперь CronTabManager умеет запускать PHPunit тесты из коробки.

После установки CronTabManager как обычно создает директорию с котроллерами:
core/scheduler/Controllers/
Сейчас по дефолту добавлен контроллер demophpunit.php
core/scheduler/Controllers/demophpunit.php
Который как раз и показывает как запустить PHPunit тест.

UPD: 22.03.2020: Интеграция PHPUnit в PHPStrom с помощью компонента CronTabManager
Андрей Степаненко
21 марта 2021, 16:04
modx.pro
2
248
+4

[СДЕЛАЙ САМ] DaData. Определение города по ip

Сниппет называется detectRegion. Для работы необходимо зарегистрироваться на сайте DaData и создать системную настройку для ключа api с названием dadata_api_key
<?php
$url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address';
$siteIsAvaliable = $modx->runSnippet('isSiteAvailible', array('url' => $url));
if($siteIsAvaliable){
    $token = $modx->getOption('dadata_api_key');
    $ip = $_SERVER['REMOTE_ADDR'];
    $headers = array(
    	'Accept: application/json',
    	'Authorization: Token ' . $token
    );
    $ch = curl_init($url.'?ip='.$ip);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $result = json_decode(curl_exec($ch),1);
    curl_close($ch);
    $region = $result['location']['data']['city'];
    return  $region;
}else{
    $modx->log(1, 'detectRegion: Не возможно определить регион. Сервис DaData недоступен');
    return false;
}
P.S. isSiteAvailible
Артур
09 апреля 2021, 23:28
modx.pro
1
149
+3

[СДЕЛАЙ САМ] Контексты для регионов в интернет-магазине.

Задача: сделать максимально простое добавление новых контекстов на сайт для создания региональных копий с собственными ресурсами, robots.txt и sitemap.xml, уникальными для каждого региона ресурсами и ценами на некоторые товарные позиции.

Проблемы:
1. Вывод галереи изображений товаров
2. Добавление дополнительных категорий к товарам в новом контексте.
3. Связывание товаров.

Решение:
1. Настраиваем редирект со всех поддоменов на основной домен (как это сделать уточняйте у хостера или в Google);
2. Подключаем плагин для переключения контекстов:
<?php
// Работаем только на фронтенде
if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr') {return;}

// Определяем запрашиваемый хост
$host = $_SERVER['HTTP_HOST'];
$ctx = $modx->getObject('modContextSetting', array('key' => 'http_host', 'value' => $host)); 

if($ctx->get('context_key') != 'web'){
    $modx->switchContext($ctx->get('context_key'));
}

Логика такая: определяем по url какой контекст запросили, если это не основной контекст (web), то переключаем контекст на запрошенный, в противном случае смотрим есть ли в $_COOKIE город, если нет, то устанавливаем $_COOKIE['curCity'], проверяем есть ли в списке контекстов запрошенный, если есть, то переключаем, если нет остаемся на основном контексте. На фронте этим управляет вот такой код
let btns = document.querySelectorAll('.jsChooseBtn'), // это кнопки подтверждения ДА и НЕТ
        tooltip = document.querySelector('.jsCityTooltip'); // это само окно с вопросом "ЭТО ВАШ ГОРОД"
    for(let i = 0; i < btns.length; i++){
        btns[i].addEventListener('click', function(e){
            tooltip.classList.add('d-none');
            if(e.target.classList.contains('jsCityConfirm')){ // если нажали да
               document.cookie = 'curCity='+ e.target.dataset.city + '; path=/;domain=ecodecking.ru'; 
            }
        });
    }
    if(document.cookie.indexOf('curCity') != -1){ // проверяем есть ли город в куках
        tooltip.classList.add('d-none'); 
    }


2.1 если кому интересно город я определяю через сайт DaData.Код сниппета detectRegion тут.
<?php
$url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address';
$siteIsAvaliable = $modx->runSnippet('isSiteAvailible', array('url' => $url));
if($siteIsAvaliable){
    $token = $modx->getOption('dadata_api_key');
    $ip = $_SERVER['REMOTE_ADDR'];
    $headers = array(
    	'Accept: application/json',
    	'Authorization: Token ' . $token
    );
    $ch = curl_init($url.'?ip='.$ip);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $result = json_decode(curl_exec($ch),1);
    curl_close($ch);
    $region = $result['location']['data']['city'];
    return  $region;
}else{
    $modx->log(1, 'detectRegion: Не возможно определить регион. Сервис DaData недоступен');
    return false;
}

3. Подключаем плагин для создания настроек контекста, при копировании или создании нового.
Артур
07 апреля 2021, 19:51
modx.pro
2
193
+3

Обновление автоустановщика шаблонов BELISSIMO 0.3

Вот и я наконец сделал ещё одно обновление BELISSIMO 0.3.
Что было сделано:

Добавлен сайт шаблонов themewagon.com
Теперь в «модуле» 3 сайта с шаблонами, суммарно более 4 000 шаблонов);
Добавлена хоть какая-то безопасность
  • Сделан .htaccess для папки libs
  • Все «активные файлы» (те что принимают POST/GET параметры) будут 301 редиректом отправлять на страницу доступ запрещён если нет авторизации
  • В скрипте загрузки файлов тоже есть проверка на админа)
  • Пользователь будет авторизован в BELISSIMO если он авторизован в админ панели MODX
Это не панацея но хоть что то.
Илья
23 марта 2021, 17:16
modx.pro
1
261
+3

mspReceiptAccount как добавить свой шаблон и автоматически отправить письмо при смене статуса

Тут написано, что это за зверь.

Я напишу как создать свой шаблон.

Может показаться, что для этого достаточно зайти в меню компонента и создать там новый элемент. Однако уже там видно что требуется указать класс-обработчик, поскольку под мои задачи подходил стандартный я его просто скопировал и положил рядом со стандартными в папку core/components/mspreceiptaccount/model/payments/. И казалось бы все, но нет.

Если посмотреть в логи, там будет написано что не найден какой-то класс и будет написано его название. Так сходу непонятно что это за класс и где он должен быть, но я разгадал эту загадку))). Копируем название класса, которое есть в логах и создаем вот такой файл
core/components/mspreceiptaccount/custom/item/receiptaccountact.class.php
, я туда скопировал код из соседнего класса
core/components/mspreceiptaccount/custom/item/receiptaccountsh.class.php
.

Всё, теперь можно создавать свой шаблон, например для акта выполненных работ.
Артур
03 марта 2021, 16:36
modx.pro
2
250
+3

Обновление для автоустановщика шаблонов BELISSIMO до версии 0.2.


Самое весомое что добавлено это новый каталог шаблонов с сайта https://html5up.net там их не много, но вдруг добавят новые.
Так же поскольку я придурок в прошлой статье я написал про возможность обновления, но её не добавил…
Точнее как: обновления он криво косо проверял, но при нажатии на кнопку установку ничего не делал.
Обновление я починил, и так же пофиксил уведомление о новой версии.
Илья
19 марта 2021, 14:41
modx.pro
180
+2

Немного старческого ворчания или не судите строго

Рабочий день окончился и решил 10 минут уделить «ворчанию», а заодно и услышать ваше мнение.
Предистория.
На днях дал задание верстальщику сделать лендинг. Очень простая страница с минимум как элементов так и функционала.
Через время получил готовую верстку, все визуально выглядит хорошо, но когда я открыл файлы стилей и файлы javascript я ужаснулся.
Файл style.css (не сжатая версия) содержал 70 000 строк.
Файл script.js (не сжатая версия) состоял из 14 000 строк.
Приглядываюсь и понимаю, что там намешано все, разные нормализаторы стилей, кучи каких то библиотек, фреймворков. В общем просто тонна кода, ведь это так удобно в каком нибудь вебпаке или галпе загружать сотни библиотек не особо задумываясь, не зная сколько зависимостей потянется. А зачем. Оно же соберется, сожмется и норм будет.
Мораль.
Александр Мельник
23 февраля 2021, 18:38
modx.pro
274
+1