Это старый вопрос, но это первый результат 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>
Но это не имеет смысла для пользовательского опыта. –
Возможно, вам нужно объяснить более подробно, но из того, что я собираю, если пользователь хочет увидеть элементы поиска, отображаемые определенным образом, что это их выбор. Опять же, если Cookie хранит его, вам либо нужно удалить cookie при загрузке страницы, либо не дать пользователю возможность в первую очередь – GarytheWorm