Поиск по полю и переход к товару mSearch2
День добрый. Нашел в одном магазине интересное решение — поиск по коду товара, вводишь код и по нажатию «найти» попадаешь сразу на страницу товара с этим кодом.
Сходу решить не получилось, прошу помочь советом как это можно реализовать с mSearch2?
Сходу решить не получилось, прошу помочь советом как это можно реализовать с mSearch2?
Комментарии: 19
Код = Артикул.Нужно в системных настройках mSearch2, в поле «Индексация полей», указать ваше поле, а затем проиндексировать. Должен заработать.
Это понятно, вопрос в переходе стазу на товар без страницы «результаты поиска».
Так там сработает autocomplete, после чего выберите товар. Если прямой переход, то скорей всего придется сниппетом своим обработать.
Вот сниппет и не получается, нужно ж по нажатию «Найти» перейти на товар, при условии, что он есть
Вы это решение на MODX видели?
на WP WooCommerce есть такое.
На mSearch2 уже допиливать надо будет.
на WP WooCommerce есть такое.
На mSearch2 уже допиливать надо будет.
Зачем через mSearch2?
Примерно так, проверки сами добавите какие надо. На работоспособность не проверял
Примерно так, проверки сами добавите какие надо. На работоспособность не проверял
$res = $modx->->getObject('msProduct', array('article' => $_GET['search']));
$product_id = $res->get('id');
if($product_id) {
$modx->sendRedirect($modx->makeUrl($product_id));
}
Если с mSearch2 надо, думаю плагин повесить можно на событие, что бы отловить нужный код товара и сделать редирект на него если он есть (в теории с mSearch2 плотно не работал)
Никого не смущает, что на демо-сайте так и работает, из коробки?
minishop2.com/search/simple — набрать «товар» и кликнуть по результату.
Если же речь про нахождение единственного результата и редирект на него — то только своим сниппетом, который сам найдёт и отредиректит. Именно так работает поиск на modstore.pro
minishop2.com/search/simple — набрать «товар» и кликнуть по результату.
Если же речь про нахождение единственного результата и редирект на него — то только своим сниппетом, который сам найдёт и отредиректит. Именно так работает поиск на modstore.pro
Василий, день добрый. Да именно так, как на modstore.pro.
Рабочий сниппет можно увидеть? Попробую понять и применить.
Я же написал кусок кода, по гет параметру ищем объект, если находит то получаем его ИД и редиректим на него. Сделай либо плагином, либо снипеттом с вызовом до mSearch
Понял, поробую
$res = $modx->getObject('msProduct', array('article' => $_GET['search']));
[2018-08-07 17:05:32] (ERROR @ /home/s9074/www/core/xpdo/om/xpdoobject.class.php: 240) Error 42S22 executing statement:
Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'msProduct.article' in 'where clause'
)
не могу понять в чем дело…
[2018-08-07 17:05:32] (ERROR @ /home/s9074/www/core/xpdo/om/xpdoobject.class.php: 240) Error 42S22 executing statement:
Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'msProduct.article' in 'where clause'
)
не могу понять в чем дело…
Замените msProduct на msProductData
Да ошибся я, вот код, проверил работает:
$res = $modx->getObject('msProductData', array('article' => $_GET['search']));
$product_id = $res->get('id');
if($product_id) {
$modx->sendRedirect($modx->makeUrl($product_id));
}
Спасибо за помощь )
Вчера еще полдня провозился, теперь сервер выдает 500…
На сервере в логах:
2018/08/08 09:42:32 [error] 3191#3191: *56026 FastCGI sent in stderr: «PHP message: PHP Fatal error: Uncaught Error: Call to a member function get() on null in /home/*****/www/core/cache/includes/elements/modsnippet/48.include.cache.php:3
Stack trace:
#0 /home/*****/www/core/model/modx/modscript.class.php(70): include()
#1 /home/*****/www/core/model/modx/modparser.class.php(536): modScript->process(NULL)
#2 /home/*****/www/core/components/pdotools/model/pdotools/pdoparser.class.php(273): modParser->processTag(Array, false)
#3 /home/*****/www/core/model/modx/modparser.class.php(250): pdoParser->processTag(Array, false)
#4 /home/*****/www/core/components/pdotools/model/pdotools/pdoparser.class.php(65): modParser->processElementTags('[[$Header]]', '<section class=...', false, false, '[[', ']]', Array, 9)
#5 /home/*****/www/core/model/modx/modchunk.class.php(117): pdoParser->processElementTags('[[$Header]]', '<section class=...', false, false, '[[', ']]', Array, 10)
#6 /home/*****/www/core/model/modx/modparser.class.php(498): modChunk->process(NULL)
#7 /home/*****/www/core/comp» while reading response header from upstream, client: 194.***.11.106, server: *****.h3.modhost.pro, request: «GET /katalog/kolczo-iz-belogo-zolota,-358380/ HTTP/1.1», upstream: «fastcgi://127.0.0.1:1****», host: "*****.h3.modhost.pro"
Причем такое выдает на любые поля из msProductData. Гуглю на тему получения $_GET['search'] пока не понятно.
Вчера еще полдня провозился, теперь сервер выдает 500…
На сервере в логах:
2018/08/08 09:42:32 [error] 3191#3191: *56026 FastCGI sent in stderr: «PHP message: PHP Fatal error: Uncaught Error: Call to a member function get() on null in /home/*****/www/core/cache/includes/elements/modsnippet/48.include.cache.php:3
Stack trace:
#0 /home/*****/www/core/model/modx/modscript.class.php(70): include()
#1 /home/*****/www/core/model/modx/modparser.class.php(536): modScript->process(NULL)
#2 /home/*****/www/core/components/pdotools/model/pdotools/pdoparser.class.php(273): modParser->processTag(Array, false)
#3 /home/*****/www/core/model/modx/modparser.class.php(250): pdoParser->processTag(Array, false)
#4 /home/*****/www/core/components/pdotools/model/pdotools/pdoparser.class.php(65): modParser->processElementTags('[[$Header]]', '<section class=...', false, false, '[[', ']]', Array, 9)
#5 /home/*****/www/core/model/modx/modchunk.class.php(117): pdoParser->processElementTags('[[$Header]]', '<section class=...', false, false, '[[', ']]', Array, 10)
#6 /home/*****/www/core/model/modx/modparser.class.php(498): modChunk->process(NULL)
#7 /home/*****/www/core/comp» while reading response header from upstream, client: 194.***.11.106, server: *****.h3.modhost.pro, request: «GET /katalog/kolczo-iz-belogo-zolota,-358380/ HTTP/1.1», upstream: «fastcgi://127.0.0.1:1****», host: "*****.h3.modhost.pro"
Причем такое выдает на любые поля из msProductData. Гуглю на тему получения $_GET['search'] пока не понятно.
Пока отключил $_GET['search'] поставил туда постоянное значение.
Но появилась проблема с sendRedirect — ERR_TOO_MANY_REDIRECTS.
Она есть в твоем варианте:
if($product_id) {
$modx->sendRedirect($modx->makeUrl($product_id));
}
и в моем:
if($product_id) {
$url = $modx->makeUrl($product_id);
$modx->sendRedirect($url);
}
если поставить $modx->sendRedirect('http://yandex.ru'); — редирект без проблем!
что у меня может вызывать многократный редирект?
Но появилась проблема с sendRedirect — ERR_TOO_MANY_REDIRECTS.
Она есть в твоем варианте:
if($product_id) {
$modx->sendRedirect($modx->makeUrl($product_id));
}
и в моем:
if($product_id) {
$url = $modx->makeUrl($product_id);
$modx->sendRedirect($url);
}
если поставить $modx->sendRedirect('http://yandex.ru'); — редирект без проблем!
что у меня может вызывать многократный редирект?
А рожу вареньем не намазать?
Ладно, держи:
Ладно, держи:
if (!empty($_REQUEST['query'])) {
$query = htmlspecialchars(strip_tags(trim($_REQUEST['query'])));
$resource = $modx->getObject('msProduct', [
'pagetitle' => $query,
'class_key' => 'msProduct',
'deleted' => 0,
'published' => 1,
'context_key' => $modx->context->key,
]);
if ($resource) {
$modx->sendRedirect($resource->get('uri'));
}
}
Спасибо, Василий.
по pagetitle работает правильно (показывает все результаты, потому что уникальных нет).
А мне надо по полю shifr (аналог article). Правильно ли я поменял в коде?
по pagetitle работает правильно (показывает все результаты, потому что уникальных нет).
А мне надо по полю shifr (аналог article). Правильно ли я поменял в коде?
if (!empty($_REQUEST['query'])) {
$query = htmlspecialchars(strip_tags(trim($_REQUEST['query'])));
$resource = $modx->getObject('msProductData', [
'shifr' => $query,
'class_key' => 'msProduct',
'deleted' => 0,
'published' => 1,
'context_key' => $modx->context->key,
]);
if ($resource) {
$modx->sendRedirect($resource->get('uri'));
}
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.