Выполняйте строковые манипуляции с запросом 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

Я не уверен, где именно я должен выполнять эти строковые манипуляции.

Пожалуйста, направь меня.

Author: Mr_Green, 2013-12-25

3 answers

Я бы попробовал с помощью explode:

list($categoryName, $productName) = explode(':', Mage::app()->getRequest()->getParam('q'));

И когда вы настроите это в событии predispatch, вы можете просто вернуть свою категорию в $_REQUEST или $_POST, просто проверьте код, откуда он получает cat.

Я не нашел никакого кода, который считывает cat параметр, но я думаю, что вы его пробовали? :-)

 3
Author: Fabian Blechschmidt, 2013-12-25 11:12:30

Вы не можете просто изменить используемый 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/
но немного углубиться в поиск, конечно, лучше

 0
Author: Flyingmana, 2013-12-26 15:49:49

Я решил эту проблему!!

На самом деле это должно было обрабатываться на 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>
 0
Author: Mr_Green, 2013-12-27 06:31:26