Вывод товаров в категории нестандартным шаблоном в Opencart

Как же изменить внешний вид страницы вывода товаров в категории?
При работе с новым проектом пришлось осваивать CMS скрипт магазина OpenCart. Могу сказать, что в целом мне очень нравится эта платформа, модель MVC, хорошо реализованная логика, богатая функциональность.

Но, есть одно НО! Разрабатывается он сообществом, а значит в нём есть небольшие недоработки или ошибки. Поставлю большой плюс за то, что ошибки закрываются сообществом в достаточно короткие сроки.

Так вот, на что наткнулся я и не нашёл решения в русскоязычном сообществе OpenCart.
Есть категория, в которой будут продаваться изображения и нужно сделать к ней особый вывод. Но сделать это мне удалось не сразу.

Начну с того, что я воспользовался рекомендациями на официальном сайте OpenCart и их переводом, а именно:

  1. В админке OpenCart www.site/admin в меню Система / Дизайн / Схемы создал новую схему с именем Reproduction и добавил к ней путь product/category_reproduction. Сохранил.
  2. Создал файл контроллера document_root/catalog/controller/product/category_reproduction.php следующего содержания:
    <?php
    
    class ControllerProductCategoryReproduction extends Controller {
    
        public function index() {
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category_reproduction.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/product/category_reproduction.tpl';
            } else {
                $this->template = 'default/template/product/category.tpl';
            }
    
            $this->children = array(
                'common/footer', // подключение блока footer
                'common/header' // подключение блока header
            );
    
            $this->response->setOutput($this->render());
        }
    
    }
    
    ?>
    
    


  3. Создал файл шаблона document_root/catalog/view/theme/default/template/product/category_reproduction.tpl следующего содержания:
    <?php echo $header; ?>
    Category View
    <?php echo $footer; ?>

    <?php echo $header; ?> — выводит шаблон заголовка
    <?php echo $footer; ?> — выводит шаблон подвала
  4. Выбрал шаблон вывода для категории — Reproduction. Для этого в админке, открываем категорию и на последней закладке «Дизайн» выбираем нужную схему. Всё сохраняем.


Радостно иду на главную страницу, вижу в главном меню свою категорию и нажимаю на неё. Иииии… фигВам ничего не происходит. Точнее произошёл стандартный вывод категории.

Через час всяческих проб и...
Пришла мысль, что просто так генерируется ссылки в меню. И вот теперь, для тех кто осилил весь предыдущий текст, моё маленько исправление ситуации.

Внимание! Функция написана для главного меню сайта. Для использования в других модулях, нужно добавить функцию в глобальные библиотеки, а так как я ещё не выбрал в какие, то и писать про это сейчас не буду.

Открываем контроллер шапки сайта (document_root/catalog/controller/common/header.php) и добавляем в него функцию следующего содержания:
private function getLayoutPath($categoryID) {
        $sql_query = "
                    SELECT route
                    FROM
                      " . DB_PREFIX . "layout_route
                    INNER JOIN " . DB_PREFIX . "category_to_layout
                    ON " . DB_PREFIX . "layout_route.layout_id = " . DB_PREFIX . "category_to_layout.layout_id
                    WHERE
                      " . DB_PREFIX . "category_to_layout.category_id = " . (int) $categoryID . "                    
                    AND " . DB_PREFIX . "category_to_layout.store_id = '" . (int) $this->config->get('config_store_id') . "'";
        $query = $this->db->query($sql_query);
        if ($query->num_rows) {
            return $query->row['route'];
        } else {
            return 'product/category';
        }
    }

После чего находим строку
'href' => $this->url->link('product/category', 'path=' . $category['category_id'])
и заменяем её на
'href' => $this->url->link($this->getLayoutPath($category['category_id']), 'path=' . $category['category_id'])

Сохраняем и радуемся результату.
Теперь вывод для категории из своего шаблона будет работать для любой схемы.
  • +2
  • 12 сентября 2012, 20:25
  • igorrius

Комментарии (2)

RSS свернуть / развернуть
Спасбо, не совсем то, что искал, но направление движения ты мне задал.
0
С меню не получается, если вручную у категории указать /index.php?route=product/category_reproduction&path=20_59 то открывается шаблон, а в меню не прописывается. сделал всё как в статье, кэш почистил. сайт на локалке.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
comments powered by Disqus