Andrey

Andrey

С нами с 08 августа 2016; Место в рейтинге пользователей: #213

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

Задача: сделать максимально простое добавление новых контекстов на сайт для создания региональных копий с собственными ресурсами, 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
5
10 155
+3

Результаты прошедшего MODX SnowUP 2021



Ребята, коллеги, друзья!

Как вы знаете в начале марта 04.03.2021 проходило онлайн мероприятие MODX Digital SnowUp. A 05/03/2021 был день охоты за багами в MODX BugHunt vi.to/hubs/modx-meetup, о чем был анонс в чате сообщества и на MODX.PRO

Иван Бочкарев
04 апреля 2021, 16:20
modx.pro
2
2 819
+30

[reMessages] Ещё одна попытка создать систему сообщений для сайтов на MODX

Постарался сделать простенькую систему сообщений. Для мгновенного обновления чата используется Comet Server, поэтому придётся там зарегистрироваться. А в общем — всё сделано стандартно, сниппет, чанки для оформления внешнего вида.


Илья Уткин
26 января 2021, 17:30
modx.pro
5
2 093
+19

mfilter2 - вывод значений фильтра в алфавитном порядке, с группировкой по первой букве

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


Евгений Webinmd
26 января 2021, 00:17
modx.pro
18
1 603
+27

Обнуляющие смайлики (или почему minishop2 отправляет заказы без товаров)

Всем привет.
Буквально вчера, словил неприятную багу.

(P.S. вполне возможно что многие знают об этой баге. Но ради интереса решил воспроизвести данную багу на других сайтах — в 90% случаев ошибка воспроизводится).

Имеется сайт на MODX Revolution 2.7.3 в связке с miniShop2 2.5.0.
Бага заключалась в том, что пришёл «пустой» заказ. Т.е. все реквизиты клиента в письме и заказе есть, а вот товаров в этом заказе нет.

Долго и упорно не мог понять в чём же проблема. Благо есть вебвизор и он таки помог воспроизвести ошибку.

Дело оказалось в смайликах. Которые были вставлены в комментарий к заказу.
Дмитрий Танцирев
18 июля 2020, 08:46
modx.pro
8
2 431
+8

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
Aleksandr Huz
08 мая 2020, 11:50
modx.pro
7
3 148
+21

Дружим TicketForm и Ckeditor

Возникла потребность на фронте добавлять тикеты с помощью визуального редактора.

Подключение самого редактора не выходит за рамки документации 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();
});
tolanych
25 марта 2020, 14:31
modx.pro
7
981
+5

Использование Gitify для синхронизации тестового и рабочего сайта на Windows и с Openserver

У меня такая задача. На модкс частично перенесена система управления производством (Первоначально сделанная на Excel директором. Но excel тупит на больших объемах данных и синхронизация разных книг еще тот геморой). Регулярно на сайте что-то меняется. Сейчас, чтобы не мешать рабочему процессу фирмы, сделали тестовую копию сайта. Теперь желательно сделать так чтобы ее можно было быстро синхронизировать с рабочим сайтом.
Нужно чтоб с тестового сайта переносились изменения всех ресурсов, копировались все измененные файлы компонентов и переносилась структура таблиц компонентов без изменения данных. Еще таблицы с настройками желательно настроить чтоб копировались, но это можно и ручками.
Решил использовать Gitify. И заодно написать пример его использования. Начинаю установку прямо сейчас.
Александр Туниеков
26 февраля 2020, 13:33
modx.pro
2
1 350
+3

CRM для логистики на базе Tickets

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

Цель — Сделать crm систему, чтобы менеджеры тратили минимум времени на заведение контрагентов, заявок и тд
Сергей Лим
23 января 2020, 09:39
modx.pro
1
1 921
+13

ProfileLinkX

30 5 000
Доброе время суток, MODX-еры.

На неделе разрабатывал для одного сайта функционал упоминаний пользователей (как это собственно уже реализовано на modx.pro немалое количество времени. Это когда пишешь в посте/комментарии юзернейм через значок @). По ходу дела возникали интересные ньюансы и пожелания по гибкости настроек, в итоге уже начали обрисовываться очертания для полноценного компонента.

tolanych
01 сентября 2019, 15:08
modx.pro
4
1 967
+14