Как исправить ошибку 404 для страниц товаров в Magento 1.9.1.0 для недавно просмотренных товаров


У меня было 404 страницы для продуктов после истечения срока действия сеанса пользователя. Вы можете прочитать инструкции по воспроизведению ошибки здесь:

Http://www.magentocommerce.com/bug-tracking/issue/index/id/541

Как это исправить?

Author: george, 2015-01-24

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

Вы можете убедиться, что эта функция работает автор:

  1. Включить ведение системного журнала
  2. В функции mergeVisitorProductIndex добавьте оператор Mage::log(). Я добавил один в приведенном выше примере. Просто раскомментируйте строку.
  3. Перейдите на страницу продукта и добавьте продукт для сравнения. Затем перейдите к другому продукту и добавьте его для сравнения.
  4. Перейдите в раздел var/log/system.log, чтобы просмотреть сообщение от мага::log().
 2
Author: seanbreeden, 2015-01-26 19:22:14

В файле

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);
 1
Author: george, 2015-01-24 20:10:18