在订单查看页面上,如何检查产品是否存在于目录中而不是删除?
-
16-10-2019 - |
题
好的,所以我已经学会了如何使产品名称为可点击链接(将订单视为管理员时)在我们的管理仪表板上的该产品的编辑页面 - 这是带答案的帖子.
答案表明这是要添加到的代码:
app/design/adminhtml/default/default/template/sales/order/order/view/renderer/default.phtml
<div class="item-text">
<?php $_pullProduct = Mage::getModel('catalog/product')->loadByAttribute('sku', $_item->getData('sku')); ?>
<a target="_blank" rel="external" href="<?php echo Mage::helper('adminhtml')->getUrl('adminhtml/catalog_product/edit', array('id' => $_pullProduct->getId()))?>">
<?php echo $this->getColumnHtml($_item, 'name') ?></a>
</div>
除了一件事外,这很好地工作了:如果订单的产品已被删除,那么获得产品URL的代码片段就无法找到该产品,因为它已被删除,并且HTML停止在该系列中加载,打破该订单的订单查看页面。
订购尚未删除的产品可以通过此限制代码正常工作。
如果产品存在于产品目录中并且尚未被删除,我将如何仅链接到产品URL?
顺便说一句,这些产品将永远被删除,而不是简单地禁用。残疾产品正常工作。
编辑/更新:
感谢您的答案 - 两者看起来都很棒,我相信Fabian的答案更接近我正在寻找的 - 这是Fabian答案的问题,我试图以评论形式提出,看起来不太好,所以我应在这里以更可读的方式询问:
我在弄清楚如何实现您的答案时遇到了问题,很可能是因为我慢慢地学习PHP,但是我对它的经验不太经验,因为我的主要工作是设计,但是我确实设法通过我需要学习的一点PHP。我尝试:
使用...
if(!$product->isObjectNew()): do something
我最终尝试了...
<div class="item-text">
<?php echo $this->getColumnHtml($_item, 'name') ?>
<?php if(!$product->isObjectNew()): ?>
<?php $_pullProduct = Mage::getModel('catalog/product')->loadByAttribute('sku', $_item->getData('sku')); ?><a target="_blank" rel="external" href="<?php echo Mage::helper('adminhtml')->getUrl('adminhtml/catalog_product/edit', array('id' => $_pullProduct->getId()))?>">View</a>
<?php endif; ?>
</div>
...这不起作用,我知道这是因为我正在融合:
if(!$product->isObjectNew()): do something
不当。
我不确定我的缺陷是什么,即使在网站上的其他PHTML文件中查看了类似代码,试图复制我看到的内容,但我仍然无法弄清楚这一点。这是我可以从你们那里得到帮助的地方,这将是我学习一些东西的绝佳机会。
解决方案
我感谢并推荐Philwinkle的第二种方法。
除此之外,您可以检查产品是否存在 if(!$product->isObjectNew()): do something
IsObjectNew方法检查现有ID,如果对象没有ID,则未加载它。
其他提示
两件事情:
第一的:
您真正需要的是拉 sales/order_item
信息,而不是加载产品。不幸的是,对于您来说,销售表不会捕获您所需的属性url_key。您要加载产品的方式应通过魔术Getter提供 $_pullProduct->getUrlKey()
;
这 唯一办法 我知道该怎么做是一个多步骤的过程:
- 将URL_KEY列添加到
sales_flat_order_item
桌子 - 创建一个观察者,该观察者将在保存上保存url_key数据
sales/order_item
模型
如果此代码可能超出了此问答的范围,但是在线上有很多资源 - 我在Google上找到了一对夫妇:
http://www.npdemers.net/blog/2012/03/magento-adding-custom-attributes-to-orders
http://www.npdemers.net/blog/2012/04/magento-adding-custom-attributes-to-orders-part-ii
第二/最佳实践:
避免在视图文件中加载模型 - 这是不良习惯。相反,用重写扩展块(在这种情况下 Mage_Adminhtml_Block_Sales_Order_View_Items_Renderer_Default
)并添加一种将其返回到模板文件中的方法。
在您要扩展的模板文件的顶部找到了这种做法的一个很好的例子 - 它调用 $this->getItem()
- 这对应于方法 getItem
在街区中发现。