从已加载的 Magento 模型中检索附加数据

2023-12-27

在某些情况下,我收到的模型仅包含我需要的一些数据,例如catalog/product不包含我可能需要使用的某些属性的实例,例如尺寸、小部件数量或腰围尺寸。

为了缓解这个问题,我目前的选择是:

  • 创建一个新块,并使用手动加载所需的属性addAttributeToSelect($name).
  • 使用当前填充不足的模型中的 ID 将整个模型加载到模板中,例如,Mage::getModel('catalog/product')->getId($product->getId()).

对于我的问题:有没有一种方法可以选择我想要在模型集合中加载的其他属性->load()已被调用?另外,有没有一种方法可以在个别模型上执行此操作?


问题中描述了正确且最安全的方法(但不是最好的 - 见下文) - 再次加载产品。

目前还没有开发出在产品加载后添加更多属性的方法,原因如下:

1)在模型生命周期内,许多值都会被计算并缓存在模型内。因此,添加更多属性(例如价格)将改变模型的状态,但不会影响多个方法的结果,这些方法旨在返回这些属性值(例如 getPrice()),但在内部进行一些额外的预处理并依赖于先前计算的值数据。

2) 模型的状态将不一致,因为某些方法将返回根据先前的空属性计算的缓存且当前无效的值,而其他一些方法将返回非缓存值。因此,此类模型的使用将是不安全的,并且其属性将是不可预测的。

3)支持这种重新加载的代码复杂性相当大。

解决方案

1)第一个好的解决方案(尽管是最重的一个)是每次您的块/模型/助手需要其中的扩展属性集时再次加载产品。

2)更好的解决方案 - 是加载新的集合,其中所有产品都具有所有附加属性,无论何时您看到这些属性都是必需的,而原始集合没有它们。

3) 最好的解决方案 - 是加载具有所有必需属性的原始产品集合。有时,集合确实会加载具有可能属性子集的产品 - 主要是 EAV 优化的遗留代码(现在默认情况下“打开”平面表,并且不需要此优化)或者可能当集合由搜索引擎加载时(例如 Solr)在 Magento EE 中),默认情况下,它不会在其记录中存储所有属性。

3.1)您可以将所需的属性添加到实例化位置的原始集合中 - 通过有问题中提到的addAttributeToSelect($attributeNames) method

3.2) 您可以将属性添加到属性列表中,属性列表会自动填充到集合中。属性列表因模块而异,并且存储在不同的位置。有些在配置中,有些在数据库中。具体位置(配置或数据库表),在哪里添加自动填充属性,取决于您的具体情况。

4)有时,当您只需要属性值时,编写资源模型可能会更容易和更快,这将直接从数据库加载它们productIds和当前的storeId范围。然后,您可以冒险将它们设置为集合中产品的属性,或者安全地将它们设置为产品myAdditionalAttribuesValuesArray属性或用作独立数组,映射到产品 ID。

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

从已加载的 Magento 模型中检索附加数据 的相关文章

  • 如何在magento中添加自定义模块

    您好 我想为页脚创建一个自定义模块 用于显示新闻标题 还没有使用自定义模块 我该怎么做 谁能告诉我创建自定义模块的简单步骤 Thanks 您会发现的最佳资源是 模块创建器扩展 http www magentocommerce com ext
  • 如何导出带有产品完整 url 的产品 csv

    我想导出包含完整产品 url 的产品 CSV 即包括基本 url 我不想手动执行此操作 是否可以自定义代码 以便产品导出具有完整的 url
  • Magento 1.9 注册后重定向客户

    我想在 Magento 1 9 中成功注册后将所有客户重定向到自定义页面 我已经尝试了很多事情 首先 我成功地覆盖了核心客户帐户控制器 我尝试自定义以下操作 创建后动作 successProcessRegistration welcome客
  • magento 付款流程..一般如何运作

    有一个问题 我希望这是问的正确地方 不太明白magento 中的付款方式 客户去结账 假设想要以客人身份付款 因此提供地址等 最后找到付款方式 然后我希望客户通过信用卡付款 已经为我选择的网关 银行 安装了模块 那时 我希望用户被重定向到第
  • 使用 getCollection 和 addLevelFilter 列出 Magento 类别,但排除默认根类别

    我使用以下代码来获取集合并使用 addLevelFilter 2 在级别上进行过滤 这会完美地输出第 2 级的所有类别 除了它还会提取列表中的默认根类别之外 我想从视图中排除它 但在查看了所有可用的方法后 我没有看到任何可以帮助我删除 排除
  • magento从产品sku获取产品类型

    我如何使用产品 sku 或 id 获取产品类型 简单 可配置 分组 我已加载产品集合并从中尝试通过 product gt getTypeId 但它不打印产品类型 请帮我 Thanks I think product gt getTypeId
  • 安装新的 Magento 扩展需要注销/登录,否则您会在管理页面中收到 404

    两个不同的人告诉我 以下是 Magento 的一个已知问题 安装新扩展时 管理员尝试访问 配置扩展程序 并获取 404 页面 去的方法 解决此问题的方法是注销然后登录到他的管理面板 在设计扩展时有没有办法解决这个问题 这方面有一个悬而未决的
  • Magento - 分页生成错误的 URL

    除了网址之外 我的分页工作正常 第 2 页的链接是 example com products 21p 2 什么时候应该是 example com products p 2 当我在地址栏中输入后者时 它工作正常 这是生成链接的代码 li a
  • Magento 以编程方式删除产品图像

    这肯定是一个非常简单的编程任务 我绝对无法在网上找到任何有关它的信息 基本上 我正在尝试删除产品图像 我想删除产品媒体库中的所有图像 我可以在不为如此简单的任务编写一百万行代码的情况下完成此操作吗 请注意 我已经尝试过 attributes
  • 将搜索栏从 magento 主页的标题中移动

    我是 magento 的新手 我想将搜索栏从标题移动到主页的中间位置 以便它仅显示在主页上 我在 magento 论坛上阅读了许多相关答案 但所有人都在尝试编辑 box css 中的 mini search 元素 但不幸的是我在此文件中没有
  • 如何获取magento中登录客户的订单列表

    我正在努力获取客户订购的订单号 名称 列表 我尝试过使用 Mage getModel sales order gt load order id 但对我不起作用 实际上 我正在开发帮助台模块并尝试将订单分配给票证 好的朋友 感谢您的提示 我通
  • 为什么在网关取消的订单状态没有转换为“ payment_pending ”?

    我正在使用 Magento 社区 ver1 6 1 0 我在 Magento wiki 上找到了这个状态图http www magentocommerce com wiki 2 magento concepts and architectu
  • Magento 2 REST API 客户自定义属性

    Magento 2 REST API 文档解释了在更新或创建客户时设置custom attributes 的方法 http devdocs magento com swagger index 20 html http devdocs mag
  • 通过列计数拆分时重复表头

    我正在 Magento 中输出产品列表 作为包装在表格中的简单列表 由于此列表可能会很长 100 个以上产品 因此我使用了来自这里的想法 https stackoverflow com questions 21001803 how to h
  • 在 Magento 中获取购物车详细信息

    我想通过使用 Magento 获取购物车详细信息getQuote功能 我怎样才能做到这一点 cart Mage getModel checkout cart gt getQuote 当我打印 cart页面停止执行并显示空白页面 但是当我写的
  • Magento:如何覆盖本地模块中的模型

    我试图在本地文件夹中覆盖本地文件夹中的模块 但我不知道是否可能 这就是我所做的 我创建了 local Mycompany Modulename Model Model php 我想覆盖 local Othercompany Modulena
  • Magento --“SQLSTATE[23000]:违反完整性约束..”客户更新

    迁移服务器后 每次尝试更新客户信息时都会出现错误 我正在使用一个客户激活插件 http www magentocommerce com magento connect vinai extension 489 customer activat
  • 创建单个随机 Magento 优惠券

    我遇到了一些麻烦 我想要做的是每次有人订阅我们的时事通讯时 在 Magento 中自动生成一个随机优惠券代码 这张优惠券可减 10 美元 并且有exp 订阅后两周的日期 因此 我正在尝试编写一个简单的脚本 当提交 订阅我们的时事通讯 表单时
  • 在产品页面上显示最近浏览过的产品

    magento 当前的默认功能是在类别页面的右侧显示最近查看的产品 现在我想在产品页面底部显示相同的内容 使用的 phtml 文件在位置命名为 frontend base default template reports product v
  • 根据product_id获取magento产品的浏览次数

    我想在 Magento 的类别列表页面上显示查看计数 这些数据看起来过去可以通过 reports product collection 访问 但我找不到正确访问它的方法 我基本上想提供一个产品 ID 并获取返回给我的所述产品的观看次数 您可

随机推荐