Сделайте строки манипуляции на запрос URL -адреса в результате каталогизации

magento.stackexchange https://magento.stackexchange.com/questions/12346

Вопрос

Я пытаюсь включить поиск «категории» в расширенный поиск моего проекта. Проходя через некоторые вопросы 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/
Но чтение немного в поиске, конечно, лучше

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top