gpt4 book ai didi

php - 为每个最终可配置选项动态创建添加到购物车 block ,$this 的帮助程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:42 24 4
gpt4 key购买 nike

我正在做一个项目,在产品页面上有一些可配置选项而不是正常的可配置选项,然后查询数据库以查看特定 vendor 是否提供该产品。然后它会通过 javascript 显示 vendor 列表,如下所示。

enter image description here

我希望添加到购物车 block 显示在每个 vendor 旁边。因为这都是动态创建的,所以我必须将 vendor ID 传递给我创建的“添加到购物车”脚本。我采用了原始的 app/design/frontend/base/default/template/catalog/product/view/addtocart.phtml 并制作了我自己的,如下所示。下面的 php 文件是通过 ajax 调用的。原始的 addtocart.phtml 有一堆 $this 变量。我需要模拟 $this (无论是什么模型,它所指的助手),以便这个 block 工作。我没有太大的成功。有人可以看到我做错了什么或我可以做些什么吗?非常感谢!

<?php

require_once('/var/www/Staging/public_html/app/Mage.php');
umask(0);
Mage::app();

//ensure that the value is legitimate
if($_POST && is_numeric($_POST['value'])){
$value = $_POST['value'];
}

//pass this in your ajax call for the add button
if($_POST && is_numeric($_POST['product_id'])){
$product_id = $_POST['product_id'];
}

$helper = Mage::helper('core'); //for translation
$block = new Mage_Catalog_Blockproduct_View(); // not best practice, but neither are standalones
$product = Mage::getModel('catalog/product')->load($product_id); // no need to use the _ here, it's not protected/private; additonally Mage::registry won't work because you're technically not on a product detail page

$buttonTitle = ''; //you are using this, but it isn't set

?>
<div class="add-to-cart">
<label for="qty"><?php echo $helper->__('Qty:') ?></label>
<input type="text" name="qty" id="qty" maxlength="12" value="<?php echo $block->getProductDefaultQty($product) * 1 ?>" title="<?php echo $helper->__('Qty') ?>" class="input-text qty" />
<button onclick="window.location = '<?php echo Mage::helper('checkout/cart')->getAddUrl($product);?>'" type="button" title="<?php echo $buttonTitle ?>" class="button btn-cart" id='$value'><span><?php echo $buttonTitle ?></span></button>
</div>

最佳答案

Mage_Catalog_Blockproduct_View 是您目前遇到的错误。请记住,Magento 类名反射(reflect)了目录结构。

我相信您想要 Mage_Catalog_Block_Product_View

但是,从技术上讲,您不想在这里启动一个 block ,但我意识到这是为了绕过 $this-> 引用。我也不会再次重新初始化整个堆栈。更好的方法是创建一个新模块并为添加到购物车操作使用自定义 Controller 。

<?php
require_once Mage::getModuleDir('controllers', 'Mage_Checkout') . DS . 'CartController.php';

class NS_AjaxCart_CartController extends Mage_Checkout_CartController
{
public function addAction()
{
$params = $this->getRequest()->getParams();
...

然后,您将使用简单的构造函数在您的模块中创建一个新 block ,以设置您将在您的 block 中使用的模板。类似于:

public function __construct()
{
parent::__construct();
$this->setTemplate('catalog/vendoraddtocart.phtml');
}

要动态创建一个 block ,因为 $this 可以访问:

$this->getLayout()->createBlock('cms/block')->setBlockId('vendor_add_to_cart')->toHtml()

考虑阅读并更好地理解 toHtml 方法,以及 block 和布局的工作原理:

希望这对您有所帮助。

关于php - 为每个最终可配置选项动态创建添加到购物车 block ,$this 的帮助程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16049087/

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