gpt4 book ai didi

php - Magento:用于选择 CMS 页面的自定义产品属性

转载 作者:可可西里 更新时间:2023-11-01 12:57:05 24 4
gpt4 key购买 nike

我想添加一个新的产品属性,该属性呈现一个下拉列表,其中包含所有 CMS 页面作为其选项。我创建了一个扩展并想通过安装脚本添加这个属性。但是在运行这个之后,Magento 破坏了 eav_entity_type 表...

到目前为止我尝试了什么:

mysql4-install-0.1.0.php:

$installer = $this;

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');

$installer->startSetup();

$setup->addAttribute('catalog_product', 'test_report', array(
'label' => 'Test report',
'required' => false,
'input' => 'select',
'source' => 'cmspageselect/entity_source',
'default' => 'none',
'position' => 1,
'sort_order' => 3,
));

$installer->endSetup();

cmspageselect/entity_source 类的来源:

class Mandarin_CMSPageSelect_Model_Source extends Mage_Eav_Model_Entity_Attribute_Source_Abstract {
/**
* Retrieve Full Option values array
*
* @param bool $withEmpty Add empty option to array
* @return array
*/
public function getAllOptions($withEmpty = true)
{
$storeId = $this->getAttribute()->getStoreId();
if (!is_array($this->_options)) {
$this->_options = array();
}
if (!isset($this->_options[$storeId])) {
$collection = Mage::getResourceModel('cms/page_collection')
->setPositionOrder('asc')
->setStoreFilter($this->getAttribute()->getStoreId())
->load();
$this->_options[$storeId] = $collection->toOptionIdArray();
}

$options = $this->_options[$storeId];
if ($withEmpty) {
array_unshift($options, array('label' => '', 'value' => ''));
}

return $options;
}

/**
* Get a text for option value
*
* @param string|integer $value
* @return string
*/
public function getOptionText($value)
{
$isMultiple = false;
if (strpos($value, ',')) {
$isMultiple = true;
$value = explode(',', $value);
}

$options = $this->getAllOptions(false);

if ($isMultiple) {
$values = array();
foreach ($options as $item) {
if (in_array($item['value'], $value)) {
$values[] = $item['label'];
}
}
return $values;
}

foreach ($options as $item) {
if ($item['value'] == $value) {
return $item['label'];
}
}
return false;
}
}

正如我所说,Magento 没有创建新属性“test_report”,而是破坏了 eav_entity_type 表。没有关于发生的事情的错误消息或日志条目。

如何创建这样的属性?

谢谢,艾诺

最佳答案

$installer类本身应该能够添加属性,我认为您不需要加载 Entity_Setup 类。

$installer = $this;
$installer->startSetup();

$installer->addAttribute('catalog_product', 'test_report', array(
'label' => 'Test report',
'required' => false,
'input' => 'select',
'source' => 'cmspageselect/entity_source',
'default' => 'none',
'position' => 1,
'sort_order' => 3,
));

$installer->endSetup();

除此之外,我认为您的源值不正确,根据数组中的源元素判断,您应该将模型命名为 Mandarin_CMSPageSelect_Model_Entity_Source .我假设您已经添加了适当的 <models>元素添加到 config.xml 中,以便告诉 Magento 从何处加载模型。

关于php - Magento:用于选择 CMS 页面的自定义产品属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8907127/

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