Демонстрируем пример легкого модуля ajax-подгрузки интересующих полей из записей конкретного типа. Допустим, назвали этот модуль MyAjax.
Сначала как его вызвать из шаблона, например со страницы товара product.tpl для подгрузки в контейнер класса ajax-wnd большой фотографии товара, полного описания товара, его SEO текста или описания его категории.
<h1>{$product->model}</h1>
<div class="more">
<a onclick="loadDetail('product', 'large_image', '{$product->product_id}')">Показать фото</a>
<a onclick="loadDetail('product', 'body', '{$product->product_id}')">Полное описание</a>
<a onclick="loadDetail('product', 'seo_description', '{$product->product_id}')">Показать SEO</a>
</div>
<div class="more">
<a onclick="loadDetail('category', 'description', '{$product->category_id}')">Описание категории</a>
</div>
<div class="ajax-wnd"></div>
И связанный с ним javascript.
<script>
function loadDetail ( type, field, id ) {
var url = '{$site}?module=MyAjax&type=' + type + '&field=' + field + '&id=' + id;
$('.ajax-wnd').load(url);
}
</script>
Теперь код самого модуля. Разместите его в http://ваш.сайт/objects/myajax/MyAjax.php (для движка версий <= 140323 разместите в http://ваш.сайт/objects/MyAjax.php из-за обнаруженного бага с папками для модулей клиентской стороны) и зарегистрируйте в админпанели на странице "страницы -> Зарегистрированные модули -> добавить -> MyAjax -> Сохранить".
Ниже показана заготовка модуля, которая в таком виде обслуживает только поля large_image, body, description и seo_description записи о товаре (это product). Для обработки других полей и типов записей, например типов category, brand и так далее, внесите в код необходимые правки под себя.
<?php
class MyAjax {
// обязательный набор свойств модуля
public $title = '';
public $keywords = '';
public $description = '';
public $seo_description = '';
public $bgsound = '';
public $body = '';
public $single = TRUE;
// обязательный метод модуля
public function fetch ( & $cms ) {
$type = $cms->request->getRequest('type');
switch ($cms->text->lowerCase($type)) {
// если запрос о товаре
case 'product':
// какой товар запросили?
$id = $cms->request->getRequest('id');
if (empty($id)) {
$this->body = 'Ошибка: не указан идентификатор товара.';
} else {
$item = null;
$filter = new StdClass();
$filter->id = $id;
$cms->db->products->one($item, $filter);
if (empty($item)) {
$this->body = 'Ошибка: нет такого товара в базе.';
} else {
// какое поле запрашивали?
$field = $cms->request->getRequest('field');
if (!isset($item->$field)) {
$this->body = 'Ошибка: нет такого поля в записи этого типа.';
} else {
switch ($field) {
case 'large_image':
$this->body = '<img src="' . $item->$field . '">';
break;
case 'body':
case 'description':
case 'seo_description':
$this->body = $item->$field;
break;
default: $this->body = 'Ошибка: такое поле не обслуживается.';
}
}
}
}
break;
// если запрос о категории
case 'category':
$this->body = 'Ошибка: отсутствует код обработки такого запроса.';
break;
// если запрос о бренде
case 'brand':
$this->body = 'Ошибка: отсутствует код обработки такого запроса.';
break;
// иначе неправильный запрос
default: $this->body = 'Ошибка: неизвестный тип запроса.';
}
// обязательный возврат модуля (а плагин может возвращать еще FALSE = прекратить работу движка)
return TRUE;
}
}
?>
С уважением, ImperaDevils
http://imperadevils.com - сайты под ключ, модули, шаблоны, парсер товаров Яндекс.
Скайп imperadevils - обращайтесь за помощью.
Мы находим лучшие, универсальные и наиболее простые решения.