gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:32:10 26 4
gpt4 key购买 nike

我需要在 magento admin 的组价部分添加2 个新列

我已经检查了模板文件。

app/design/adminhtml/default/default/template/catalog/product/edit/price/group.phtml

我在那里添加了新的列,但是..

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

有什么建议吗?

谢谢。

最佳答案

我遇到了同样的问题。 Samuel Coman 的回答对我帮助很大。更准确地说,您必须修改三个文件。我添加了整数列“popularity”(由 xml-rpc 方法使用),但规则是相同的。这是我的例子。

第一个文件

magento/app/design/adminhtml/default/default/template/catalog/product/edit/price/group.phtml

在第 50 行附近的表中添加新的 <th> :

<th><?php echo $this->getPriceColumnHeader(Mage::helper('catalog')->__('Popularity')); ?></th>

var groupPriceRowTemplate在第 67 行附近添加新的 <td> :

+ '<td><input class="<?php echo $_htmlClass; ?>" type="text" name="<?php echo $_htmlName; ?>[{{index}}][popularity]" value="{{popularity}}" id="group_price_row_{{index}}_popularity"/></td>'

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];
}

addItem 中添加您的专栏调用,第 165 行:

groupPriceControl.addItem('<?php echo $_item['website_id']; ?>', '<?php echo $_item['cust_group']; ?>', '<?php echo sprintf('%.2f', $_item['price']); ?>', '<?php echo sprintf('%.0f', $_item['popularity']); ?>', <?php echo (int)!empty($_item['readonly']); ?>);

第二个文件
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/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方法,如_prepareDataForTable在里面它会在数据库中找到你的新列。

比起您必须将您的列添加到组价格表和层级价格表,因为它使用相同的保存方法,所以在您的数据库命令的 mysql 中运行类似于以下内容:

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

最后但同样重要的是,请记住刷新缓存 - 如果不这样做,系统将找不到新列。

希望对大家有帮助。

关于magento - 如何在 magento 中的组价格部分添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25482670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com