Как исправить ошибку 404 для страниц товаров в Magento 1.9.1.0 для недавно просмотренных товаров
У меня было 404 страницы для продуктов после истечения срока действия сеанса пользователя. Вы можете прочитать инструкции по воспроизведению ошибки здесь:
Http://www.magentocommerce.com/bug-tracking/issue/index/id/541
Как это исправить?
2 answers
В файле app/code/core/Mage/Reports/Model/Resource/Helper/Mysql4.php
есть функция под названием mergeVisitorProductIndex()
. Вместо редактирования ядра для изменения этой функции вам следует переопределить помощника по ресурсам. Это немного отличается от переопределения стандартного помощника, но на самом деле только в синтаксисе config.xml .
Сначала создайте небольшое расширение.
В app/etc/modules
добавьте файл с именем George_Solution.xml
.
George_Solution.xml
содержание:
<?xml version="1.0"?>
<config>
<modules>
<George_Solution>
<active>true</active>
<codePool>local</codePool>
</George_Solution>
</modules>
</config>
codePool
является "локальным", что означает, что ваш модуль будет находиться в "приложении/коде/локальном" и George_Solution
означает, что это будет в разделе "Джордж/Решение". Разместив этот файл в "app/etc/modules", сообщите Magento, где искать ваше расширение.
Затем создайте файловую структуру для вашего расширения. Перейдите в раздел "приложение/код/локальный" и создайте папку с именем "Джордж". Внутри George создайте еще одну папку под названием "Решение". Полный путь будет "приложение/код/локальный/George/Решение/".
Теперь создайте свой файл config.xml
внутри "etc". Полный путь будет "app/code/local/George/Solution/etc/config.xml ".
config.xml
содержание:
<config>
<global>
<models>
<reports_resource>
<rewrite>
<helper_mysql4>George_Solution_Reports_Model_Resource_Helper_Mysql4</helper_mysql4>
</rewrite>
</reports_resource>
</models>
</global>
</config>
Теперь, когда у вас есть расширенный помощник по ресурсам, вы можете добавить свою измененную функцию. Вам нужно только добавить функцию, в которой вы что-то изменили.
Создайте файловую структуру: George/Solution/Reports/Model/Resource/Helper
В папке Helper
создайте Mysql4.php
Mysql4.php
содержание:
<?php
class George_Solution_Reports_Model_Resource_Helper_Mysql4 extends Mage_Reports_Model_Resource_Helper_Mysql4 {
public function mergeVisitorProductIndex($mainTable, $data, $matchFields) {
// Mage::log("My mergeVisitorProductIndex works!");
// Old line: $result = $this->_getWriteAdapter()->insertOnDuplicate($mainTable, $data, array_keys($data));
// Your new line:
$result = $this->_getWriteAdapter()->insertOnDuplicate($mainTable, $data, $matchFields);
return $result;
}
}
Вся структура расширения такова:
app---etc---modules---George_Solution.xml
|
--code---local---George---Solution---etc---config.xml
|
--Reports-
|-Model-
|-Resource-
|-Helper---Mysql4.php
Вы можете убедиться, что эта функция работает автор:
- Включить ведение системного журнала
- В функции
mergeVisitorProductIndex
добавьте оператор Mage::log(). Я добавил один в приведенном выше примере. Просто раскомментируйте строку. - Перейдите на страницу продукта и добавьте продукт для сравнения. Затем перейдите к другому продукту и добавьте его для сравнения.
- Перейдите в раздел var/log/system.log, чтобы просмотреть сообщение от мага::log().
В файле
app/code/core/Mage/Reports/Model/Resource/Helper/Mysql4.php
Изменить строку 48 с:
$result = $this->_getWriteAdapter()->insertOnDuplicate($mainTable, $data, array_keys($data));
Кому:
$result = $this->_getWriteAdapter()->insertOnDuplicate($mainTable, $data, $matchFields);