【问题标题】:Add custom select dropdown in magento grid在 magento 网格中添加自定义选择下拉菜单
【发布时间】:2015-11-13 10:37:12
【问题描述】:

我正在尝试在我的 magento 网格中添加一个带有 (select/options) 的自定义下拉列表,但它不起作用,我尝试了

$this->addColumn('dropdown', array(
'header' => Mage::helper('catalog')->__('Dropdown'),
'filter'    => false,
'sortable'  => false,
'type'=> 'options',
'options' => array('First'=>'firstvalue', 'second' =>'secondvalue')
));

我没有使用来自数据库的值,而是来自 API,起初我想在我的网格上显示这个选择下拉列表,但我看到的只是一个空白区域。
谢谢。

编辑:

实际上我需要做的是第一行的下拉菜单,第二行是我提供的代码。
我可以添加类似“视图”列的链接,但它不适用于下拉菜单

【问题讨论】:

  • 有什么错误? API 是否真的返回结果?
  • 我只是想显示选择下拉菜单,我还没有使用 API。显示网格,但“下拉”列为空白
  • 也许这会对你有所帮助:magento.stackexchange.com/questions/5190/…
  • 此链接中提到的是如何向产品添加值(属性)而不是如何显示自定义下拉菜单

标签: php magento drop-down-menu


【解决方案1】:

有两种方法可以做你想做的事:

第一种方式:

$this->addColumn('dropdown', array(
    'header' => Mage::helper('catalog')->__('dropdown'),
    'filter'    => false,
    'sortable'  => false,
    'index' => 'stores',
    'type' => 'select',
    'values' => array('First'=>'firstvalue', 'second' =>'secondvalue')
));

所以它会直接显示在你的网格上

第二种方式:

$this->addColumn('dropdown', array(
    'header' => Mage::helper('catalog')->__('dropdown'),
    'filter'    => false,
    'sortable'  => false,
    'index' => 'stores',
    'renderer' => 'Module_ModuleName_Block_Adminhtml_Renderer_Dropdown',
));

然后你需要在Modulename\Block\Adminhtml\Renderer\ 中创建一个Dropdown.php 文件:

<?php
class Module_Modulename_Block_Adminhtml_Renderer_Dropdown extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract{

public function render(Varien_Object $row) {
    $html = '<select>';
    $html .= '<option value="First">First value</option>';
    $html .= '<option value="Second">Second value</option>';
    $html .= '</select>';
    return $html;
  }
}

您只需将ModuleModulename 替换为您的,并将Dropdown 替换为您想要的。

【讨论】:

    【解决方案2】:

    如果可以,为什么不调用您的 api 并使用安装脚本将它们保存到数据库中 like this one. 然后以通常的方式在您的 magento 网格中添加列 (great tutorial here) 接下来,set up a cron 使用 modifyColumn 定期更新您的 api 中的信息(至少每 5 分钟一次)

    这样您就不必在每次加载页面时都不断地从外部 api 加载。

    希望这会有所帮助!

    【讨论】:

    • 我不能这样做,因为我正在创建一个扩展,而且在每次 API 调用之后,值可以随时更改
    • 好吧,仍然设置一个数据库列并使用 inchoo.net 教程在 _addColumnFilterToCollection 内的每次调用中使用您的 api 数据进行预过滤和更新数据库。这行得通吗?
    【解决方案3】:

    我为此苦苦挣扎了很久,然后找到了GridControl extension

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-05
      • 2023-03-04
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多