Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
19:18
31 авг
#
?
ImperaDevils написал:
Логотип ImperaDevils

Демонстрируем пример легкого модуля 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;
        }
    }
?>

Логотип Ajax
С уважением, ImperaDevils

http://imperadevils.com - сайты под ключ, модули, шаблоны, парсер товаров Яндекс.

Скайп imperadevils - обращайтесь за помощью.

Мы находим лучшие, универсальные и наиболее простые решения.

Написание ответа

Перед публикацией рекомендуется использовать Предпросмотр, чтобы увидеть конечный вид сообщения.


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.