Localizator + pdoResources + where TV не работает выборка

Помогите понять почему не отрабатывать условие по выборке TV, если ID ставить самому, то выводит.
Илья Александрович
08 апреля 2021, 14:46
modx.pro
82
0

Кэш от root

Периодически создается кэш от root пользователя, и тем самым сайт не может отобразить информацию и записать дальше в кэш. Это проблема настройки сервера или как можно решить её? Временно поставил крон, чтобы исправлял права, но понимаю, что это не правильно.
Роман
08 апреля 2021, 14:09
modx.pro
60
0

Pdoresource неправильно обрабатывает условие where. РЕШЕНО!

Всем привет!
Сразу к делу. Код сниппета:

<?php
$where = array(
    'Lo:>=' => 100,
    'Lo:<=' => 140,
);

$where = $modx->toJSON($where);

$output = $modx->runSnippet('pdoResources',array(
    'limit' => 15,
    'parents' => 71,
    'includeTVs' => 'Lo',
    'where' => $where,
    'return' => 'json'
));

return $output;
Данный сниппет выдает результат из 4 значений, то есть работает корректно. Когда меняю 100 на 99, результатом сниппета становится пустой массив. Что интересно, когда меняю 99 на 10, сниппет отрабатывает правильно.

Не понимаю, что за магия происходит. Помогите разобраться.

UPD. Когда ввожу 0, 1, 11, 12 и выборка работает нормально. Остальные числа до 99 включительно отдают пустой результат.
Денис
07 апреля 2021, 22:23
modx.pro
99
0

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

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

Как сделать условие выборки для article.

Создал для быстрой вставки товаров в тело любой страницы, хочу чтобы не него можно было вносить назания товара (Артикль). Раньше было сделано по id ресурса через resources
вызов такой:
{include 'file:chunks/blocks/pdo_project.tpl' $resources='212,207,197'}
Код чанка такой:
{set $params = [
'depth' => '0',
'resources' => $resources,
'element' => 'msProducts',
'tpl' => '@FILE chunks/cards/card.tpl',
'includeThumbs' => 'medium',
'limit' => 80,
'includeTVs' => 'price1,area',
'tvPrefix' => '',
'parents' =>  0 ,
]}
<div class="rows row row-cols-1 row-cols-sm-2 row-cols-md-3 catalog mt-2">
    {'!pdoPage' | snippet : $params}
</div>
Сейчас пытаюсь через where заменить
'resources' => $resources
на
'where'=> '{"article:IN":$articles}',
но ничего не работает.
Артикли на кириллице
Misha Bulic
07 апреля 2021, 18:02
modx.pro
84
0

Restful API Modx

60 200 000
Имеется крупный интернет-магазин на MODX + Minishop2. С английской локализацией (кастомные поля ресурса + Localizator + MIGX) и со множеством дополнений (таких как mSearch2, Discontrol, msoptionsprice2, mscAddress, msPromoCode, mSync, Office, Tickets и т.д. всего около 50). Интегрирован с сервисами: Мой Склад, доставка B2CPL, лояльность (maxma.com/ru), retailcrm, оплата Cloydpayment.
Самостоятельно написаны интеграции с лояльностью (бонусы + промокоды), доставкой, конструктор товаров, виртуальные страницы для разных городов, и еще некоторые плагины и расширения.

Требуется реализовать полноценную работу всех имеющихся функций по RESTFUL API для последующего переноса фронтенда на один из популярных фреймворков.

Просьба писать только, если вы это уже делали. Также ищем разработчика на почасовую оплату для поддержания текущей версии.
Ольга
07 апреля 2021, 16:26
modx.pro
157
0

Сортировка по опциям msProducts [решено]

Доброго.

Уже пол дня убил на попытку наладить сортировку msProducts, прошу помощи аудитории, так как документации и гугла явно не хватает :)

Дано: miniShop2, товары с опциями, всё обычное.
Задача: отсортировать по опции 'obschaya-ploschad', примеры значений опции: 211.8, 240 и т.д.

Делаю так:

$modx->runSnippet('msProducts', [
    'parents' => 2,
    'sortbyOptions' => 'obschaya-ploschad:number',
    'sortby' => '{"obschaya-ploschad":"ASC"}',
    'limit' => 24,
    'offset' => $offset,
    'tpl' => 'tpl.catalog.row',
    'setTotal' => 1
]);
Viarne
07 апреля 2021, 15:38
modx.pro
85
0

переписать путь к файлу стилей

Добрый день. только начал изучать modx. стоит задача по клике на кнопку менять подключаемые файлы стилей. просто используя php я это сделал. но как это сделать в modx не понимаю.
это нативный php

$css = 'style.css';
$css2 = 'style2.css';

$filename = 'index.php';
$file = file_get_contents($filename);
$title_pattern = $css;
$test = preg_replace("~$title_pattern~", $css2, $file);
file_put_contents($filename, $test);

header('Location: index.php');

а это уже код внутри modx

кнопка на странице, где 124 это номер сниппета



а это сам сниппет

<?php

function getStyle() {

$css = '[[$styles]]'; // чанк исходного файла css
$css2 = '[[$styles2]]'; //чанк файла на который надо поменять

$filename = [[$head]]; //чанк — место где происходит замена css файлов
$file = file_get_contents($filename);
$title_pattern = $css;
$test = preg_replace("~$title_pattern~", $css2, $file);
return file_put_contents($filename, $test);

}
Руслан
07 апреля 2021, 15:30
modx.pro
84
0

Игнорировать мультикатегории в msProducts

Добрый день! Можно ли как-то сделать вывод товаров без учета мультикатегорий, чтобы не отображались те, что связаны с этой категорией из другой категории?
Анастасия
07 апреля 2021, 12:33
modx.pro
58
0

PayPal minishop2 ошибка при оплате

/home/u212443042/domains/maisondentremets.com/public_html/core/components/minishop2/custom/payment/paypal.class.php : 84) [miniShop2] Payment error while request. Request: Array
(
    [METHOD] => SetExpressCheckout
    [PAYMENTREQUEST_0_CURRENCYCODE] => GBP
    [PAYMENTREQUEST_0_ITEMAMT] => 4.21
    [PAYMENTREQUEST_0_SHIPPINGAMT] => 10
    [PAYMENTREQUEST_0_AMT] => 14.21
    [RETURNURL] => https://maisondentremets.com/assets/components/minishop2/payment/paypal.php?action=success
    [CANCELURL] => https://maisondentremets.com/assets/components/minishop2/payment/paypal.php?action=cancel
    [PAYMENTREQUEST_0_INVNUM] => 18
    [L_PAYMENTREQUEST_0_NAME0] => Avocado Guacamole
    [L_PAYMENTREQUEST_0_AMT0] => 4.96
    [L_PAYMENTREQUEST_0_QTY0] => 1
    [L_PAYMENTREQUEST_0_NAME1] => Standard (Free)
    [L_PAYMENTREQUEST_0_AMT1] => 0
    [L_PAYMENTREQUEST_0_QTY1] => 1
)
, response: SSL certificate problem: unable to get local issuer certificate
Как можно решить проблему?
Максим
06 апреля 2021, 17:22
modx.pro
85
0