Wie erstelle ich ein Admin-Grid mit einem nicht automatisch inkrementierten Feld?

7

Ich möchte ein Admin-Grid erstellen, das bearbeitet werden kann. Das Problem ist, dass die ID-Spalte dieses Rasters ein nicht automatischer Inkrementwert ist. Ist das möglich zu implementieren?

Kann jemand Tutorials oder Artikel dazu vorschlagen?

UPDATE: Ich verwende eine Sammlung, die durch Verbinden der Magento-Attributsammlung mit meiner benutzerdefinierten Tabelle gewonnen wird. Der unten angegebene Code enthält jedoch nur die Produktattribut-Sammlung. IDSpalte enthält dieattribute_id

Grid.php

<?php
class BalanceAP21Connector_ProductSync_Block_Adminhtml_Attributemapping_Edit_Tab_Attribute
    extends Mage_Adminhtml_Block_Widget_Grid
{
    /**
     * Constructor, ensures pagination is hidden
     */
    public function _construct()
    { 
        $this->setId('attribute_edit');
        $this->setUseAjax(true);
        $this->setDefaultSort('attribute_id');
        $this->setPagerVisibility(true);       
        $this->setSaveParametersInSession(true);         
        parent::_construct();
    }

    /**
     * Prepare grid collection object. Collection object populated
     * based on Apparel 21 module settings in admin configuration section.
     */
    public function _prepareCollection()
    {
        $collection = Mage::getResourceModel('catalog/product_attribute_collection');
        $collection->addFieldToFilter('frontend_label', array('notnull' => true));
        //echo $collection->getSelectSql();exit;
        $this->setCollection($collection);
        parent::_prepareCollection();
        return $this;
    }

    /**
     * Prepare columns for the grid
     */
    public function _prepareColumns()
    {
        $helper = Mage::helper('productsync');
        $this->addColumn('attribute_id', array(
                'header' => $helper->__('ID'),
                'index'  => 'attribute_id'
        ));

        $this->addColumn(
            'frontend_label',
            array(
                'header' => $helper->__('Reference Type Name'),
                'index'  => 'frontend_label'
            )
        );

        $this->addColumn(
            'attribute_ids',
            array(
                'header'   => $helper->__('Attribute'),
                'width'    => '1',
                'type'     => 'options',
                'index'    => 'attribute_ids',
                'editable' => true,
                'options'  => Mage::getModel('productsync/attributemapping_system_config_source_attributes')
                    ->toOptionArray(),
                'renderer' => 'productsync/adminhtml_attributemapping_widget_grid_column_renderer_options',
            )
        );

        $this->addColumn(
            'note_code',
            array(
                'header' => $helper->__('AP21 note code'),
                'index'  => 'note_code',
                'type'   => 'input'
            )
        );

        $this->addColumn(
            'note_regexp',
            array(
                'header' => $helper->__('Note regexp'),
                'index'  => 'note_regexp',
                'type'   => 'input'
            )
        );
        return parent::_prepareColumns();
    }

    public function getGridUrl()
    {
        //return $this->getUrl("*/*/edit", array("attribute_id" => $row->getId()));
        return $this->getUrl('*/*/grid', array('_current'=>true));
    }
}

Mein Gitter ist wie folgt. Geben Sie hier die Bildbeschreibung ein

Sukeshini
quelle
gute Frage. +1 dafür. Bitte fügen Sie der Frage weitere Details hinzu. Laden Sie eine echte Sammlung aus einer Datenbank in ein Raster? Wenn ja, geben Sie weitere Details dazu an. Wenn möglich, zeigen Sie uns Ihre Rasterdatei
Rajeev K Tomy
Bitte alle Vorschläge wäre wirklich dankbar
Sukeshini
Vielen Dank. Ich habe die Frage bearbeitet. Die Sammlung stammt nicht von einem echten physischen Tisch.
Sukeshini
Wenn dies der Fall ist, zeigen Sie uns bitte die Sammlung, die Sie auf Ihrer Rasterseite verwenden
Rajeev K Tomy
Aktualisierte die Frage erneut
Sukeshini

Antworten:

1

Verwenden Sie den folgenden Code, um eine Bearbeitungsaktion hinzuzufügen und einen Wert zusammen mit dieser Aktion zu übergeben

public function getRowUrl($row)
{
    return $this->getUrl('*/*/edit', array(
        'store'=>$this->getRequest()->getParam('store'),
        'id'=>$row->getId())
    );
}

Dadurch wird eine Zeilen-URL an js Ereignishandler angehängt. Wenn Sie also auf ein Rasterelement klicken, wird dies editActionin Ihrer Controller-Datei ausgelöst . Sie können diese Parameter wie folgt erhalten.

<?php
class [Namespace]_[Module]_[Some]Controller extends Mage_Adminhtml_Controller_Action
{

    public function editAction()
    {
         $id = (int) $this->getRequest()->getParam('id');
    }
}
Rajeev K Tomy
quelle
Vielen Dank für die Antwort, aber ich verwende keine Aktionsspalte. Es gibt eine Schaltfläche zum Speichern im
Rastercontainer
Ich habe dich nicht verstanden. Sie sagten, Sie möchten wissen, wie die attrbute-ID übergeben werden soll, wenn eine Zeile bearbeitet wird? getRowUrlwird verwendet, um das zu tun. Sie möchten actionhier keine Spalte hinzufügen . Fügen Sie dies einfach hinzu, dann klicken Sie auf eine beliebige Zeile, die editActionin Ihren Controllern ausgelöst wird
Rajeev K Tomy
Auch wenn dies wie ein Raster aussieht, enthält es tatsächlich ein Formularcontainer. Es gibt also nur eine Schaltfläche zum Senden des Formulars. Ich werde nicht jede Zeile einreichen
Sukeshini
Es tut mir Leid. Was ist dann wirklich das, was Sie hier speichern wollen? Ich meine von der Rasterseite? und Sie haben hier keine Bearbeitungsseite, um jede Zeile zu bearbeiten?
Rajeev K Tomy
Die Bearbeitung kann im Raster selbst erfolgen. Sie müssen nicht zu einer Bearbeitungsseite umleiten. Bitte überprüfen Sie das Bild, das ich angehängt habe. Ich denke, das wird Ihnen ein klares Verständnis geben
Sukeshini