Установить количество записей до $ this-> setCollection ($ collection); - PullRequest
0 голосов
/ 14 мая 2019

Как установить количество коллекций перед настройкой для сетки.

Основная коллекция продаж:
$ collection = Mage :: getModel ('sales / order')-> getCollection ()

            ->addAttributeToFilter('created_at', array('gteq' =>$fromDate))
            ->addAttributeToFilter('created_at', array('lteq' =>$toDate))
            ->addAttributeToFilter('status',array('eq'=>Mage_Sales_Model_Order::STATE_COMPLETE));

Присоединился к этой коллекции:

$Table = Mage::getModel('amorderattr/attribute')->getResource()->getTable('amorderattr/order_attribute');
        $collection->getSelect()->joinLeft(array('custom_attributes' => $amastyTable), 'main_table.entity_id = custom_attributes.order_id',array('is_first_order'));

Загружена другая коллекция:

$CustomersCollection = Mage::getModel('customer/customer')->getCollection();
        $newCustomersCollection = $CustomersCollection
            ->addAttributeToFilter('created_at',array('from'=>$fromDate,'to'=>$toDate));
        if(strlen($storeId)==1)
            $newCustomersCollection->addFieldToFilter('website_id',array('eq'=>Mage::getModel('core/store')->load($storeId)->getWebsiteId()));
        else if($storeArr){
            $newCustomersCollection->addFieldToFilter('website_id',array('eq'=>Mage::getModel('core/store')->load($storeArr[0])->getWebsiteId()));
        }
        $newCustomers = count($newCustomersCollection);

периодов времени:

$frm = date("d M Y", strtotime($filterData->getData('from')));
        $to = date("d M Y", strtotime($filterData->getData('to')));
        $period=(string)$frm." - ". (string)$to;

Другая коллекция:

$totalAccountsCollection = Mage::getModel('customer/customer')->getCollection();
        if(strlen($storeId)==1)
            $totalAccountsCollection->addFieldToFilter('website_id',array('eq'=>Mage::getModel('core/store')->load($storeId)->getWebsiteId()));
        else if($storeArr){
            $totalAccountsCollection->addFieldToFilter('website_id',array('eq'=>Mage::getModel('core/store')->load($storeArr[0])->getWebsiteId()));
        }
        $totalAccounts=count($totalAccountsCollection);

Снова другая коллекция Загружен:

$CustomersCollection1 = Mage::getModel('customer/customer')->getCollection()
            ->addAttributeToFilter('created_at',array('from'=>$fromDate,'to'=>$toDate));;
        $i=0;
        foreach ($CustomersCollection1->getData() as $customer) {
            $salesOrderCollection2 = Mage::getModel('sales/order')->getCollection()
                ->addAttributeToFilter('customer_id', array('eq' => $customer['entity_id']));
            if(!count($salesOrderCollection2->getData())) {
                $i++;
            }
        }
        $customer_having_account_but_no_order = $i;

Опять загружена другая информация:

/* Total Customer Of USD Website starts */

        $USDCustomersCollection = Mage::getModel('customer/customer')->getCollection();
        $USDCustomersCollection
            ->addFieldToFilter('website_id',array('eq'=>1))
            ->addAttributeToFilter('created_at',array('from'=>$fromDate,'to'=>$toDate));;
        $USDAccounts=count($USDCustomersCollection->getData());

        /* Total Customer Of USD Website ends */



        /* Total Customer Of EURO Website starts */

        $EUROCustomersCollection = Mage::getModel('customer/customer')->getCollection();
        $EUROCustomersCollection
            ->addFieldToFilter('website_id',array('eq'=>2))
            ->addAttributeToFilter('created_at',array('from'=>$fromDate,'to'=>$toDate));;
        $EUROAccounts=count($EUROCustomersCollection->getData());

        /* Total Customer Of EURO Website starts */

И, наконец, выбираем из нее столбцы:

$collection->getSelect()
            ->reset(Zend_Db_Select::COLUMNS)
            ->columns('COUNT(*) as total_orders')
            ->columns('SUM(custom_attributes.is_first_order) as first_order')
            ->columns('SUM(main_table.customer_is_guest) as is_guest')
            ->columns('COUNT(*) - (SUM(main_table.customer_is_guest) + SUM(custom_attributes.is_first_order)) as returning_accounts');

        $collection->getSelect()->columns(array('new_accounts_created' => new Zend_Db_Expr($newCustomers)))
                                 ->columns(array('period' => new Zend_Db_Expr("'".$period."'")))
                                 ->columns(array('customer_having_account_but_no_order' => new Zend_Db_Expr($customer_having_account_but_no_order)))
                                 ->columns(array('usd_customer_account' => new Zend_Db_Expr($USDAccounts)))
                                 ->columns(array('euro_customer_account' => new Zend_Db_Expr($EUROAccounts)))
                                ->columns(array('total_accounts' => new Zend_Db_Expr($totalAccounts)));

И, наконец, установка моей коллекции в prepareCollection:

$ this-> setCollection ($ collection);

Мне нужно оптимизировать ее и вокончательная установка коллекции в $ this-> setCollection () этот метод использует 25 результатов в качестве результата, но я получаю только одну строку из положенного.

Поэтому моя нумерация страниц в сетке показывает 25 записей вместо 1 (rау, который получает)

Check refernce image

1 Ответ

0 голосов
/ 17 мая 2019

Чтобы это исправить, мне нужно отредактировать один из ваших основных файлов. Так как редактировать файл ядра не рекомендуется, я перезаписал файл ядра. Переопределяющий модуль LIB

Скопированный файл Db.php из magento / lib / Varien / Data / Collection / Db.php Вставьте его в локальный каталог, чтобы структура результирующей папки выглядела так: magento / app / code / local / Varien / Data / Collection / Db.php

Я пробовал так много способов Наконец, я использовал getSelectCountSql (), а также getSize ()

...