Localizator + pdoResources + where TV не работает выборка
Помогите понять почему не отрабатывать условие по выборке TV, если ID ставить самому, то выводит.
Кэш от root
Периодически создается кэш от root пользователя, и тем самым сайт не может отобразить информацию и записать дальше в кэш. Это проблема настройки сервера или как можно решить её? Временно поставил крон, чтобы исправлял права, но понимаю, что это не правильно.
Pdoresource неправильно обрабатывает условие where. РЕШЕНО!
Всем привет!
Сразу к делу. Код сниппета:
Не понимаю, что за магия происходит. Помогите разобраться.
UPD. Когда ввожу 0, 1, 11, 12 и выборка работает нормально. Остальные числа до 99 включительно отдают пустой результат.
Сразу к делу. Код сниппета:
<?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 включительно отдают пустой результат.
[СДЕЛАЙ САМ] Контексты для регионов в интернет-магазине.
Задача: сделать максимально простое добавление новых контекстов на сайт для создания региональных копий с собственными ресурсами, 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. Подключаем плагин для создания настроек контекста, при копировании или создании нового.
Как сделать условие выборки для 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}',
но ничего не работает. Артикли на кириллице
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 для последующего переноса фронтенда на один из популярных фреймворков.
Просьба писать только, если вы это уже делали. Также ищем разработчика на почасовую оплату для поддержания текущей версии.
Самостоятельно написаны интеграции с лояльностью (бонусы + промокоды), доставкой, конструктор товаров, виртуальные страницы для разных городов, и еще некоторые плагины и расширения.
Требуется реализовать полноценную работу всех имеющихся функций по RESTFUL API для последующего переноса фронтенда на один из популярных фреймворков.
Просьба писать только, если вы это уже делали. Также ищем разработчика на почасовую оплату для поддержания текущей версии.
Сортировка по опциям msProducts [решено]
Доброго.
Уже пол дня убил на попытку наладить сортировку msProducts, прошу помощи аудитории, так как документации и гугла явно не хватает :)
Дано: miniShop2, товары с опциями, всё обычное.
Задача: отсортировать по опции 'obschaya-ploschad', примеры значений опции: 211.8, 240 и т.д.
Делаю так:
Уже пол дня убил на попытку наладить сортировку 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
]);
переписать путь к файлу стилей
Добрый день. только начал изучать 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);
}
это нативный 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);
}
Игнорировать мультикатегории в msProducts
Добрый день! Можно ли как-то сделать вывод товаров без учета мультикатегорий, чтобы не отображались те, что связаны с этой категорией из другой категории?
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
Как можно решить проблему?