我必须添加5个单独的标签,例如按类别,我们的选择,最受欢迎的最高评级,您在主页本身的收藏,并且每个标签都应该列出那个没有完整页面重新加载的产品。那是使用ajax,是否可以使用magento。
如果是这样,请指导我。
答案 0 :(得分:11)
正如约瑟夫所说,可以用AJAX调用Magento控制器动作。
我们在最近的一个项目中采用了这样的方法:
创建一个新模块并在其中创建一个新控制器。这可以通过常规方式完成,网上有一些关于它的教程 - 例如http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/custom_module_with_custom_database_table - 忽略数据库部分,它是控制器部分的有趣之处。
比方说,你的模块和 http://yourmagento/yourmodule/index/ 指向IndexController中的indexAction()。您的IndexController可能如下所示:
<?php class YourNamespace_YourModule_IndexController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$id = $this->getRequest()->getParam('id');
if($id) {
$_category = Mage::getModel('catalog/category')->load($id);
$product = Mage::getModel('catalog/product');
//load the category's products as a collection
$_productCollection = $product->getCollection()
->addAttributeToSelect('*')
->addCategoryFilter($_category)
->load();
// build an array for conversion
$json_products = array();
foreach ($_productCollection as $_product) {
$_product->getData();
$json_products[] = array(
'name' => ''.$helper->htmlEscape($_product->getName()).'',
'url' => ''.$_product->getProductUrl().'',
'description' => ''.nl2br($_product->getShortDescription()).'',
'price' => ''.$_product->getFormatedPrice().'');
}
$data = json_encode($items);
echo $data;
}
}
}
您可以在模板中调用该url,例如通过jQuery(我喜欢使用它,但请注意事实,magento使用原型 - 您可能希望查找名称空间冲突)
尽管如此,这是一个示例调用(我将它绑定到元素上的click事件):
var url = 'http://yourmagento/yourmodule/index/';
var value = 32; // your category id
$('#clickMe').click(function() {
$.ajax({
url: url,
type: 'POST',
data: {id: value},
success: function(data) {
// you get the json back and can populate your html with it (e.g. your tab)
});
});
希望,这有帮助。
LG,
FLO