Сделайте строки манипуляции на запрос URL -адреса в результате каталогизации
-
16-10-2019 - |
Вопрос
Я пытаюсь включить поиск «категории» в расширенный поиск моего проекта. Проходя через некоторые вопросы Stackoverflow, я понял, что Magento имеет встроенный код для поиска категорий, но они не использовали его.
Я имею в виду во время поиска, если я добавлю пара cat
Тогда это будет представлять категорию. Так, например:
www.mywebsite.com/catalogsearch/result/?cat=37&q=shoe
В приведенном выше URL cat
PARAM представляет идентификатор категории. Следовательно, поиск строки shoe
будет специфичным для предоставленного идентификатора категории.
(игнорируйте меня, если это известная вещь и ненужное объяснение)
Теперь, что я пытаюсь сделать, это разделить текст поиска на две половины на основе толстой кишки (:
) так, что первой частью будет "Название категории"А вторая половина будет"наименование товара"Тогда я добавлю catalogsearch/result
URL Этот новый параметры.
Например, если строка поиска, предоставленная пользователем Mobile:Blackberry
, тогда я извлечу идентификатор категории из имени предоставленной категории и передам запрос следующим образом:
?cat=37&q=Blackberry
Я не уверен, где именно я должен сделать эти строковые манипуляции.
Пожалуйста, направляйте меня.
Решение 3
Я решил это !!
На самом деле это было предназначено для обработки в 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 по умолчанию в форме поиска присутствует только одно поле ввода
Итак, я добавил событие Keypress, которое работает всякий раз, когда пользователь нажимает на оболочку (:
) и затем разделил значение в тексту поиска на Название категории а также наименование товара. Анкет Как это:
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>
Другие советы
Я бы попробовал с взрывом:
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/
Но чтение немного в поиске, конечно, лучше