Magento - 如何创建“十进制”属性类型

2024-04-06

我在网上做了一些搜索,但还没有找到这个问题的任何答案。我遇到的情况是,我需要一个十进制值的产品属性,它必须支持负数和正数,并且还必须可排序。由于某种原因,Magento 没有“十进制”属性类型。唯一使用小数值的类型是 Price,但不支持负数。如果我使用“文本”作为类型,它支持我想要的任何内容,但它无法正确排序,因为它将值视为字符串而不是浮点数。我已经能够解决这个问题,正如其他人在我发现的帖子中所做的那样,通过手动编辑 eav_attribute 表并将“frontend_input”从“price”更改为“text”,但将“backend_type”保留为“decimal” 。这非常有效...直到有人在管理面板中编辑该属性。保存属性后,Magento 会注意到 frontend_input 是“text”,并将“backend_type”更改为“varchar”。我能想到的解决此问题的唯一方法是创建自定义属性类型,但我不确定从哪里开始,并且在网上找不到任何详细信息。

还有其他人遇到过这个问题吗?如果是这样,您采取了什么措施来纠正它?如果我需要创建自定义属性类型,您有任何提示吗?或者您能给我指出执行此操作的任何教程吗?

Thanks!


您想要做的是创建自定义属性类型。

这可以通过首先创建安装程序脚本来完成(这会更新数据库)。

startSetup();

$installer->addAttribute('catalog_product', 'product_type', array(
    'group'             => 'Product Options',
    'label'             => 'Product Type',
    'note'              => '',
    'type'              => 'dec',    //backend_type
    'input'             => 'select', //frontend_input
    'frontend_class'    => '',
    'source'            => 'sourcetype/attribute_source_type',
    'backend'           => '',
    'frontend'          => '',
    'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
    'required'          => true,
    'visible_on_front'  => false,
    'apply_to'          => 'simple',
    'is_configurable'   => false,
    'used_in_product_listing'   => false,
    'sort_order'        => 5,
));

$installer->endSetup();

之后,您需要创建一个名为的自定义 php 类:

不管_Sourcetype_Model_Attribute_Source_Type

并将其粘贴到其中:

class Whatever_Sourcetype_Model_Attribute_Source_Type extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
{
    const MAIN = 1;
    const OTHER = 2;

public function getAllOptions()
{
    if (is_null($this->_options)) {
        $this->_options = array(
            array(
                'label' => Mage::helper('sourcetype')->__('Main Product'),
                'value' =>  self::MAIN
            ),
            array(
                'label' => Mage::helper('sourcetype')->__('Other Product'),
                'value' =>  self::OTHER
            ),
        );
    }
    return $this->_options;
}

public function toOptionArray()
{
    return $this->getAllOptions();
}

public function addValueSortToCollection($collection, $dir = 'asc')
{
    $adminStore  = Mage_Core_Model_App::ADMIN_STORE_ID;
    $valueTable1 = $this->getAttribute()->getAttributeCode() . '_t1';
    $valueTable2 = $this->getAttribute()->getAttributeCode() . '_t2';

    $collection->getSelect()->joinLeft(
        array($valueTable1 => $this->getAttribute()->getBackend()->getTable()),
        "`e`.`entity_id`=`{$valueTable1}`.`entity_id`"
        . " AND `{$valueTable1}`.`attribute_id`='{$this->getAttribute()->getId()}'"
        . " AND `{$valueTable1}`.`store_id`='{$adminStore}'",
        array()
    );

    if ($collection->getStoreId() != $adminStore) {
        $collection->getSelect()->joinLeft(
            array($valueTable2 => $this->getAttribute()->getBackend()->getTable()),
            "`e`.`entity_id`=`{$valueTable2}`.`entity_id`"
            . " AND `{$valueTable2}`.`attribute_id`='{$this->getAttribute()->getId()}'"
            . " AND `{$valueTable2}`.`store_id`='{$collection->getStoreId()}'",
            array()
        );
        $valueExpr = new Zend_Db_Expr("IF(`{$valueTable2}`.`value_id`>0, `{$valueTable2}`.`value`, `{$valueTable1}`.`value`)");

    } else {
        $valueExpr = new Zend_Db_Expr("`{$valueTable1}`.`value`");
    }



    $collection->getSelect()
        ->order($valueExpr, $dir);

    return $this;
}

public function getFlatColums()
{
    $columns = array(
        $this->getAttribute()->getAttributeCode() => array(
            'type'      => 'int',
            'unsigned'  => false,
            'is_null'   => true,
            'default'   => null,
            'extra'     => null
        )
    );
    return $columns;
}


public function getFlatUpdateSelect($store)
{
    return Mage::getResourceModel('eav/entity_attribute')
        ->getFlatUpdateSelect($this->getAttribute(), $store);
}
}

希望这可以帮助。

欲了解更多信息,请参阅here. http://inchoo.net/ecommerce/magento/how-to-create-custom-attribute-source-type/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Magento - 如何创建“十进制”属性类型 的相关文章

  • 扩展 Magento 购物车

    我需要扩展 Magento 购物车以包含商店定位器的额外步骤 我知道我需要覆盖核心 OnePage 控制器 Mage Checkout OnepageController 和块 Mage Checkout Block Onepage 但是在
  • Magento 多个 Authorize.net 网关

    我有一个用于处理信用卡付款的 CAD 和 USD 网关帐户 这两个帐户均来自支持 Authorize net API 的支付提供商 我已经使用 Magento 的内置 Authorize net 支持成功配置了一个 但是如何配置第二个 Au
  • Magento - 没有新闻通讯订阅和取消订阅事件

    为什么在客户或新闻通讯模块中的新闻通讯订阅 取消订阅过程中或周围没有调度任何事件 我目前面临的唯一选择是使用订阅者模型的重写来适应这里的一些代码 有没有其他人有一个好的替代方案 或者我错过了什么 我遇到了需要监听订阅 取消订阅事件的情况 我
  • Magento 1.9 注册后重定向客户

    我想在 Magento 1 9 中成功注册后将所有客户重定向到自定义页面 我已经尝试了很多事情 首先 我成功地覆盖了核心客户帐户控制器 我尝试自定义以下操作 创建后动作 successProcessRegistration welcome客
  • 您将如何设计数据库以允许用户定义模式[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如果您必须创建一个应用程序 例如博客应用程序 那么创建数据库模式相对简单 你必须创建一些表 tblPosts tblAttachments tb
  • 设计用于库存控制的“EAV”或“类/具体表继承”数据库

    我正在为一个建设项目开发库存控制系统 店员负责添加新库存并将其分发给员工 从员工处返还 这些物品 以及它们的属性 将会非常多样化 例如钢制品 服装 设备 机械 工具等 我的问题是是否要去类 具体表继承 https stackoverflow
  • 将现有属性添加到所有属性集

    我有一个existing嵌入代码的属性 我需要将此属性与 120 多个现有属性集相关联 如果我知道属性集 ID 如何以编程方式将该属性添加到所有属性集 我发现为这个问题编写代码很有趣 所以这里是有效的解决方案 在 php 脚本 包括 mag
  • 在购物车页面上显示分级定价

    如果我在这个页面上 http 结账 购物车 对于购物车中的产品 我想显示分级定价 与商品页面上显示的定价相同 如果有 我的尝试是添加
  • magento - 无法与 PayPal 网关通信

    有什么解决办法吗 我已经在配置 gt gt 系统 gt gt 支付方式 gt gt PayPal支付解决方案中禁用了SSL验证 但还是不行 您需要禁用 SSL 验证 进入后台 系统 gt 配置 gt 付款方式 找到PayPal Expres
  • magento从产品sku获取产品类型

    我如何使用产品 sku 或 id 获取产品类型 简单 可配置 分组 我已加载产品集合并从中尝试通过 product gt getTypeId 但它不打印产品类型 请帮我 Thanks I think product gt getTypeId
  • 如何在注册和结账过程中更改magento中的“送货信息”标签

    我想将 帐单信息 标签文本更改为 运输和帐单信息 我尝试使用 Mage Checkout csv 但这没有帮助 请提出解决方案 谢谢你 Use the 翻译文件translate csv在你的主题中 出于演示目的 我将使用默认包 app d
  • 如何自定义 magento onepage 结账表单

    我正在使用 Magento 1 5 1 0 我想在单页结账表单中自定义地址块 我想删除 传真 输入字段并将 区域 下拉列表放在国家 地区 下拉列表 下方 这个形式是在哪里定义的 亲切的问候 伯蒂 导航到您的主题文件夹 默认文件位于以下位置
  • 将搜索栏从 magento 主页的标题中移动

    我是 magento 的新手 我想将搜索栏从标题移动到主页的中间位置 以便它仅显示在主页上 我在 magento 论坛上阅读了许多相关答案 但所有人都在尝试编辑 box css 中的 mini search 元素 但不幸的是我在此文件中没有
  • Magento:每个订单限制类别中的 3 个产品

    我正在尝试在 Magento 中设置一个示例产品类别 允许人们每次购买时最多选择 3 个免费样品 但如何限制每个订单仅从该类别中选择 3 个样品 EDIT 这是 app code local MagePal LimitCartProduct
  • 在 Magento 控制器中使用 move_uploaded_file

    我是 magento 的新手 我正在 magento 管理中创建用于文件上传的自定义模块 现在我已将上传文件发布到我的模块控制器中 这里我用过move uploaded file将文件上传到与控制器文件夹相同的目录中 下面的代码我用于控制器
  • Magento:设置刚刚创建的网站的配置值?

    我正在以编程方式创建网站 用户等 问题是 创建网站时 我无法立即设置配置值 Code
  • 无法从配置文件设置基本 URL

    我尝试使用这里描述的方法Magento 将基本网址存储在配置文件中 https stackoverflow com questions 17618236 magento storing base url in a config file从
  • 访问 Magento 购物车和/或结帐中的运费

    请注意 这个问题是关于运费 而不是价格 有一个重要的区别 即运输方式为店主支付的费用是多少 而不是客户支付的费用 The shipping tablerate数据库表包括一个cost字段 该字段填充在Mage Shipping Model
  • Magento 中的子域 htaccess 问题

    public html www domain com public html subdomain subdomain domain com public html htaccess public html subdomain htacces
  • Paypal Express Checkout 坚持使用电话号码,即使选项已关闭(从 Magento 拨打)

    我在 Magento 中使用 Paypal 快速结帐 选项 我没有使用任何快速结帐按钮 这只是因为我在从网站付款标准返回时遇到问题 在 Paypal 的网站付款首选项中 我已将 联系电话号码 字段设置为关闭 我还在 Magento 方面进行

随机推荐