С помощью 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/ указывает на вашу indexAction () в вашем IndexController.Ваш 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