Выполняйте строковые манипуляции с запросом URL-адреса результата поиска по каталогу
Я пытаюсь включить поиск "Категория" в расширенный поиск моего проекта. Пройдя через некоторые вопросы Stackoverflow, я понял, что в magento есть встроенный код для поиска по категориям, но они его не использовали.
Я имею в виду, что при поиске, если я добавлю параметр как cat
, это будет представлять категорию. Так, например:
www.mywebsite.com/catalogsearch/result/?cat=37&q=shoe
В приведенном выше URL-адресе параметр cat
представляет идентификатор категории. Следовательно, поиск строки shoe
будет специфичным для предоставленный идентификатор категории.
( игнорируйте меня, если это известная вещь и ненужное объяснение)
Теперь я пытаюсь разделить текст поиска на две половины на основе двоеточия (:
). таким образом, первая часть будет " Название категории", а вторая половина будет " Название продукта", затем я добавлю catalogsearch/result
URL-адрес этого нового параметра.
Например, если строка поиска, предоставленная пользователем, равна Mobile:Blackberry
, то я извлеку идентификатор категории из предоставленного имени категории и передайте запрос следующим образом:
?cat=37&q=Blackberry
Я не уверен, где именно я должен выполнять эти строковые манипуляции.
Пожалуйста, направь меня.
3 answers
Я бы попробовал с помощью explode:
list($categoryName, $productName) = explode(':', Mage::app()->getRequest()->getParam('q'));
И когда вы настроите это в событии predispatch, вы можете просто вернуть свою категорию в $_REQUEST
или $_POST
, просто проверьте код, откуда он получает cat
.
Я не нашел никакого кода, который считывает cat
параметр, но я думаю, что вы его пробовали? :-)
Вы не можете просто изменить используемый URL-адрес, так как для этого потребуется перенаправление (чего я здесь не предлагаю)
Но вы можете войти в событие controller_action_predispatch и управлять объектом запроса.
Для события: http://www.nicksays.co.uk/magento-events-cheat-sheet-1-7/
должно быть событие, которое запускается только для поиска по каталогу.
Для объекта запроса: http://phprelated.myworks.ro/set-or-get-request-variables-in-magento/
но немного углубиться в поиск, конечно, лучше
Я решил эту проблему!!
На самом деле это должно было обрабатываться на javascript, но не на php, как я думал.
Запрос был сгенерирован формой. Я не знал о поведении, при котором форма будет передавать атрибуты внутреннего поля, т. Е. значение и имя в качестве запроса на URL-адрес действия отправки.
Так, например, если у меня есть простая форма следующим образом:
<form id="some-form" action="http://www.google.com">
<input id="category-search" style="display:none;" type="text" name="cat" value="Mobile" />
<input type="text" name="q" value="Blackberry"/>
</form>
Приведенная выше форма создаст следующий URL-адрес при отправке действие:
http://www.google.com/?cat=Mobile&q=Blackberry
В magento по умолчанию в форме поиска присутствует только одно поле ввода
Итак, я добавил событие нажатия клавиши, которое запускается всякий раз, когда пользователь нажимает двоеточие (:
), а затем разделил значение в тексте поиска на Название категории и Название продукта . Вот так:
Mobile:Blackberry
=> CategoryName = "Mobile";
ProductName = "Blackberry";
Я просто делюсь здесь логикой.. Я надеюсь, что это будет кому-то полезно.
Подсказка: Я сохранил #category-search
как select element
вместо input
элемент, как я показал выше, у этого будут все названия категорий и подкатегорий. Вот так:
<select id="category-search" style="display: none;">
<option data-id="37">Mobile</option> <!-- category Id and category name -->
<!-- Many options here -->
</select>