2015-07-29 3 views
5

Я пытаюсь работать, если есть способ интегрировать фильтрацию на основе местоположения в каталог Magento & поисковых страниц.Динамически вычислять атрибут в Magento

Чтобы разместить это в контексте, я использую следующий пример: Продукты имеют атрибуты широты и долготы, поскольку они расположены по всей стране. То, что я хочу, чтобы клиенты могли делать, - это фильтровать продукты по местоположению относительно их собственного местоположения.

Мне удалось успешно выполнить страницу пользовательского поиска для поиска местоположения, но в нем отсутствуют все другие возможности фильтрации/поиска, найденные в Magento. Идеальный сценарий заключается в том, что местоположение является динамически рассчитанной переменной, но я не уверен, как это сделать, или если это даже возможно в Magento.

Заранее благодарим за любые предложения!

ответ

2

Для начала, вы можете попробовать что-то вроде этого:

  1. создать атрибут продукта distance_from_customer, значение по умолчанию 0, фильтруемое в слоистой навигации
  2. создать наблюдатель для события catalog_product_collection_load_after, который изменит каждый продукт distance_from_customer атрибут в загруженной коллекции на основе местоположения клиента при каждой загрузке коллекции продукта (например, в категории)
  3. удлиняет слоистую навигацию, чтобы отключить сортировку/фильтрация на основе distance_from_customer если имеется только одно значение по умолчанию (0)

В этом решении distance_from_customer всегда будет 0 в базе данных, будут изменены только в объекте сбора продукта перед показом на интерфейсе и сортировки/фильтрации опция будет скрыта, если приложение не сможет получить данные о местоположении клиента.

+0

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

+0

Спасибо, человек, кажется твердым для меня, я дам ему попробовать и отправить любую обратную связь, которую я придумал! –