在订单查看页面上,如何检查产品是否存在于目录中而不是删除?

magento.stackexchange https://magento.stackexchange.com/questions/3584

  •  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 在街区中发现。

许可以下: CC-BY-SA归因
scroll top