[update] Общая база товаров для разных контекстов
Очень долго не получалось заставить работать товары minishop2 на других контекстах, с выводом через сниппет нет проблем, а вот с ссылками и корзиной беда.
Использовал sendForward, с ним куча гемороя, но случайно наткнулся на вот это:
В итоге вот что получилось:
Плагин SwitchProduct (вешаем на OnPageNotFound) для поиска товара по ссылке с других контекстов (site.ru/catalog/product/ имет дубликат по ссылке test.site.ru/catalog/product/)
к товарам создан tv brand, те которые будут выводиться на test имеют запись test в tv
Создаем в web:
catalog (msCategory) (id 3)
с контентом/содержимым
— product web 2 (tv.brand = пусто)
— product web + test 3 (tv.brand = test)
— product web + test 4 (tv.brand = test)
Создаем в test:
catalog (msCategory)
с контентом/содержимым
Должно быть включено ЧПУ, проверка на дублирование в контекстах = нет
В итоге: товары работают полностью во всех контекстах, добавление в корзину не вызывает проблем как и оформление заказа.
Использовал sendForward, с ним куча гемороя, но случайно наткнулся на вот это:
$modx->resource = $modx->getObject('modResource', $id);
$modx->request->prepareResponse();
exit();В итоге вот что получилось:
Плагин SwitchProduct (вешаем на OnPageNotFound) для поиска товара по ссылке с других контекстов (site.ru/catalog/product/ имет дубликат по ссылке test.site.ru/catalog/product/)
<?php
if ($modx->event->name == 'OnPageNotFound') {
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}
$request = $_REQUEST[$alias];
$tmp = explode('/', $request); // получаем ссылку
$test = $modx->findResource(end($tmp));
$document = $modx->getObject('msProduct', array('alias' => end($tmp))); // ищем товар по алиасу, последний кусок из /catalog/category/product-alias
if($document){
$modx->resource = $document;
$modx->request->prepareResponse(); // рендерим товар миную контексты!
exit();
}
}На моем примере сайт разделен на 2 контекста, web (site.ru) и test (test.site.ru)к товарам создан tv brand, те которые будут выводиться на test имеют запись test в tv
Создаем в web:
catalog (msCategory) (id 3)
с контентом/содержимым
[[!msProducts]] — product web 1 (tv.brand = пусто)— product web 2 (tv.brand = пусто)
— product web + test 3 (tv.brand = test)
— product web + test 4 (tv.brand = test)
Создаем в test:
catalog (msCategory)
с контентом/содержимым
[[!msProducts? &parents=`3` &includeTVs=`brand` &where=`{"brand":"test"}`]]Структура каталогов у контекстов должна быть идентична, иначе посыпятся 404 ошибки.Должно быть включено ЧПУ, проверка на дублирование в контекстах = нет
В итоге: товары работают полностью во всех контекстах, добавление в корзину не вызывает проблем как и оформление заказа.
Комментарии: 21
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Как для такой структуры сделать общую базу товаров?
Но в ресурсе данного контекста же нет товаров, только пустые категории, соответственно он товаров не видит.
В новый контекст дублируете иерархию web и пр выводе указываете parent из web
указать родителем ресурс из другого контекста?
или же можно завести tv поле «родитель» и в нем выбирать основную категорию, и выводить
&parent=`__tv_roditel__`
Вот я на базе неё и сделал так:
Только для форвардинга нужно в настройках включить опцию allow_forward_across_contexts
По замерам получается так:
Плагин для подмены ресурса
В настройках сниппетов PDO проставьте {$_modx->context.key}
Понимаю, что очень старая запись. Но все же сейчас может помочь.
А как быть, когда доменное имя содержит символ "-"?
Сейчас этот код:
Отрабатывает вот так:
Было:
site-name.ru/katalog/mebel/krovati/
Стало:
spb.site-name.ru/site-/katalog/mebel/krovati/
Нужно:
spb.site-name.ru/katalog/mebel/krovati/
Может кто-то подскажет?
1. Есть контекст web — обычные текстовые страницы
2. Есть контекст catalog — категории и товары Minishop2
Так вот, если удалить .html из типа содержимого, товары отдают 404 ошибку
Все остальные страницы и даже категории товаров работают, в упор не понимаю почему так