3

この関数は、Magento グリッドを設定して、対応する「削除」アクションを含むファイル名のリストを表示します。

問題は、削除アクションがパラメーター「ファイル名」を渡さないことです。( http://www.premasolutions.com/content/magento-manage-category-product-grid-edit-linkを参照してください) 検証のために TESTDUMP を持っていますが、次のページに印刷されません。

「params」は「addColumn->actions->url」の正当なアクションですか?

更新: コントローラーのコンストラクトと準備コレクションを追加しました。たぶん、私が使用しているコレクションのタイプが原因でしょうか?

クラス Rogue_Googlemerchant_Block_Adminhtml_Exporter_Grid

Rogue_Googlemerchant_Block_Adminhtml_Exporter_Grid extends Mage_Adminhtml_Block_Widget_Grid
{

public function __construct()
{
    parent::__construct();
    $this->setId('googlemerchantGrid');
    // This is the primary key of the database
    $this->setDefaultSort('filename');
    $this->setDefaultDir('ASC');
    $this->setSaveParametersInSession(true);
}

protected function _prepareCollection()
{
    $basePath = Mage::getBaseDir('base');
    $feedPath = $basePath . '/opt/googlemerchant/';
    $errPath = $basePath . '/var/log/googlemerchant/';
    $flocal = new Varien_Io_File();
    $flocal->open(array('path' => $feedPath));
    $dataCollection = new Varien_Data_Collection();

    foreach ($flocal->ls() as $item) {
        $dataObject = new Varien_Object();
        $dataObject->addData(
            array(
                'filename'     => $item['text'],
                'size'         => $item['size'] / 1000 . ' kb',
                'date_modified'=> $item['mod_date']
            )
        );
        $dataCollection->addItem($dataObject);
    }

    $this->setCollection($dataCollection);

    return parent::_prepareCollection();
}

    protected function _prepareColumns()
    {
        $this->addColumn('filename', array(
          'header'    => Mage::helper('googlemerchant')->__('File'),
          'align'     =>'left',
          'index'     => 'filename',
          'width'     => '200px',
        ));

        $this->addColumn('action', array(
            'header'  => Mage::helper('googlemerchant')->__('Action'),
            'width'   => '50px',
            'type'    => 'action',
    //      'getter'  => 'getId',
            'actions' => array(
                array(
                    'caption' => Mage::helper('googlemerchant')->__('Delete'),
                    'url'     =>
                        array(
                            'base'   => '*/*/delete',
                            'params' => array('filename' => 'TESTDUMP')
                        ),
                    'field'   => 'filename'
                )
            ),
            'filter'    => false,
            'sortable'  => false,
    //       'index'     => 'filename',
    //       'is_system' => true,
    ));
    }

}

クラス Rogue_Googlemerchant_Adminhtml_ExporterController

class Rogue_Googlemerchant_Adminhtml_ExporterController extends Mage_Adminhtml_Controller_Action
{

    public function deleteAction()
    {
        $filename = $this->getRequest()->getParam('filename');
        $basePath = Mage::getBaseDir('base');
        $feedPath = $basePath . '/opt/googlemerchant/';
        $errPath = $basePath . '/var/log/googlemerchant/';
        $flocal = new Varien_Io_File();
        $flocal->open(array('path' => $feedPath));
d($filename);
        if ($filename) {
            try{
                $flocal->rm($filename);
                Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('googlemerchant')->__('The file has been deleted.'));
                $this->_redirect('*/*/');
            }
            catch (Mage_Core_Exception $e) {
                $this->log($e);
                Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
                $this->_redirect('*/*/index');
                return;
            }
        }
die('here');
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Unable to find the file to delete.'));
        $this->_redirect('*/*/');
    }
}
4

1 に答える 1

5

アクション列のgetterは、コレクション項目で使用され、fieldパラメーターの引数値を取得します。

ハードコードされたファイル名を指定している理由、またはそれが機能するかどうかはわかりませんが、列構成を追加すると

'getter'  => 'getFilename'

params動作するはずのアクションからを削除します。

于 2012-06-22T09:10:13.357 に答える