การสร้างรายงานที่กำหนดเองใหม่ทั้งหมด


22

ส่วนใหญ่รายงานวีโอไอพีอาคารฟอรั่ม, บล็อก, tutorials, ฯลฯ ทั้งหมดดูเหมือนจะมุ่งเน้นไปที่พาวีโอไอพีรายงานที่มีอยู่และทั้งการคัดลอกหรือขยายมัน ส่วนใหญ่เป็นกริดที่เชื่อมโยงไปยังชุดข้อมูลที่เฉพาะเจาะจงและทั้งหมดมีตัวกรองมาตรฐานเช่นจาก / ถึงวันที่ & ช่วงเวลา (รวมถึงตัวกรองพิเศษในบางรายงาน)

อย่างไรก็ตามดูเหมือนว่าจะมีข้อมูลน้อยมากเกี่ยวกับวิธีสร้างรายงานที่กำหนดเองทั้งหมดด้วยตัวกรองที่กำหนดเอง

ตัวอย่างเช่นลูกค้าต้องการรายงานที่มีตัวกรองที่กำหนดเองสองตัวซึ่งรายงานกลับมาจากตัวชี้วัดรวมที่เรียบง่ายเพียงสองตัว


1
เป็นเพียงการอ้างอิงสำหรับทรัพยากร: stackoverflow.com/questions/7030255/…
B00MER

แม้สำหรับฉันที่จะแสดงหน้าว่างเดียวกันโปรดแนะนำสิ่งที่ต้องทำ

คำตอบ:


22

ก่อนอื่นคุณต้องสร้างโมดูลที่กำหนดเองสร้างไฟล์ต่อไปนี้:

    /app/etc/modules/Mycompany_Mymodule.xml 
    /app/design/adminhtml/default/default/layout/mymodule.xml 
    /app/code/local/Mycompany/Mymodule/Block/adminhtml/Mymodule/Grid.php
    /app/code/local/Mycompany/Mymodule/Block/adminhtml/Mymodule.php 
    /app/code/local/Mycompany/Mymodule/Block/Mymodule.php 
    /app/code/local/Mycompany/Mymodule/controllers/Adminhtml/MymoduleController.php 
    /app/code/local/Mycompany/Mymodule/etc/config.xml 
    /app/code/local/Mycompany/Mymodule/Helper/Data.php 
    /app/code/local/Mycompany/Mymodule/Model/Mymodule.php

กำหนดโมดูลของคุณใน/app/etc/modules/Mycompany_Mymodule.xml :

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

กรอกไฟล์เลย์เอาต์ให้สมบูรณ์ซึ่งจะอัปเดตมุมมองผู้ดูแลระบบ (ฉันจะทำสิ่งนี้ก่อนเสมอเพราะฉันไม่ต้องการลืม) /app/design/adminhtml/default/default/layout/mymodule.xml

<?xml version="1.0"?>
<layout version="0.1.0">
    <mymodule_adminhtml_mymodule_index>
        <reference name="content">
            <block type="mymodule/adminhtml_mymodule" name="mymodule" />
        </reference>
    </mymodule_adminhtml_mymodule_index>
</layout>

สร้างไฟล์ปรับแต่งด้วยเนื้อหา/app/code/local/Mycompany/Mymodule/etc/config.xml :

<?xml version="1.0"?>
<!-- 
/**
 * @category   Mycompany
 * @package    Mycompany_Mymodule
 * @author     Damian Alberto Pastorini
 */
 -->
<config>
    <modules>
        <Mycompany_Mymodule>
            <version>0.1.0</version>
        </Mycompany_Mymodule>
    </modules>
    <admin>
        <routers>
            <mymodule>
                <use>admin</use>
                <args>
                    <module>Mycompany_Mymodule</module>
                    <frontName>mymodule</frontName>
                </args>
            </mymodule>
        </routers>
    </admin>
    <adminhtml>
        <menu>
            <report>
                <children>
                    <mymodule translate="title" module="mymodule">
                        <title>Mymodule Report</title>
                        <action>mymodule/adminhtml_mymodule</action>
                    </mymodule>
                </children>
            </report>
        </menu>
        <acl>
            <resources>
                <all>
                    <title>Allow Everything</title>
                </all>
                <admin>
                    <children>
                        <report>
                            <children>
                                <mymodule translate="title" module="mymodule">
                                    <title>Mymodule Report</title>
                                    <action>mymodule/adminhtml_mymodule</action>
                                </mymodule>
                            </children>
                        </report>
                    </children>
                </admin>
            </resources>
        </acl>
        <layout>
            <updates>
                <mymodule>
                    <file>mymodule.xml</file>
                </mymodule>
            </updates>
        </layout>
    </adminhtml>
    <global>
        <models>
            <mymodule>
                <class>Mycompany_Mymodule_Model</class>
                <resourceModel>mymodule</resourceModel>
            </mymodule>
        </models>
        <resources>
            <mymodule_setup>
                <setup>
                    <module>Mycompany_Mymodule</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </mymodule_setup>
            <mymodule_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </mymodule_write>
            <mymodule_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </mymodule_read>
        </resources>
        <blocks>
            <mymodule>
                <class>Mycompany_Mymodule_Block</class>
            </mymodule>
        </blocks>
        <helpers>
            <mymodule>
                <class>Mycompany_Mymodule_Helper</class>
            </mymodule>
        </helpers>
    </global>
</config>

ที่นี่เราจะกำหนดตัวควบคุมการเข้าถึงเมนูและการอนุญาตแบบจำลองบล็อกและตัวช่วย

สร้างกริดและระบุคอลัมน์ทั้งหมด/app/code/local/Mycompany/Mymodule/Block/adminhtml/Mymodule/Grid.php :

<?php
 class Mycompany_Mymodule_Block_Adminhtml_Mymodule_Grid extends Mage_Adminhtml_Block_Report_Grid {

public function __construct() {
    parent::__construct();
    $this->setId('mymoduleGrid');
    $this->setDefaultSort('created_at');
    $this->setDefaultDir('ASC');
    $this->setSaveParametersInSession(true);
    $this->setSubReportSize(false);
}

protected function _prepareCollection() {
    parent::_prepareCollection();
    $this->getCollection()->initReport('mymodule/mymodule');
    return $this;
}

protected function _prepareColumns() {
    $this->addColumn('ordered_qty', array(
        'header'    =>Mage::helper('reports')->__('Quantity Ordered'),
        'align'     =>'right',
        'index'     =>'ordered_qty',
        'total'     =>'sum',
        'type'      =>'number'
    ));
    $this->addColumn('item_id', array(
        'header' => Mage::helper('mymodule')->__('Item ID'),
        'align' => 'right',
        'index' => 'item_id',
        'type'  => 'number',
        'total' => 'sum',
    ));
    $this->addExportType('*/*/exportCsv', Mage::helper('mymodule')->__('CSV'));
    $this->addExportType('*/*/exportXml', Mage::helper('mymodule')->__('XML'));
    return parent::_prepareColumns();
}

public function getRowUrl($row) {
    return false;
}

public function getReport($from, $to) {
    if ($from == '') {
        $from = $this->getFilter('report_from');
    }
    if ($to == '') {
        $to = $this->getFilter('report_to');
    }
    $totalObj = Mage::getModel('reports/totals');
    $totals = $totalObj->countTotals($this, $from, $to);
    $this->setTotals($totals);
    $this->addGrandTotals($totals);
    return $this->getCollection()->getReport($from, $to);
}
}

ไฟล์นี้ชัดเจนที่สุด แต่ฉันจะให้คำแนะนำบางอย่างเกี่ยวกับบรรทัดเฉพาะ:

// บรรทัดนี้ระบุรุ่นที่จะใช้รับข้อมูล

$this->getCollection()->initReport('mymodule/mymodule'); // it's used to indicate that this field must be totalized at the end. 
'total' =>'sum', // this is executed when you click on the rows grid, in case you return false (like the example) nothing will happen when you click on the rows grid. 
public function getRowUrl($row) {

สำหรับขั้นตอนถัดไปให้สร้างบล็อกคอนเทนเนอร์กริด/app/code/local/Mycompany/Mymodule/Block/adminhtml/Mymodule.php :

<?php
 class Mycompany_Mymodule_Block_Adminhtml_Mymodule extends Mage_Adminhtml_Block_Widget_Grid_Container {

public function __construct() {
    $this->_controller = 'adminhtml_mymodule';
    $this->_blockGroup = 'mymodule';
    $this->_headerText = Mage::helper('mymodule')->__('Mymodule Report');
    parent::__construct();
    $this->_removeButton('add');
}
}

ที่นี่เราเพิ่มบรรทัดนี้เพื่อลบปุ่มเพิ่ม: // ต้องอยู่หลังparent::__construct();บรรทัดเสมอ$this->_removeButton('add');

สร้างคอนเทนเนอร์บล็อก/app/code/local/Mycompany/Mymodule/Block/Mymodule.php :

<?php
 class Mycompany_Mymodule_Block_Mymodule extends Mage_Core_Block_Template {

public function _prepareLayout() {
    return parent::_prepareLayout();
}

public function getMymodule() {
    if (!$this->hasData('mymodule')) {
        $this->setData('mymodule', Mage::registry('mymodule'));
    }
    return $this->getData('mymodule');
} 
}

สร้างตัวควบคุม/app/code/local/Mycompany/Mymodule/controllers/Adminhtml/MymoduleController.php :

<?php

 class Mycompany_Mymodule_Adminhtml_MymoduleController extends Mage_Adminhtml_Controller_Action {

protected function _initAction() {
    $this->loadLayout();
    return $this;
}

public function indexAction() {
    $this->_initAction()
            ->renderLayout();
}

public function exportCsvAction() {
    $fileName = 'mymodule.csv';
    $content = $this->getLayout()->createBlock('mymodule/adminhtml_mymodule_grid')
                    ->getCsv();
    $this->_sendUploadResponse($fileName, $content);
}

public function exportXmlAction() {
    $fileName = 'mymodule.xml';
    $content = $this->getLayout()->createBlock('mymodule/adminhtml_mymodule_grid')
                    ->getXml();
    $this->_sendUploadResponse($fileName, $content);
}

protected function _sendUploadResponse($fileName, $content, $contentType='application/octet-stream') {
    $response = $this->getResponse();
    $response->setHeader('HTTP/1.1 200 OK', '');
    $response->setHeader('Pragma', 'public', true);
    $response->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true);
    $response->setHeader('Content-Disposition', 'attachment; filename=' . $fileName);
    $response->setHeader('Last-Modified', date('r'));
    $response->setHeader('Accept-Ranges', 'bytes');
    $response->setHeader('Content-Length', strlen($content));
    $response->setHeader('Content-type', $contentType);
    $response->setBody($content);
    $response->sendResponse();
    die;
}
}

จากนั้นผู้ช่วยเหลือที่ว่างเปล่า/app/code/local/Mycompany/Mymodule/Helper/Data.php :

<?php
class Mycompany_Mymodule_Helper_Data extends Mage_Core_Helper_Abstract
{

}

และสุดท้ายเราสร้างแบบจำลองที่จะนำข้อมูล/app/code/local/Mycompany/Mymodule/Model/Mymodule.php :

 <?php
    class Mycompany_Mymodule_Model_Mymodule extends Mage_Reports_Model_Mysql4_Order_Collection
{
    function __construct() {
        parent::__construct();
        $this->setResourceModel('sales/order_item');
        $this->_init('sales/order_item','item_id');
   }

    public function setDateRange($from, $to) {
        $this->_reset();
        $this->getSelect()
             ->joinInner(array(
                 'i' => $this->getTable('sales/order_item')),
                 'i.order_id = main_table.entity_id'
                 )
             ->where('i.parent_item_id is null')
             ->where("i.created_at BETWEEN '".$from."' AND '".$to."'")
             ->where('main_table.state = \'complete\'')
             ->columns(array('ordered_qty' => 'count(distinct `main_table`.`entity_id`)'));
        // uncomment next line to get the query log:
        // Mage::log('SQL: '.$this->getSelect()->__toString());
        return $this;
    }

    public function setStoreIds($storeIds)
    {
        return $this;
    }

    }
    ?>

นี่คือโมเดลที่กำหนดเองที่รับข้อมูลจากโมเดลหลักของ Magento ที่นี่คุณสามารถกำหนดรูปแบบใด ๆ หรือถ้าคุณมีฐานข้อมูล / ตารางของคุณเองคุณสามารถรับข้อมูลรายงานจากมันได้ // บรรทัดนี้รีเซ็ตคิวรีดั้งเดิมที่มาตามค่าเริ่มต้น$this->_reset();

ฉันพยายามเพิ่มไฟล์ทั้งหมด แต่เมื่อฉันคลิกที่รายการเมนูใหม่ของรายงานจะมีหน้าว่างปรากฏขึ้น


1
มันแสดงหน้าว่าง ความคิดใดที่จะแก้ปัญหานี้?
502_Geek

cpomes นี้ขึ้นกับหน้าว่างอัปเดตใด ๆ ?
Yehuda Schwartz

เพิ่งแก้ไขและรู้ว่าฉันเป็นคนงี่เง่า! โปรดอย่ายอมรับ :)
Wildcard27

มีใครแก้ไขปัญหาหน้าว่างหรือไม่
John Fonseka

ฉันต้องการสร้างรายงานรายการสั่งซื้อเปลี่ยนแปลงสิ่งที่ฉันต้องทำอย่างไร
จิ๊ก Parmar

1

เพียงแค่เปลี่ยนชื่อโฟลเดอร์adminhtmlที่จะAdminhtmlเป็นต่อด้านล่างเส้นทาง:

app / รหัส / ท้องถิ่น / myCompany / MyModule / บล็อก / adminhtml / Mymodule.php

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.