Andrey

Andrey

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

Изменение значения поля после сохранения Товара.

Приветствую сообщество!

Предыстория. На фронте есть форма которая добавляет и сохраняет новые Товары, вот собственно мне нужно, чтобы только у модераторов была возможность ставить галочку нужного мне поля, а если Товар сохраняет кто либо, но НЕ модератор, то сбрасывать поле на 0.
В общем такой вопрос, нужно при сохранении документа сбрасывать (устанавливать) значение одного поля на дефолтное (допустим было 1, надо при сохранении на 0).

Собственно я создал плагин вот такой:
<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnDocFormSave':
        $resource->set('moder_pub', 0);
        break;
}
Да да, тут нет проверки на то, принадлежит ли пользователь группе модераторы или нет, но суть не в этом, я это сделал, только чтобы проверить работает это вообще или нет, ну собственно не работает… При этом не меняет вообще никакое поле, какое бы не ставил.

Вот вопросик, куда копать, как сделать так, чтобы это работало :D

UPD.РЕШЕНИЕ
Не знаю на сколько правильно, НО вот такое решение помогло, спасибо @Евгений Webinmd
<?php
if ($modx->event->name == "OnDocFormSave") {
	if ($modx->user->isMember('Moderator')) return;
    $id = $resource->get('id');
    $res = $modx->getObject('msProduct', $id);
    $res->set('moder_pub', 0); 
    $res->save();
}
Andrey
07 июня 2021, 16:28
modx.pro
1
60
0

Не работает правило section_add_children для добавления Товара в Категорию!

Приветствую сообщество!

Уже не знаю что делать… Может кто сталкивался, подскажет куда копать или объяснит тогда как это работает.
В общем дано:

— Минишоп2
— Категория товаров
— Группа пользователей с привилегией section_add_children
— Группа ресурсов с «данной» категорией товаров
— Сниппет ms2form
Andrey
28 мая 2021, 19:26
modx.pro
1
173
0

PageBlocks. Удобное управление контентом сайта.

Всем привет.

PageBlocks позволяет легко и быстро интегрировать верстку. Больше никаких дополнительных полей(tv). Добавляйте, удаляйте и перемещайте блоки в интерфейсе ресурса.



Aleksandr Huz
28 мая 2021, 10:33
modx.pro
4
694
+25

Поиск источника ошибки Instantiated a derived class

Всем привет!

На одном из сайтов стала появляться ошибка следующего содержания:
Instantiated a derived class CollectionContainer that is not a subclass of the requested class ArticlesContainer

которая забивала Журнал ошибок за 2-а дня на 60 мб.

Поиск источника по БД, через сниппеты, через Batcher и другие способы не принесли результата.

Иван Бочкарев
23 мая 2021, 22:39
modx.pro
5
292
+17

Интерфейс бана пользователя

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



Ниже представлен код, куски которого когда-то писали коллеги по данному сайту и чатику в телеграме.
А я уже дописал чего не хватало и собрал все в кучку.
Евгений Webinmd
27 апреля 2021, 10:49
modx.pro
3
289
+15

Отдаем модные форматы картинок в webp и avif напрямую через nginx в обход разметки



Всем привет!

Я тут работал над одним проектом, в котором очень много контентной и интерфейсной графики, десятки тысяч изображений и, конечно, возник вопрос оптимизации сайта, чтобы удовлетворить требования поисковых систем.

Энтузиазма добавили, появившиеся относительно недавно у гугла, так называемые Core Web Vitals.
Кто не в курсе это пачка технических показателей качества сайта, которые скоро будут включены в алгоритм ранжирования и все тормознутые сайты из-за них, типа, покатятся вниз.
Ну в общем, встала задача оптимизировать картинки, а также сделать так, чтобы не пришлось переписывать кучу html кода, чтобы эти картинки туда вставить.

Sem
Sem
26 апреля 2021, 23:44
modx.pro
13
641
+21

FlashShop. Готовая сборка магазина.



Демо



Особенности


  • Bootstrap 5.0.0
  • Адаптивная и валидная верстка
  • Ajax авторизация/регистрация
  • Личный кабинет
  • Динамическая мини корзина
  • Фильтрация и сортировка
  • Поиск по товарам
  • Контактные данные покупателя в письме заказа
  • Обратный звонок с защитой от CSRF
  • Карты: yandex, google, leaflet и 2gis
  • Конструктор блоков на основе MIGX
Aleksandr Huz
22 апреля 2021, 12:20
modx.pro
3
706
+9

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

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

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

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


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