Andrey
С нами с 08 августа 2016; Место в рейтинге пользователей: #215[СДЕЛАЙ САМ] Контексты для регионов в интернет-магазине.
Задача: сделать максимально простое добавление новых контекстов на сайт для создания региональных копий с собственными ресурсами, robots.txt и sitemap.xml, уникальными для каждого региона ресурсами и ценами на некоторые товарные позиции.
Проблемы:
1. Вывод галереи изображений товаров
2. Добавление дополнительных категорий к товарам в новом контексте.
3. Связывание товаров.
Решение:
1. Настраиваем редирект со всех поддоменов на основной домен (как это сделать уточняйте у хостера или в Google);
2. Подключаем плагин для переключения контекстов:
Логика такая: определяем по url какой контекст запросили, если это не основной контекст (web), то переключаем контекст на запрошенный, в противном случае смотрим есть ли в $_COOKIE город, если нет, то устанавливаем $_COOKIE['curCity'], проверяем есть ли в списке контекстов запрошенный, если есть, то переключаем, если нет остаемся на основном контексте. На фронте этим управляет вот такой код
2.1 если кому интересно город я определяю через сайт DaData.Код сниппета detectRegion тут.
3. Подключаем плагин для создания настроек контекста, при копировании или создании нового.
Проблемы:
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. Подключаем плагин для создания настроек контекста, при копировании или создании нового.
Результаты прошедшего MODX SnowUP 2021
Ребята, коллеги, друзья!
Как вы знаете в начале марта 04.03.2021 проходило онлайн мероприятие MODX Digital SnowUp. A 05/03/2021 был день охоты за багами в MODX BugHunt vi.to/hubs/modx-meetup, о чем был анонс в чате сообщества и на MODX.PRO
[reMessages] Ещё одна попытка создать систему сообщений для сайтов на MODX
mfilter2 - вывод значений фильтра в алфавитном порядке, с группировкой по первой букве
Добрый день, давно не писал ничего, вот делюсь рабочим вариантом группировки значений фильтра по первой букве.
Как это должно выглядеть:
Как это должно выглядеть:
Обнуляющие смайлики (или почему minishop2 отправляет заказы без товаров)
Всем привет.
Буквально вчера, словил неприятную багу.
(P.S. вполне возможно что многие знают об этой баге. Но ради интереса решил воспроизвести данную багу на других сайтах — в 90% случаев ошибка воспроизводится).
Имеется сайт на MODX Revolution 2.7.3 в связке с miniShop2 2.5.0.
Бага заключалась в том, что пришёл «пустой» заказ. Т.е. все реквизиты клиента в письме и заказе есть, а вот товаров в этом заказе нет.
Долго и упорно не мог понять в чём же проблема. Благо есть вебвизор и он таки помог воспроизвести ошибку.
Дело оказалось в смайликах. Которые были вставлены в комментарий к заказу.
Буквально вчера, словил неприятную багу.
(P.S. вполне возможно что многие знают об этой баге. Но ради интереса решил воспроизвести данную багу на других сайтах — в 90% случаев ошибка воспроизводится).
Имеется сайт на MODX Revolution 2.7.3 в связке с miniShop2 2.5.0.
Бага заключалась в том, что пришёл «пустой» заказ. Т.е. все реквизиты клиента в письме и заказе есть, а вот товаров в этом заказе нет.
Долго и упорно не мог понять в чём же проблема. Благо есть вебвизор и он таки помог воспроизвести ошибку.
Дело оказалось в смайликах. Которые были вставлены в комментарий к заказу.
SweetAlert2. Красивые уведомления для AjaxForm, Office, Minishop2 и msOneClick
Компонент переопределяет уведомления jGrowl для AjaxForm, Office и Minishop2.
Системные настройки:
Системные настройки:
- swal2_position — Позиция модального окна, может быть 'top', 'top-start', 'top-end', 'center', 'center-start', 'center-end', 'bottom', 'bottom-start', или 'bottom-end'. По умолчанию: 'top-end'.
- swal2_timer — Таймер автоматического закрытия модального окна. Установить в миллисекундах. По умолчанию: 3000.
- swal2_showconfirmbutton — Если установлено значение false, кнопка 'Подтвердить' не будет отображаться. По умолчанию: false
- swal2_toast — Следует ли рассматривать предупреждение как тостовое уведомление. Эта опция обычно связана с параметром позиции и таймером. Тосты НИКОГДА не автофокусированы. По умолчанию: true
- swal2_width — Ширина уведомления. По умолчанию: 19rem
Дружим TicketForm и Ckeditor
Возникла потребность на фронте добавлять тикеты с помощью визуального редактора.
Подключение самого редактора не выходит за рамки документации Ckeditor, с помощью настройки enable_editor = 0 отключаем стандартный Ticket-овский markItUp и цепляем на нужный id-шник CKEDITOR посредством JS-кода:
Подключение самого редактора не выходит за рамки документации Ckeditor, с помощью настройки enable_editor = 0 отключаем стандартный Ticket-овский markItUp и цепляем на нужный id-шник CKEDITOR посредством JS-кода:
var textarea = document.getElementById('ticket-editor');
var editor = CKEDITOR.replace('ticket-editor');
editor.on( 'change', function( evt ) {
textarea.value = evt.editor.getData();
});
Использование Gitify для синхронизации тестового и рабочего сайта на Windows и с Openserver
У меня такая задача. На модкс частично перенесена система управления производством (Первоначально сделанная на Excel директором. Но excel тупит на больших объемах данных и синхронизация разных книг еще тот геморой). Регулярно на сайте что-то меняется. Сейчас, чтобы не мешать рабочему процессу фирмы, сделали тестовую копию сайта. Теперь желательно сделать так чтобы ее можно было быстро синхронизировать с рабочим сайтом.
Нужно чтоб с тестового сайта переносились изменения всех ресурсов, копировались все измененные файлы компонентов и переносилась структура таблиц компонентов без изменения данных. Еще таблицы с настройками желательно настроить чтоб копировались, но это можно и ручками.
Решил использовать Gitify. И заодно написать пример его использования. Начинаю установку прямо сейчас.
Нужно чтоб с тестового сайта переносились изменения всех ресурсов, копировались все измененные файлы компонентов и переносилась структура таблиц компонентов без изменения данных. Еще таблицы с настройками желательно настроить чтоб копировались, но это можно и ручками.
Решил использовать Gitify. И заодно написать пример его использования. Начинаю установку прямо сейчас.
CRM для логистики на базе Tickets
Всем привет, в который раз удивляюсь возможностям применения Tickets.
Цель — Сделать crm систему, чтобы менеджеры тратили минимум времени на заведение контрагентов, заявок и тд
Цель — Сделать crm систему, чтобы менеджеры тратили минимум времени на заведение контрагентов, заявок и тд
ProfileLinkX
30 5 000
Доброе время суток, MODX-еры.
На неделе разрабатывал для одного сайта функционал упоминаний пользователей (как это собственно уже реализовано на modx.pro немалое количество времени. Это когда пишешь в посте/комментарии юзернейм через значок @). По ходу дела возникали интересные ньюансы и пожелания по гибкости настроек, в итоге уже начали обрисовываться очертания для полноценного компонента.
На неделе разрабатывал для одного сайта функционал упоминаний пользователей (как это собственно уже реализовано на modx.pro немалое количество времени. Это когда пишешь в посте/комментарии юзернейм через значок @). По ходу дела возникали интересные ньюансы и пожелания по гибкости настроек, в итоге уже начали обрисовываться очертания для полноценного компонента.