通过编程方式设置Magento产品组权限


Set Magento Product Group Permissions Programatically

当你在Magento中编辑一个产品时,有一个权限选项卡,上面有两个多选择。

禁用

产品

隐藏产品价格

我们需要通过包含'Mage.php'并使用脚本更新禁用组来编程地设置禁用产品组。

例如,我们想禁用一个产品的10个特定组。我们已经能够在脚本管理界面中做几乎所有你可以做的事情,所以应该有一种方法可以使用Mage::getModel('catalog/product')或其他模型来访问它。调用一个函数,传入要将产品设置为禁用的组ID。

但似乎找不到它。

谢谢!

找到数据存储在数据库中的位置,最后直接修改了数据库。

$groupsDisabledArray是一个数组,其中包含我想要禁用产品权限的每个组的ID。magento中的数据只是存储为一个逗号分隔的Group ID

列表。

的例子:

1,2,3,4,5,6,7,8,9,10

我将禁用组ID的数组内拆为逗号分隔的列表

$groupsList=implode(",", $groupsDisabledArray);

然后插入或更新catalog_product_entity_text表,这是存储值的地方。

值存储在目录_product_entity_text中,其中

entity_id = PRODUCT_ID
attribute_id = 155 (This corresponds to the table eav_attribute where attribute_code = 'aw_cp_disable_product')
entity_type_id = 4 (This corresponds to table eav_entity_type where entity_type_code = 'catalog_product')
store_id = STORE_ID (If you just have one store you should just be able to put 0 here for the Default Store)

执行下面完整更新的代码。可能需要更新Mage.php的路径,这取决于你把脚本放在哪里。

include("/app/Mage.php");
/* Get DB Connections */
$resource = Mage::getSingleton('core/resource');
$readConnection = $resource->getConnection('core_read');
$writeConnection = $resource->getConnection('core_write');
$tableName = $resource->getTableName('catalog_product_entity_text');
/* $groupsDisabledArray - Array of all of the Magento Group ID's I want to disable this product for */
$groupsList=implode(",", $groupsDisabledArray);
$sql="SELECT * FROM $tableName WHERE entity_id=$product_id AND attribute_id=155 and entity_type_id=4 AND store_id=0;";
$results = $readConnection->fetchAll($sql);
if (count($results) > 0) {
    $sql="UPDATE $tableName SET value='$groupsList' WHERE entity_id=$product_id AND attribute_id=155 and entity_type_id=4 AND store_id=0;";
}
else
{
    $sql="INSERT INTO $tableName (entity_id, entity_type_id, store_id, attribute_id, value) VALUES ($product_id, 4, 0, 155, '$groupsList')";
}
$writeConnection->query($sql);