php – 为每个最终可配置选项动态创建添加到购物车块,Helper为$this
|
我正在开发一个项目,在产品页面而不是正常的可配置选项上,有一些可配置选项,然后查询数据库以查看特定供应商是否携带该产品.然后它通过 javascript显示供应商列表,如下所示. 我希望添加到购物车块显示在每个供应商旁边.因为这都是动态创建的,所以我必须将供应商ID传递给我创建的“添加到购物车”脚本.我拿了原来的app / design / frontend / base / default / template / catalog / product / view / addtocart.phtml并自己创建,如下所示.以下php文件是通过ajax调用的.最初的addtocart.phtml有一堆$this变量.我需要模拟$this(无论模型,它所指的帮助器),以便这个块工作.我没有太大的成功.有人可以看到我做错了什么或我能做些什么不同?非常感谢! <?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类名反映了目录结构.
我相信你想要Mage_Catalog_Block_Product_View 但是,从技术上讲,你不会想在这里发起一个阻止,但我意识到这是为了解决这个问题 – >>引用.此外,我不会再次重新初始化整个堆栈.更好的方法是创建一个新模块并使用自定义控制器进行添加到购物车操作. <?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();
...
然后,您将在模块中使用一个简单的构造函数创建一个新块,以设置您将在块中使用的模板.相近: public function __construct()
{
parent::__construct();
$this->setTemplate('catalog/vendoraddtocart.phtml');
}
要动态创建一个块,因为$可以访问: $这 – > getLayout() – > createBlock( ‘CMS /块’) – > setBlockId( ‘vendor_add_to_cart’) – > toHtml() 考虑阅读并更好地理解toHtml方法,以及块和布局如何工作: > http://codemagento.com/2011/03/how-blocks-and-phtml-work-together/ 希望这可以帮助. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
