2012-11-10 3 views
0

Сортировочные швы типа Magento для хранения в печенье. Позволяет указать тип по умолчанию по имени по возрастанию. Если пользователь изменит это значение в порядке убывания, то все последующие страницы будут иметь этот порядок сортировки.Magento 1.4.1.1 порядок сортировки категорий, хранящийся в файле cookie

Как я могу изменить это, чтобы пользователь увидел в следующей категории порядок сортировки по умолчанию?

ответ

-1

Я не думаю, что вы можете. Если пользователь пытается улучшить свой опыт, который влияет только на них, cookie обновляется и пока этот файл cookie не истечет, порядок сортировки всегда будет отображаться по мере их выбора.

Вы можете очистить куки на каждый раз, когда разбиение на страницы щелкнул, но это может вызвать другие проблемы, если пользователь вошел в систему.

Мало того, что это устранило бы и продукты, которые могут быть добавлены в свою корзину.

Я бы предположил, что пользователь несет ответственность за то, что они хотят просмотреть списки, или просто удалить опцию «сортировать по названию по возрастанию», например, чтобы они не могли ее выбрать.

+0

Но это не имеет смысла для пользовательского опыта. –

+0

Возможно, вам нужно объяснить более подробно, но из того, что я собираю, если пользователь хочет увидеть элементы поиска, отображаемые определенным образом, что это их выбор. Опять же, если Cookie хранит его, вам либо нужно удалить cookie при загрузке страницы, либо не дать пользователю возможность в первую очередь – GarytheWorm

1

Это старый вопрос, но это первый результат Google для «Magento sort by cookie». Итак, в духе SO, давайте ответим на это!

Для начала мы должны провести некоторое расследование, но сначала нам нужно знать, каковы наши предположения.

Предположения

  • Сортировать по штатам хранится в куки
  • Cookie обновляется, когда сортировать по выберите изменяется

С чего начать?

Если у вас возникли сомнения в Magento в такой ситуации, начните с интерфейса, где ваш выход доступен для просмотра.

Если посмотреть в \app\design\frontend\<your_package>\<your_theme>\template\catalog\product\list\toolbar.phtml

Мы видим, что следующий обрабатывают яваскрипт действия, когда «Sort By» выберите поле изменяется.

<div class="sort-by"> 
    <label><?php echo $this->__('Sort By') ?></label> 
    <select onchange="setLocation(this.value)"> 
    <?php foreach($this->getAvailableOrders() as $_key=>$_order): ?> 
     <option value="<?php echo $this->getOrderUrl($_key, 'asc') ?>"<?php if($this->isOrderCurrent($_key)): ?> selected="selected"<?php endif; ?>> 
      <?php echo $this->__($_order) ?> 
     </option> 
    <?php endforeach; ?> 
    </select> 
    <?php if($this->getCurrentDirection() == 'desc'): ?> 
     <a href="<?php echo $this->getOrderUrl(null, 'asc') ?>"><img src="<?php echo $this->getSkinUrl('images/sort_desc_arrow.gif') ?>" alt="<?php echo $this->__('Set Ascending Direction') ?>" class="v-middle" /></a> 
    <?php else: ?> 
     <a href="<?php echo $this->getOrderUrl(null, 'desc') ?>"><img src="<?php echo $this->getSkinUrl('images/sort_asc_arrow.gif') ?>" alt="<?php echo $this->__('Set Descending Direction') ?>" class="v-middle" /></a> 
    <?php endif; ?> 
</div> 

В частности, нас интересует часть <select onchange="setLocation(this.value)">. Итак, что происходит, когда этот метод называется?

Глубоко вниз отверстие мы идем! setLocation определяется в \js\varien\js.js вокруг линии 30.

function setLocation(url){ 
    window.location.href = url; 
} 

Так что это достаточно просто, это просто ваш основной Javascript новая директива местоположения.

При изменении этого <select> мы отправимся на новый URL-адрес с некоторыми параметрами. Это наиболее вероятное расположение настроек файла cookie.

Снова в частности нас интересуют параметры URL ?dir=<asc OR desc>&order=<whatever_metric_you_are_sorting_by>.Давайте выйдем на конечность и предположим, что параметр order вызывает метод «setCookie» или что-то вроде вызываемого типа.

Где мы находим это? Ну, это просто: все действия Magento по запросу могут выполняться от index.php до окончательного рендеринга интерфейса, поэтому он ДОЛЖЕН произойти где-то на этом пути! Используя этот метод, вы можете отслеживать практически любые действия в Magento.

Однако, чтобы сэкономить время от времени, мы также можем предположить, что файлы cookie, вероятно, не установлены , что часто в любой данной веб-среде. Запуск grep в каталоге Magento для ('core/cookie') возвращает 23 обращения в 14 файлах. Это сузило его довольно неплохо!

Из 23 показов, только 4 из них используют метод ('core/cookie')->set(). Из 4 с использованием метода set():

\app\code\core\Mage\Persistent\Model\Observer\Session.php - line 79 \app\code\core\Mage\Sales\Helper\Guest.php - line 100 \app\code\core\Mage\XmlConnect\controllers\ConfigurationController.php - line 112 \app\code\core\Mage\XmlConnect\controllers\Adminhtml\Connect\ConfigController.php - line 101

Из них 4, только 2 из них собираются иметь дело с конечным пользователем напрямую, а именно Session.php и Guest.php. Поскольку Guest.php является частью модуля Sales в Magento и частью метода loadValidOrder(), весьма маловероятно, что он имеет дело с сортировкой списка товаров. Это оставляет нас с 1 вариант слева, а именно:

\app\code\core\Mage\Persistent\Model\Observer\Session.php - line 79

Что осмотр этого кода говорит нам?

// Set new cookie 
if ($sessionModel->getId()) { 
    Mage::getSingleton('core/cookie')->set(
     Mage_Persistent_Model_Session::COOKIE_NAME, 
     $sessionModel->getKey(), 
     $persistentLifeTime 
    ); 
} 

То, что все файлы cookie хранятся, является идентификатором сеанса для сервера! Это почти как стандартная практика или что-то для современных веб-фреймворков! ;). Одно из наших предположений было неверным!

TL; DR Ответ

Сортировка по предпочтению сохраняется в серверной части сессии Magento для этого клиента, и напомнил, когда пользователь возвращается с ID хранится в куки.

Чтобы сделать так, Magento не спасает это, мы должны сделать следующее затем:

Magento 'Sort By' - How to make Magento forget which option was selected

я понял, вместо того, чтобы просто связывая ответ, я хотел бы объяснить, как получить от вашей линии думая о ответе, который намного более ценен, так как теперь вы понимаете, ПОЧЕМУ, что ответ правильный. Наслаждайтесь и наслаждайтесь кодированием.

Update

Поскольку SO нити я связывал принял ответ действительно не следовать протоколу Magento XML, но комментарий к ответу делает, я выложу его здесь с кредитом на Автор комментарий:

Вам нужно применить обновление макета со следующим XML для страниц, которые вы хотите Magento «забыть» порядок сортировки на:

<reference name="product_list_toolbar"> 
    <action method="disableParamsMemorizing" /> 
</reference> 
+0

Вау, какой ответ! спасибо – grindking

Смежные вопросы