Minyta
  • Modx
    • Сниппеты
    • Плагины
    • Модули
    • Уроки
    • Разное
  • JavaScript
  • PHP
  • HTML
  • SEO
  • Полезное
    • Разное
    • Графика
    • Полезные ссылки
    • Шрифты
    • Обучающие сервисы
  • Контакты

Поиск по каталогу Shopkeeper (Evo)

Главная \ Категории \ Modx \ Сниппеты \ Поиск по каталогу Shopkeeper (Evo)

Shopkeeper Evo Сниппет

Хранение товаров в каталоге Shopkeeper предоставляет ряд преимуществ, главное из которых снятие ограничения на количество товаров, а так же удобное редактирование цены в списке товаров.

Но при этом возникают и трудности с использованием стандартных дополнений. Одной из них является то, что сниппет поиска AjaxSearch ищет только в таблице ресурсов,  а про таблицу каталога ничего не знает.

Поэтому чтобы искать нужные товары, можно сделать простой поиск самостоятельно.

Предполагается, что Shopkeeper у вас уже установлен и настроен, не хватает только поиска.

1. Страница результатов поиска

Для создания поиска нам потребуется создать страницу вывода результатов поиска:

[!include? &placeholder=`total`!] 
найдено по запросу «<b>[[convertform? &pozition=`top`]]</b>». <br />

[[catalogView? 
   &parents=`[[include?
   &file=`assets/snippets/catalogView/elements/getChildParents.php`
   &parent=`2`]]`
   &dataType=`products` 
   &tpl=`catalogRow_chunk` 
   &descTpl=`catalogDesc_chunk` 
   &paginate=`1`
   &display=`20`
   &where=`[[convertform? &pozition=`where`]]`
]]

<br class="clear none" />
[!include? &placeholder=`pages`!]

Вызов catalogView – используется точно такой же, как и для вывода списка товаров, за исключением параметра &where=`[[convertform? &pozition=`where`]]`

На всякий случай поясню параметры, которые использованы у меня:

&parents - ID категории товаров (документ MODx). Можно несколько через запятую.

[[include? &file=`assets/snippets/catalogView/elements/getChildParents.php` &parent=`2`]]

Выводит список ID дочерних документов по родителю. Рекомендуется вызывать только кэшированным.

То есть у нас есть корневая папка с id=2, с помощью сниппета include поучаем список id дочерних ресурсов через запятую, как раз что нам нужно для параметра &parents.

&dataType - тип выводимых данных (documents|products). documents - документы MODx, products - товары из каталога Shopkeeper. По умолчанию - products.

&tpl - имя чанка для товаров. Можно использовать "@FILE:", "@CODE:". По умолчанию - @FILE:assets/snippets/catalogView/chunks/catalogRow_chunk.tpl.

&descTpl - имя чанка с шаблоном страницы подробной информации о товаре. По умолчанию - @FILE:assets/snippets/catalogView/chunks/catalogDesc_chunk.tpl.

&paginate - использовать постраничную разбивку (1|0).

&display - число товаров на странице. По умолчанию - 0 (не ограничено).

&where - SQL условие для выборки. Пример: &where=`(tvc.tmplvarid @eq '1' AND tvc.value @eq '300')` - ищет все товары со значением '300' TV с ID 1. "@eq" - это "=". sc. - поля товара (документа), tvc. - TV-параметры.

Примерно так должен выглядеть ресурс «результаты поиска»:

Так же не забываем убрать ненужные галочки во вкладке «Настройка страницы».

Обязательно уберите галочку «Кешируемый»

Убрать галочку Кешируемый ресурс MODx

2. Форма поиска

Дальше нам необходимо разместить на сайте форму поиска

<div id="search">
	<form action="[~331~]" method="get">
		<input id="search_input" type="text" size="20" name="searchc" onfocus="if (this.value=='Поиск') this.value='';"  onblur="if (this.value==''){this.value='Поиск'}" value='Поиск' />
		<input id="search_submit" type="submit" name="bt" value='' onfocus="this.blur()"/>
	</form>
</div>

где action="[~331~]"   это ссылка на страницу результатов поиска (331 нужно поменять на id своей станицы результатов поиска).

Форма будет передавать методом GET искомую фразу.

3. Создание сниппета convertform

Для обработки переданной фразы и формирования значения параметра &where нам понадобиться сниппет convertform

Название сниппета: convertform

Описание: обработка искомой фразы

Код сниппета (php):

<?php
$pozition = isset($pozition) ? $pozition: '';

if ((isset($_GET['searchc'])) and ($pozition=='where'))  
{
	$a = $_GET['searchc'];
        // проверка вводимых данных
	$a= $modx->db->escape($a); 
        $a = substr($a, 0, 15);	
	$a = str_replace(";", "", $a);
	$a = str_replace("'", "", $a);
	$a = str_replace('"', "", $a);
	$a = str_replace("=", "", $a);
	$a = str_replace("-", "", $a);
	$a = str_replace("″", "", $a);
	$a = quotemeta ($a);
	$a = trim($a);
        $a= mysql_real_escape_string($a);

	return "(sc.pagetitle like '%$a%' or (tvc.tmplvarid @eq '4' 
               AND tvc.value like '%$a%'))";
}

if ((isset($_GET['searchc'])) and ($pozition=='top'))  
{
	echo $_GET['searchc'];
}
?>

Параметр у сниппета только один &position – он отвечает, за то что будет выведено – если равен `top`, то выведется непосредственно фраза для поиска, а если `where`, то строка с условиями поиска для параметра &where  сниппета catalogView.

Поиск готов.

Дополнительные материалы:
Описание сниппета catalogView
Shopkeeper

Отдельная благодарность создателю сниппета Shopkeeper

  • Комментарии
  • Disqus
blog comments powered by Disqus

© 2011 — 2019 minyta.ru

https://aftermarket.supply

Карта сайта

На верх