Демонстрируем пример легкого модуля 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 - обращайтесь за помощью.
Мы находим лучшие, универсальные и наиболее простые решения.