Cai*_*ner 5 javascript php ajax magento
我的工作在产品页面,而不是正常的可配置选项上,有一些配置选项,然后查询数据库,看是否特定厂商进行产品的项目.然后它通过javascript显示供应商列表,如下所示.

我希望添加到购物车块显示在每个供应商旁边.因为这都是动态创建的,所以我必须将供应商ID传递给我创建的"添加到购物车"脚本.我把原来的应用程序/设计/前端/基/默认/模板/目录/产品/浏览/ 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>
Run Code Online (Sandbox Code Playgroud)
Mage_Catalog_Blockproduct_View是您当前遇到的错误。请记住,Magento 类名反映了目录结构。
我相信你想要Mage_Catalog_Block_Product_View
然而,从技术上讲,你不想在这里启动一个块,但我意识到这是为了绕过引用$this->。我也不会再次重新初始化完整堆栈。更好的方法是创建一个新模块并使用自定义控制器来执行添加到购物车操作。
<?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();
...
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用简单的构造函数在模块中创建一个新块,以设置要在块中使用的模板。如同:
public function __construct()
{
parent::__construct();
$this->setTemplate('catalog/vendoraddtocart.phtml');
}
Run Code Online (Sandbox Code Playgroud)
要动态创建一个块,$this可以访问:
$this->getLayout()->createBlock('cms/block')->setBlockId('vendor_add_to_cart')->toHtml()
考虑阅读并更好地理解该toHtml方法,以及块和布局的工作原理:
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |