Проблема переопределения коллекции моделей


В настоящее время я пытаюсь создать модуль для исправления основной ошибки Magento, как описано здесь , однако после этого и перехода к Отчеты > Корзина покупок > Брошенные тележки , я получаю следующую ошибку:

Неустранимая ошибка: Вызов функции-члена prepareForAbandonedReport() на логическом в/home/stagestickers4/public_html/app/code/core/Mage/Adminhtml/Block/Report/Shopcart/Abandoned/Grid.php в режиме онлайн 57

App/etc/modules/COMPANY_AbandonCart.xml

<?xml version="1.0"?>
<config>
    <modules>
        <COMPANY_AbandonCart>
            <active>true</active>
            <codePool>local</codePool>
        </COMPANY_AbandonCart>
    </modules>
</config> 

App/code/local/COMPANY/AbandonCart/Model/Resource/Quote/Collection.php

<?php
class COMPANY_AbandonCart_Model_Resource_Quote_Collection extends Mage_Reports_Model_Resource_Quote_Collection
{
    public function addCustomerData($filter = null)
    {
        $customerEntity          = Mage::getResourceSingleton('customer/customer');
        $attrFirstname           = $customerEntity->getAttribute('firstname');
        $attrFirstnameId         = (int) $attrFirstname->getAttributeId();
        $attrFirstnameTableName  = $attrFirstname->getBackend()->getTable();

        $attrLastname            = $customerEntity->getAttribute('lastname');
        $attrLastnameId          = (int) $attrLastname->getAttributeId();
        $attrLastnameTableName   = $attrLastname->getBackend()->getTable();

        $attrMiddlename          = $customerEntity->getAttribute('middlename');
        $attrMiddlenameId        = (int) $attrMiddlename->getAttributeId();
        $attrMiddlenameTableName = $attrMiddlename->getBackend()->getTable();

        $attrEmail       = $customerEntity->getAttribute('email');
        $attrEmailTableName = $attrEmail->getBackend()->getTable();

        $adapter = $this->getSelect()->getAdapter();
        $customerName = $adapter->getConcatSql(array('cust_fname.value', 'cust_mname.value', 'cust_lname.value',), ' ');
        $this->getSelect()
            ->joinInner(
                array('cust_email' => $attrEmailTableName),
                'cust_email.entity_id = main_table.customer_id',
                array('email' => 'cust_email.email')
            )
            ->joinInner(
                array('cust_fname' => $attrFirstnameTableName),
                implode(' AND ', array(
                    'cust_fname.entity_id = main_table.customer_id',
                    $adapter->quoteInto('cust_fname.attribute_id = ?', (int) $attrFirstnameId),
                )),
                array('firstname' => 'cust_fname.value')
            )
            ->joinLeft(
                array('cust_mname' => $attrMiddlenameTableName),
                implode(' AND ', array(
                    'cust_mname.entity_id = main_table.customer_id',
                    $adapter->quoteInto('cust_mname.attribute_id = ?', (int) $attrMiddlenameId),
                )),
                array('middlename' => 'cust_mname.value')
            )
            ->joinInner(
                array('cust_lname' => $attrLastnameTableName),
                implode(' AND ', array(
                    'cust_lname.entity_id = main_table.customer_id',
                     $adapter->quoteInto('cust_lname.attribute_id = ?', (int) $attrLastnameId)
                )),
                array(
                    'lastname'      => 'cust_lname.value',
                    'customer_name' => $customerName
                )
            );

        $this->_joinedFields['customer_name'] = $customerName;
        $this->_joinedFields['email']         = 'cust_email.email';

        if ($filter) {
            if (isset($filter['customer_name'])) {
                $likeExpr = '%' . $filter['customer_name'] . '%';
                $this->getSelect()->where($this->_joinedFields['customer_name'] . ' LIKE ?', $likeExpr);
            }
            if (isset($filter['email'])) {
                $likeExpr = '%' . $filter['email'] . '%';
                $this->getSelect()->where($this->_joinedFields['email'] . ' LIKE ?', $likeExpr);
            }
        }

        return $this;
    }
}

App/code/local/COMPANY/AbandonCart/etc/config.xml##

<?xml version="1.0"?>
<config>
    <modules>
        <COMPANY_AbandonCart>
            <version>0.0.1</version>
        </COMPANY_AbandonCart>
    </modules>
    <global>
        <models>
            <reports_resource>
                <rewrite>
                    <quote_collection>COMPANY_AbandonCart_Resource_Quote_Collection</quote_collection>
                </rewrite>
            </reports_resource>
        </models>
    </global>
</config>

Я читал, что расширение коллекции немного отличается от расширения обычной модели - угадывание какой-то проблемы XML-related?

Author: PЯINCƏ, 2017-10-16

2 answers

Ваше имя XML-класса неверно. Ваш класс модели

COMPANY_AbandonCart_Model_Resource_Quote_Collection

Но в вашем XML-переписывании говорится

COMPANY_AbandonCart_Resource_Quote_Collection

Редактировать:

  1. Это может быть основано на oppion, но я бы не стал исправлять ошибки в ядре с помощью перезаписей. Я бы скопировал исправленный файл в localкодовый пул (приложение/код/локальный/Mage/Reports/Model/Resource/Quote/Collection.php)
  2. Исправляя это, вы также можете заменить другой joinInner на joinLeft
  3. Возможно, используйте Magento-LTS вместо этого, где эта ошибка уже была исправлена;)
 4
Author: sv3n, 2017-10-16 18:09:24

Измените свой app/code/local/COMPANY/AbandonCart/etc/config.xml с помощью приведенного ниже кода исправлена фатальная ошибка:

<?xml version="1.0"?>
<config>
    <modules>
        <COMPANY_AbandonCart>
            <version>0.0.1</version>
        </COMPANY_AbandonCart>
    </modules>
    <global>
        <models>
            <reports_resource>
                <rewrite>
                    <quote_collection>COMPANY_AbandonCart_Model_Resource_Quote_Collection</quote_collection>
                </rewrite>
            </reports_resource>
        </models>
    </global>
</config>
 -1
Author: Ghazal Taimur, 2017-10-16 16:45:29