Her şeyden önce, özel bir modül oluşturmanız ve aşağıdaki dosyaları oluşturmanız gerekir:
/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
Modülünüzü /app/etc/modules/Mycompany_Mymodule.xml dosyasında tanımlayın :
<?xml version="1.0"?>
<config>
<modules>
<Mycompany_Mymodule>
<active>true</active>
<codePool>local</codePool>
</Mycompany_Mymodule>
</modules>
</config>
Yönetici görünümünü güncelleyen düzen dosyasını tamamlayın (bunu önce yapmak istiyorum çünkü unutmak istemiyorum).
/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>
Bu içeriğe sahip config dosyasını oluşturun : /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>
Burada denetleyiciyi, menü erişimini ve izinlerini, modeli, blokları ve yardımcıyı tanımlarız.
Izgarayı oluşturun ve /app/code/local/Mycompany/Mymodule/Block/adminhtml/Mymodule/Grid.php sütunlarını belirtin :
<?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);
}
}
Bu dosya en açık ancak belirli satırlar hakkında size bazı ipuçları veriyorum:
// bu satır veri almak için kullanılacak modeli gösterir.
$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) {
Bir sonraki adım için /app/code/local/Mycompany/Mymodule/Block/adminhtml/Mymodule.php ızgara kabını bloğunu oluşturun :
<?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');
}
}
Burada ekle düğmesini kaldırmak için bu satırı ekliyoruz: // Bu, her zaman parent::__construct();
satırın peşinde olmalı .$this->_removeButton('add');
/App/code/local/Mycompany/Mymodule/Block/Mymodule.php blok konteynerini oluşturun :
<?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 denetleyicisini oluşturun :
<?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;
}
}
Sonra boş yardımcı /app/code/local/Mycompany/Mymodule/Helper/Data.php :
<?php
class Mycompany_Mymodule_Helper_Data extends Mage_Core_Helper_Abstract
{
}
Ve sonuncusu /app/code/local/Mycompany/Mymodule/Model/Mymodule.php verilerini getirecek modeli oluşturduk :
<?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;
}
}
?>
Bu, Magento çekirdek modellerinden veri alan özel bir modeldir, burada herhangi bir model tanımlayabilir veya kendi DB / tablolarınız varsa rapor verilerini buradan alabilirsiniz. // bu satır varsayılan olarak gelen orijinal sorguyu sıfırlar.$this->_reset();
Tüm bu dosyaları eklemeye çalıştım, ancak raporun yeni menü öğesine tıkladığımda boş bir sayfa belirdi.