Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在magento的组价格部分添加新列_Magento_Admin_Add_Multiple Columns_Product - Fatal编程技术网

如何在magento的组价格部分添加新列

如何在magento的组价格部分添加新列,magento,admin,add,multiple-columns,product,Magento,Admin,Add,Multiple Columns,Product,我需要在集团价格部分的magento admin中添加两个新列 我已经检查了模板文件 app/design/adminhtml/default/default/template/catalog/product/edit/price/group.phtml 我在那里添加了新的专栏,但是 如何在数据库中添加这两列并保存值。 有什么建议吗 谢谢。要添加列,请创建一个新模块,并在安装程序中更改表catalog\u product\u entity\u group\u price,然后添加所需的列 为了

我需要在集团价格部分的magento admin中添加两个新列

我已经检查了模板文件

app/design/adminhtml/default/default/template/catalog/product/edit/price/group.phtml
我在那里添加了新的专栏,但是

如何在数据库中添加这两列并保存值。

有什么建议吗


谢谢。

要添加列,请创建一个新模块,并在安装程序中更改表catalog\u product\u entity\u group\u price,然后添加所需的列

为了保存和显示数据,我希望您在Magento覆盖方面相当先进

您提到的文件从
Mage\u Adminhtml\u Block\u Catalog\u Product\u Edit\u Tab\u Price\u Group\u Abstract
获取一些数据,但实际数据是使用
loadPriceData
Mage\u Catalog\u Model\u Resource\u Product\u Attribute\u Backend\u Groupprice\u Abstract

价格保存在方法
afterSave
from
Mage\u Catalog\u Model\u Product\u Attribute\u Backend\u Groupprice\u Abstract
中,该方法调用
savePriceData
from
Mage\u Catalog\u Model\u Resource\u Product\u Attribute\u Backend\u Groupprice\u Abstract


您可以尝试覆盖这些方法,但可能会破坏一些Magento内容。这些价格也与指数挂钩。另一个选项是创建一个单独的模块,在产品保存时添加另一个观察者,将数据保存到一个单独的表中,并使用扩展名
Mage\u Adminhtml\u Block\u Catalog\u product\u Edit\u Tab\u Price\u Group\u Abstract
将其恢复。塞缪尔·科曼的回答对我帮助很大。更准确地说,您必须修改三个文件。我添加了整数列“普及度”(由XMLRPC方法使用),但规则是相同的。这是我的例子

第一个文件

magento/app/design/adminhtml/default/default/template/catalog/product/edit/price/group.phtml
magento/app/code/core/Mage/Catalog/Model/Resource/Product/Attribute/Backend/Groupprice/Abstract.php  
在第50行附近的表格中添加新的

var groupPriceControl
第95行中修改默认参数等:

    var data = {
        website_id: '<?php echo $this->getDefaultWebsite(); ?>',
        group: '<?php echo $this->getDefaultCustomerGroup(); ?>',
        price: '',
        popularity: '',
        readOnly: false,
        index: this.itemsCount++
    };

    if(arguments.length >= 3) {
        data.website_id = arguments[0];
        data.group = arguments[1];
        data.price = arguments[2];
        data.popularity = arguments[3];
    }
    if (arguments.length == 5) {
        data.readOnly = arguments[4];
    }
第二个文件
magento/app/code/core/Mage/Catalog/Model/Product/Attribute/Backend/Groupprice/Abstract.php

在这里,您必须修改
afterSave
方法,首先将列添加到数组
$new
,第316行:

        $new[$key] = array_merge(array(
            'website_id'        => $data['website_id'],
            'all_groups'        => $useForAllGroups ? 1 : 0,
            'customer_group_id' => $customerGroupId,
            'value'             => $data['price'],
            'popularity'        => $data['popularity'],
        ), $this->_getAdditionalUniqueFields($data));
然后,当您只更改新列并保存它时,您必须处理一个案例,因此在第349行,if(!empty($update))语句之后,执行以下操作:

    if (!empty($update)) {
        foreach ($update as $k => $v) {
            if ($old[$k]['price'] != $v['value'] || $old[$k]['popularity'] != $v['popularity']) {
                $price = new Varien_Object(array(
                    'value_id'  => $old[$k]['price_id'],
                    'value'     => $v['value'],
                    'popularity'=> $v['popularity'],
                ));
                $this->_getResource()->savePriceData($price);

                $isChanged = true;
            }
        }
    }
第三个文件

magento/app/design/adminhtml/default/default/template/catalog/product/edit/price/group.phtml
magento/app/code/core/Mage/Catalog/Model/Resource/Product/Attribute/Backend/Groupprice/Abstract.php  
这里修改
loadPriceData
方法以正确显示数据库中的值;只需将列添加到
$colums
变量的第49行:

    $columns = array(
        'price_id'      => $this->getIdFieldName(),
        'website_id'    => 'website_id',
        'all_groups'    => 'all_groups',
        'cust_group'    => 'customer_group_id',
        'price'         => 'value',
        'popularity'    => 'popularity',
    );
无需更改
savePriceData
方法,因为
\u prepareDataForTable
将在其中找到数据库中的新列

然后,您必须将列添加到group prices表和tier prices表中,因为它使用相同的保存方法,所以在数据库上的mysql中运行类似以下命令:

alter table catalog_product_entity_group_price add popularity integer;
alter table catalog_product_entity_tier_price add popularity integer;
最后,但并非最不重要的是,请记住刷新缓存-如果不这样做,系统将找不到新列

希望它能帮助别人

alter table catalog_product_entity_group_price add popularity integer;
alter table catalog_product_entity_tier_price add popularity integer;