自動インクリメントフィールド以外の管理グリッドを作成するにはどうすればよいですか?


7

編集可能な管理グリッドを作成したいのですが。問題は、このグリッドのid列が非自動インクリメント値になることです。これは実装可能ですか?

これに関連するチュートリアルや記事を提案できますか?

更新:magento属性コレクションをカスタムテーブルに結合することで得られるコレクションを使用しています。ただし、以下の提供されたコードには、製品属性コレクションのみが含まれています。ID列にはattribute_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));
    }
}

私のグリッドは以下の通りです。 ここに画像の説明を入力してください


良い質問。+1。質問に詳細を追加してください。グリッドのデータベースから実際のコレクションをロードしていますか?はいの場合、その詳細を提供します。可能であれば、グリッドファイルを表示してください
Rajeev K Tomy

どんな提案でも本当に感謝します
Sukeshini

どうもありがとう。質問を編集しました。コレクションは実際の物理テーブルからのものではありません。
スケシニ2015

その場合は、グリッドページで使用しているコレクションをお知らせください
Rajeev K Tomy

質問を再度更新
Sukeshini 2015

回答:


1

編集アクションを追加し、そのアクションとともにいくつかの値を渡すには、以下のコードを使用できます

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

これにより、行のURLがjsイベントハンドラーにアタッチされ、グリッド項目をクリックするとeditAction、コントローラーファイルでトリガーされます。このようなパラメーターを取得できます。

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

    public function editAction()
    {
         $id = (int) $this->getRequest()->getParam('id');
    }
}

回答ありがとうございます。ただし、アクション列は使用していません。グリッドコンテナーに保存ボタンがあり、ユーザーがそのボタンをクリックしたときにすべての変更を保存したい
Sukeshini

わかりませんでした。行が編集されたときにattrbute idをどのように渡す必要があるかを知りたいと言いましたか?getRowUrlそのために使用されます。actionここに列を追加したくありません。これを追加するだけで、任意の行をクリックするとeditAction、コントローラーでトリガーされます
Rajeev K Tomy

これがグリッドのように見えても、実際にはフォームコンテナがグリッドを保持します。したがって、フォームを送信するためのボタンは1つしかありません。私は各行を提出するつもりはありません
スケシニ

申し訳ありません。次に、実際にここで保存しようとしているものは何ですか。グリッドページからですか?各行を編集するための編集ページはありませんか?
Rajeev K Tomy

編集はグリッド自体で行うことができ、編集ページにリダイレクトする必要はありません。添付画像をご確認ください。それはあなたに明確な理解を与えると思います
スケシニ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.