Как добавить сетку администратора


Я пытаюсь показать некоторые продукты на основе значения атрибута в таблице администратора.

Эта сетка администратора должна быть доступна из меню администратора.

Должно быть в следующем формате:

                                                                   SAVE

show in Homepage   Product_id   Product_name  type    SKU    searchable     
- yes
- no
- any

Некоторые моменты, касающиеся этого требования:

  • В этой сетке нет кнопки редактирования/добавления.
  • Коллекцию товаров можно сохранить с помощью кнопки СОХРАНИТЬ после установки/снятия флажка в столбце "показывать на домашней странице". ( Я думаю, что для этого требуется база данных таблица)
  • Сетка должна быть доступна из меню администратора.

Какие файлы я должен изменить, чтобы получить свое требование? если нет, по крайней мере, скажите мне, на какой код ссылаться в файлах Mage/core.

Author: Mr_Green, 2014-04-29

3 answers

Кто-то уже опубликовал ответ со ссылкой на блог inchoo. Я не знаю, почему пользователь удалил ответ позже.

Я следил за блогом inchoo и внес некоторые изменения в соответствии со своими потребностями.

Создайте следующую структуру каталогов:

app/code/local
     --> {namespace}
         --> {module}
             --> Block
             --> controllers
             --> etc
             --> Helper

Просто для примера,

 {namespace} => Namespace
 {module}    => Module

Добавьте следующие коды в соответствии с пути.

Приложение/etc/модули/{пространство имен}_{модуль}

    <Namespace_Module>
        <active>true</active>
        <codePool>local</codePool>
    </Namespace_Module>

Приложение/код/локальное/{пространство имен}/{модуль}/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Module>
            <version>0.0.0.1</version>
        </Namespace_Module>
    </modules>
    <global>
        <blocks>
            <namespace_module>
                <class>Namespace_Module_Block</class>
            </namespace_module>
        </blocks>
        <helpers>
            <namespace_module>
                <class>Namespace_Module_Helper</class>
            </namespace_module>
        </helpers>
    </global>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <namespace_module before="Mage_Adminhtml">Namespace_Module_Adminhtml</namespace_module>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

Приложение/код/локальное/{пространство имен}/{модуль}/etc/adminhtml.xml

<?xml version="1.0"?>
<config>
    <menu>
        <sales> <!-- In menu, change as needed -->
            <children>
                <namespace_module translate="title" module="namespace_module">
                    <sort_order>10</sort_order> <!-- sort order in menu -->
                    <title>module title here</title>
                    <action>adminhtml/order/</action> <!-- controller action to call -->
                </namespace_module>
            </children>
        </sales>
    </menu>
</config>

Приложение/код/локальное/{пространство имен}/{модуль}/Helper/Data.php

<?php
class Namespace_Module_Helper_Data extends Mage_Core_Helper_Abstract
{
}

Приложение/код/локальное/{пространство имен}/{модуль}/Block/Adminhtml/Item/Grid.php

<?php
class Namespace_Module_Block_Adminhtml_Item_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
    public function __construct()
    {
        parent::__construct();
        $this->setId('namespace_module_grid');
        $this->setDefaultSort('entity_id');
        $this->setDefaultDir('DESC');
        $this->setSaveParametersInSession(true);
        $this->setUseAjax(true);
    }
    protected function _prepareCollection()
    {
        $collection = null; //Your collection code here instead of null
        $this->setCollection($collection);
        parent::_prepareCollection();
        return $this;
    }
    protected function _prepareColumns()
    {
        $helper = Mage::helper('namespace_module');
        $currency = (string) Mage::getStoreConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE);

        // To add a column. (column will be added if the field is available)
        $this->addColumn('entity_id', array(
            'header' => $helper->__('Product id'),
            'index'  => 'entity_id',
            'type'   => 'number'
        ));

        return parent::_prepareColumns();
    }

    //Include this if checkboxes are needed for the listed items
    protected function _prepareMassaction(){
        $this->setMassactionIdField('entity_id');
        $this->getMassactionBlock()->setFormFieldName('namespace_module');
        $this->getMassactionBlock()->addItem('status', array(
            'label'=> Mage::helper('namespace_module')->__('Save'),
            'url'  => $this->getUrl('*/*/massSave', array('_current'=>true))  // calling "massSaveAction" method in controller.
        ));
        return $this;
    }
    public function getGridUrl()
    {
        return $this->getUrl('*/*/grid', array('_current'=>true));
    }
}

Приложение/код/локальное/{пространство имен}/{модуль}/Block/Adminhtml/Item.php

<?php
class Namespace_Module_Block_Adminhtml_Item extends Mage_Adminhtml_Block_Widget_Grid_Container
{
    public function __construct()
    {
        $this->_blockGroup = 'namespace_module';
        $this->_controller = 'adminhtml_sales_order';
        $this->_headerText = Mage::helper('namespace_module')->__('Module items');
        parent::__construct();
        $this->_removeButton('add');
    }
}

Приложение/код/локальное/{пространство имен}/{модуль}/controllers/Adminhtml/ItemController.php

<?php
class Namespace_Module_Adminhtml_ItemController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        $this->_title($this->__('page title here'));
        $this->loadLayout();
        $this->_setActiveMenu('active menu name'); //looks like optional to me
        $this->_addContent($this->getLayout()->createBlock('namespace_module/adminhtml_item'));
        $this->renderLayout();
    }
    public function gridAction()
    {
        $this->loadLayout();
        $this->getResponse()->setBody(
            $this->getLayout()->createBlock('namespace_module/adminhtml_item_grid')->toHtml()
        );
    }
    public function massSaveAction(){
        $urlParam = $this->getRequest()->getParam('namespace_module');
        if(!is_array($urlParam)) {
            Mage::getSingleton('adminhtml/session')->addError(Mage::helper('namespace_module')->__('Please select Items.'));
        } 
        else {
            try {
                // Add action code here
                // Like, sql queries to update database table

                $this->_getSession()->addSuccess($this->__('Total of %d Items were successfully updated.', count($urlParam)));
            }
            catch (Mage_Core_Exception $e){
                Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            }
            catch (Exception $e) {
                Mage::getSingleton('adminhtml/session')->addError(Mage::helper('namespace_module')->__('There was an error updating Items.'));
                Mage::logException($e);
            }
        }
        $this->_redirect('*/*/index');
    }
}
 8
Author: Mr_Green, 2014-05-04 15:41:58

Вы можете попробовать Волшебство Но только если вы знаете, как это сделать, но хотите сделать это быстрее, иначе вы никогда не научитесь основам.

 3
Author: Enrique, 2014-12-07 23:14:07

Для того, о чем вы просите, я бы предложил взглянуть на Конечного создателя модуля Мариуса.

Это даст вам больше информации для достижения результатов, очень похожих на приведенную вами таблицу примеров, с возможностью связывать продукты и категории. Множественный выбор обновления статуса отключите/включите по умолчанию.

Если у вас уже есть большая его часть, возможно, не помешает поиздеваться сделайте это с помощью UMC и посмотрите, как это делается для действия "Изменить статус" в создаваемой им сетке.

 1
Author: B00MER, 2014-05-04 05:29:04