Jump to content
Sign in to follow this  
pr1h0d

[Решено] Создание нового макета

Recommended Posts

Привествую камрады!

Возникла проблема, при создании нового макета для страницы товаров.

Имеем opencart 2.0.1

 

Что делаю:
создал файл landing.php в /catalog/controler/product
скопировал в него код c /catalog/controler/product/product.php

 

меняю название класса ControllerProductProduct на ControllerProductLanding
меняю путь к шаблону

 if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/product.tpl')) {
                $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/product.tpl', $data));
            } else {
                $this->response->setOutput($this->load->view('default/template/product/product.tpl', $data));
            }

на

            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/landing.tpl')) {
                $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/landing.tpl', $data));
            } else {
                $this->response->setOutput($this->load->view('default/template/product/landing.tpl', $data));
            }

создаю файл landing.tpl в /catalog/view/theme/default/template/product
скопировал в него код с /catalog/view/theme/default/template/product/product.tpl

Добавляю в админке новый макет Название Landing путь product/landing
Определенному товару указываю созданный макет "Landing"
Меняю что-либо в landing.tpl но изменений на странице нет.

 

Добавление любого модуля к данному макету работает (выводит в нужной позиции).

 

Делал по аналогии с манами к версии 1.5.x

 

записал все действия видяшка

 

Плюс в репу всем, кто даст дельный ответ. Спасибо

Что делаю не так?

Share this post


Link to post
Share on other sites

товар это URL route=product/product.

ваш route=product/landing (с шаблоном landing.tpl) никак не используется движком (@виртуальный@ макет "product/landing" остается виртуальным - только для привязки модулей).

Share this post


Link to post
Share on other sites

не совсем ясно, как тогда сделать разные представления страниц для определенных товаров?

Share this post


Link to post
Share on other sites

в контроллере товара проверяйте layout и по нему подставляйте нужный .tpl

Share this post


Link to post
Share on other sites

колдовать нужно с этими строками?

            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/landing.tpl')) {
                $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/landing.tpl', $data));
            } else {
                $this->response->setOutput($this->load->view('default/template/product/landing.tpl', $data));
            }
        } else {
            $url = '';
в контроллере товара проверяйте layout и по нему подставляйте нужный .tpl

 

Если не геморно и делов на 2 строки кода, прошу помочь.

В противном случае готов за пару денег купить услугу, ибо с пыхом я не особо дружу.

Share this post


Link to post
Share on other sites

что у layout`a проверять будете - id или route?

Share this post


Link to post
Share on other sites

что у layout`a проверять будете - id или route?

я так понимаю, что id

route будет один -  product/product, а layout-ов много разных

 

upd

нашел такой материал тыц

Share this post


Link to post
Share on other sites

            $tmpl = 'product';

$layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);

$config_layout_product = $this->config->get('config_layout_product');

if ($layout_id>0 && $layout_id != $config_layout_product) {

$tmpl = 'product_layout'.$layout_id; // ваш tpl

}

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/'.$tmpl.'.tpl')) {

$this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/'.$tmpl.'.tpl', $data));

} else {

$this->response->setOutput($this->load->view('default/template/product/'.$tmpl.'.tpl', $data));

}

Edited by afwollis
$product_info['product_id'] > $this->request->get['product_id']

Share this post


Link to post
Share on other sites

Благодарен! но увы

 

в логах

2014-12-25 15:38:35 - PHP Notice:  Error: Could not load template /home/***/www/catalog/view/theme/default/template/product/landing17.tpl! in /home/***/www/system/modification/system/engine/loader.php on line 45
и пустая страница при обновлении.

 

переименовав файл landing.tpl на landing17.tpl результата не дало.

 

привожу полный код  controler/product.php

 

<?php
class ControllerProductProduct extends Controller {
    private $error = array();

    public function index() {
        $this->load->language('product/product');

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/home')
        );

        $this->load->model('catalog/category');

        if (isset($this->request->get['path'])) {
            $path = '';

            $parts = explode('_', (string)$this->request->get['path']);

            $category_id = (int)array_pop($parts);

            foreach ($parts as $path_id) {
                if (!$path) {
                    $path = $path_id;
                } else {
                    $path .= '_' . $path_id;
                }

                $category_info = $this->model_catalog_category->getCategory($path_id);

                if ($category_info) {
                    $data['breadcrumbs'][] = array(
                        'text' => $category_info['name'],
                        'href' => $this->url->link('product/category', 'path=' . $path)
                    );
                }
            }

            // Set the last category breadcrumb
            $category_info = $this->model_catalog_category->getCategory($category_id);

            if ($category_info) {
                $url = '';

                if (isset($this->request->get['sort'])) {
                    $url .= '&sort=' . $this->request->get['sort'];
                }

                if (isset($this->request->get['order'])) {
                    $url .= '&order=' . $this->request->get['order'];
                }

                if (isset($this->request->get['page'])) {
                    $url .= '&page=' . $this->request->get['page'];
                }

                if (isset($this->request->get['limit'])) {
                    $url .= '&limit=' . $this->request->get['limit'];
                }

                $data['breadcrumbs'][] = array(
                    'text' => $category_info['name'],
                    'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url)
                );
            }
        }

        $this->load->model('catalog/manufacturer');

        if (isset($this->request->get['manufacturer_id'])) {
            $data['breadcrumbs'][] = array(
                'text' => $this->language->get('text_brand'),
                'href' => $this->url->link('product/manufacturer')
            );

            $url = '';

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            $manufacturer_info = $this->model_catalog_manufacturer->getManufacturer($this->request->get['manufacturer_id']);

            if ($manufacturer_info) {
                $data['breadcrumbs'][] = array(
                    'text' => $manufacturer_info['name'],
                    'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . $url)
                );
            }
        }

        if (isset($this->request->get['search']) || isset($this->request->get['tag'])) {
            $url = '';

            if (isset($this->request->get['search'])) {
                $url .= '&search=' . $this->request->get['search'];
            }

            if (isset($this->request->get['tag'])) {
                $url .= '&tag=' . $this->request->get['tag'];
            }

            if (isset($this->request->get['description'])) {
                $url .= '&description=' . $this->request->get['description'];
            }

            if (isset($this->request->get['category_id'])) {
                $url .= '&category_id=' . $this->request->get['category_id'];
            }

            if (isset($this->request->get['sub_category'])) {
                $url .= '&sub_category=' . $this->request->get['sub_category'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            $data['breadcrumbs'][] = array(
                'text' => $this->language->get('text_search'),
                'href' => $this->url->link('product/search', $url)
            );
        }

        if (isset($this->request->get['product_id'])) {
            $product_id = (int)$this->request->get['product_id'];
        } else {
            $product_id = 0;
        }

        $this->load->model('catalog/product');

        $product_info = $this->model_catalog_product->getProduct($product_id);

        if ($product_info) {
            $url = '';

            if (isset($this->request->get['path'])) {
                $url .= '&path=' . $this->request->get['path'];
            }

            if (isset($this->request->get['filter'])) {
                $url .= '&filter=' . $this->request->get['filter'];
            }

            if (isset($this->request->get['manufacturer_id'])) {
                $url .= '&manufacturer_id=' . $this->request->get['manufacturer_id'];
            }

            if (isset($this->request->get['search'])) {
                $url .= '&search=' . $this->request->get['search'];
            }

            if (isset($this->request->get['tag'])) {
                $url .= '&tag=' . $this->request->get['tag'];
            }

            if (isset($this->request->get['description'])) {
                $url .= '&description=' . $this->request->get['description'];
            }

            if (isset($this->request->get['category_id'])) {
                $url .= '&category_id=' . $this->request->get['category_id'];
            }

            if (isset($this->request->get['sub_category'])) {
                $url .= '&sub_category=' . $this->request->get['sub_category'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            $data['breadcrumbs'][] = array(
                'text' => $product_info['name'],
                'href' => $this->url->link('product/product', $url . '&product_id=' . $this->request->get['product_id'])
            );

            $this->document->setTitle($product_info['meta_title']);
            $this->document->setDescription($product_info['meta_description']);
            $this->document->setKeywords($product_info['meta_keyword']);
            $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');
            $this->document->addScript('catalog/view/javascript/jquery/magnific/jquery.magnific-popup.min.js');
            $this->document->addStyle('catalog/view/javascript/jquery/magnific/magnific-popup.css');
            $this->document->addScript('catalog/view/javascript/jquery/datetimepicker/moment.min.js');
            $this->document->addScript('catalog/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.js');
            $this->document->addStyle('catalog/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.css');

            $data['heading_title'] = $product_info['name'];

            $data['text_select'] = $this->language->get('text_select');
            $data['text_manufacturer'] = $this->language->get('text_manufacturer');
            $data['text_model'] = $this->language->get('text_model');
            $data['text_sku'] = $this->language->get('text_sku');
            $data['text_reward'] = $this->language->get('text_reward');
            $data['text_points'] = $this->language->get('text_points');
            $data['text_stock'] = $this->language->get('text_stock');
            $data['text_discount'] = $this->language->get('text_discount');
            $data['text_tax'] = $this->language->get('text_tax');
            $data['text_option'] = $this->language->get('text_option');
            $data['text_minimum'] = sprintf($this->language->get('text_minimum'), $product_info['minimum']);
            $data['text_write'] = $this->language->get('text_write');
            $data['text_login'] = sprintf($this->language->get('text_login'), $this->url->link('account/login', '', 'SSL'), $this->url->link('account/register', '', 'SSL'));
            $data['text_note'] = $this->language->get('text_note');
            $data['text_tags'] = $this->language->get('text_tags');
            $data['text_related'] = $this->language->get('text_related');
            $data['text_loading'] = $this->language->get('text_loading');

            $data['entry_qty'] = $this->language->get('entry_qty');
            $data['entry_name'] = $this->language->get('entry_name');
            $data['entry_review'] = $this->language->get('entry_review');
            $data['entry_rating'] = $this->language->get('entry_rating');
            $data['entry_good'] = $this->language->get('entry_good');
            $data['entry_bad'] = $this->language->get('entry_bad');
            $data['entry_captcha'] = $this->language->get('entry_captcha');

            $data['button_cart'] = $this->language->get('button_cart');
            $data['button_wishlist'] = $this->language->get('button_wishlist');
            $data['button_compare'] = $this->language->get('button_compare');
            $data['button_upload'] = $this->language->get('button_upload');
            $data['button_continue'] = $this->language->get('button_continue');

            $this->load->model('catalog/review');

            $data['tab_description'] = $this->language->get('tab_description');
            $data['tab_attribute'] = $this->language->get('tab_attribute');
            $data['tab_review'] = sprintf($this->language->get('tab_review'), $product_info['reviews']);

            $data['product_id'] = (int)$this->request->get['product_id'];
            $data['manufacturer'] = $product_info['manufacturer'];
            $data['manufacturers'] = $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $product_info['manufacturer_id']);
            $data['model'] = $product_info['model'];
            $data['sku'] = $product_info['sku'];
            $data['reward'] = $product_info['reward'];
            $data['points'] = $product_info['points'];
            $data['points'] = $product_info['points'];


            if ($product_info['quantity'] <= 0) {
                $data['stock'] = $product_info['stock_status'];
            } elseif ($this->config->get('config_stock_display')) {
                $data['stock'] = $product_info['quantity'];
            } else {
                $data['stock'] = $this->language->get('text_instock');
            }

            $this->load->model('tool/image');

            if ($product_info['image']) {
                $data['popup'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));
            } else {
                $data['popup'] = '';
            }

            if ($product_info['image']) {
                $data['thumb'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height'));
            } else {
                $data['thumb'] = '';
            }

            $data['images'] = array();

            $results = $this->model_catalog_product->getProductImages($this->request->get['product_id']);

            foreach ($results as $result) {
                $data['images'][] = array(
                    'popup' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),
                    'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))
                );
            }

            if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
                $data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
            } else {
                $data['price'] = false;
            }

            if ((float)$product_info['special']) {
                $data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));
            } else {
                $data['special'] = false;
            }

            if ($this->config->get('config_tax')) {
                $data['tax'] = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price']);
            } else {
                $data['tax'] = false;
            }

            $discounts = $this->model_catalog_product->getProductDiscounts($this->request->get['product_id']);

            $data['discounts'] = array();

            foreach ($discounts as $discount) {
                $data['discounts'][] = array(
                    'quantity' => $discount['quantity'],
                    'price'    => $this->currency->format($this->tax->calculate($discount['price'], $product_info['tax_class_id'], $this->config->get('config_tax')))
                );
            }

            $data['options'] = array();

            foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) {
                $product_option_value_data = array();

                foreach ($option['product_option_value'] as $option_value) {
                    if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
                        if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
                            $price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax') ? 'P' : false));
                        } else {
                            $price = false;
                        }

                        $product_option_value_data[] = array(
                            'product_option_value_id' => $option_value['product_option_value_id'],
                            'option_value_id'         => $option_value['option_value_id'],
                            'name'                    => $option_value['name'],
                            'image'                   => $this->model_tool_image->resize($option_value['image'], 50, 50),
                            'price'                   => $price,
                            'price_prefix'            => $option_value['price_prefix']
                        );
                    }
                }

                $data['options'][] = array(
                    'product_option_id'    => $option['product_option_id'],
                    'product_option_value' => $product_option_value_data,
                    'option_id'            => $option['option_id'],
                    'name'                 => $option['name'],
                    'type'                 => $option['type'],
                    'value'                => $option['value'],
                    'required'             => $option['required']
                );
            }

            if ($product_info['minimum']) {
                $data['minimum'] = $product_info['minimum'];
            } else {
                $data['minimum'] = 1;
            }

            $data['review_status'] = $this->config->get('config_review_status');

            if ($this->config->get('config_review_guest') || $this->customer->isLogged()) {
                $data['review_guest'] = true;
            } else {
                $data['review_guest'] = false;
            }

            if ($this->customer->isLogged()) {
                $data['customer_name'] = $this->customer->getFirstName() . ' ' . $this->customer->getLastName();
            } else {
                $data['customer_name'] = '';
            }

            $data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']);
            $data['rating'] = (int)$product_info['rating'];
            $data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');
            $data['attribute_groups'] = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']);

            $data['products'] = array();

            $results = $this->model_catalog_product->getProductRelated($this->request->get['product_id']);

            foreach ($results as $result) {
                if ($result['image']) {
                    $image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_related_width'), $this->config->get('config_image_related_height'));
                } else {
                    $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_related_width'), $this->config->get('config_image_related_height'));
                }

                if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
                    $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
                } else {
                    $price = false;
                }

                if ((float)$result['special']) {
                    $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
                } else {
                    $special = false;
                }

                if ($this->config->get('config_tax')) {
                    $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
                } else {
                    $tax = false;
                }

                if ($this->config->get('config_review_status')) {
                    $rating = (int)$result['rating'];
                } else {
                    $rating = false;
                }

                $data['products'][] = array(
                    'product_id'  => $result['product_id'],
                    'thumb'       => $image,
                    'name'        => $result['name'],
                    'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..',
                    'price'       => $price,
                    'sku'          => $sku,
                    'special'     => $special,
                    'tax'         => $tax,
                    'rating'      => $rating,
                    'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id'])
                );
            }

            $data['tags'] = array();

            if ($product_info['tag']) {
                $tags = explode(',', $product_info['tag']);

                foreach ($tags as $tag) {
                    $data['tags'][] = array(
                        'tag'  => trim($tag),
                        'href' => $this->url->link('product/search', 'tag=' . trim($tag))
                    );
                }
            }

            $data['text_payment_recurring'] = $this->language->get('text_payment_recurring');
            $data['recurrings'] = $this->model_catalog_product->getProfiles($this->request->get['product_id']);

            $this->model_catalog_product->updateViewed($this->request->get['product_id']);

            $data['column_left'] = $this->load->controller('common/column_left');
            $data['column_right'] = $this->load->controller('common/column_right');
            $data['content_top'] = $this->load->controller('common/content_top');
            $data['content_bottom'] = $this->load->controller('common/content_bottom');
            $data['footer'] = $this->load->controller('common/footer');
            $data['header'] = $this->load->controller('common/header');

            $tmpl = 'product';
            $layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
            $config_layout_product = $this->config->get('config_layout_product');
            if ($layout_id>0 && $layout_id != $config_layout_product) {
                $tmpl = 'landing'.$layout_id; // ваш tpl
            }
            
            
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/'.$tmpl.'.tpl')) {
                $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/'.$tmpl.'.tpl', $data));
            } else {
                $this->response->setOutput($this->load->view('default/template/product/'.$tmpl.'.tpl', $data));
            }




            if (isset($this->request->get['path'])) {
                $url .= '&path=' . $this->request->get['path'];
            }

            if (isset($this->request->get['filter'])) {
                $url .= '&filter=' . $this->request->get['filter'];
            }

            if (isset($this->request->get['manufacturer_id'])) {
                $url .= '&manufacturer_id=' . $this->request->get['manufacturer_id'];
            }

            if (isset($this->request->get['search'])) {
                $url .= '&search=' . $this->request->get['search'];
            }

            if (isset($this->request->get['tag'])) {
                $url .= '&tag=' . $this->request->get['tag'];
            }

            if (isset($this->request->get['description'])) {
                $url .= '&description=' . $this->request->get['description'];
            }

            if (isset($this->request->get['category_id'])) {
                $url .= '&category_id=' . $this->request->get['category_id'];
            }

            if (isset($this->request->get['sub_category'])) {
                $url .= '&sub_category=' . $this->request->get['sub_category'];
            }

            if (isset($this->request->get['sort'])) {
                $url .= '&sort=' . $this->request->get['sort'];
            }

            if (isset($this->request->get['order'])) {
                $url .= '&order=' . $this->request->get['order'];
            }

            if (isset($this->request->get['page'])) {
                $url .= '&page=' . $this->request->get['page'];
            }

            if (isset($this->request->get['limit'])) {
                $url .= '&limit=' . $this->request->get['limit'];
            }

            $data['breadcrumbs'][] = array(
                'text' => $this->language->get('text_error'),
                'href' => $this->url->link('product/product', $url . '&product_id=' . $product_id)
            );

            $this->document->setTitle($this->language->get('text_error'));

            $data['heading_title'] = $this->language->get('text_error');

            $data['text_error'] = $this->language->get('text_error');

            $data['button_continue'] = $this->language->get('button_continue');

            $data['continue'] = $this->url->link('common/home');

            $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found');

            $data['column_left'] = $this->load->controller('common/column_left');
            $data['column_right'] = $this->load->controller('common/column_right');
            $data['content_top'] = $this->load->controller('common/content_top');
            $data['content_bottom'] = $this->load->controller('common/content_bottom');
            $data['footer'] = $this->load->controller('common/footer');
            $data['header'] = $this->load->controller('common/header');

            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
                $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/error/not_found.tpl', $data));
            } else {
                $this->response->setOutput($this->load->view('default/template/error/not_found.tpl', $data));
            }
        }
    }

    public function review() {
        $this->load->language('product/product');

        $this->load->model('catalog/review');

        $data['text_no_reviews'] = $this->language->get('text_no_reviews');

        if (isset($this->request->get['page'])) {
            $page = $this->request->get['page'];
        } else {
            $page = 1;
        }

        $data['reviews'] = array();

        $review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);

        $results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);

        foreach ($results as $result) {
            $data['reviews'][] = array(
                'author'     => $result['author'],
                'text'       => nl2br($result['text']),
                'rating'     => (int)$result['rating'],
                'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
            );
        }

        $pagination = new Pagination();
        $pagination->total = $review_total;
        $pagination->page = $page;
        $pagination->limit = 5;
        $pagination->url = $this->url->link('product/product/review', 'product_id=' . $this->request->get['product_id'] . '&page={page}');

        $data['pagination'] = $pagination->render();

        $data['results'] = sprintf($this->language->get('text_pagination'), ($review_total) ? (($page - 1) * 5) + 1 : 0, ((($page - 1) * 5) > ($review_total - 5)) ? $review_total : ((($page - 1) * 5) + 5), $review_total, ceil($review_total / 5));

        if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/review.tpl')) {
            $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/review.tpl', $data));
        } else {
            $this->response->setOutput($this->load->view('default/template/product/review.tpl', $data));
        }
    }

    public function getRecurringDescription() {
        $this->language->load('product/product');
        $this->load->model('catalog/product');

        if (isset($this->request->post['product_id'])) {
            $product_id = $this->request->post['product_id'];
        } else {
            $product_id = 0;
        }

        if (isset($this->request->post['recurring_id'])) {
            $recurring_id = $this->request->post['recurring_id'];
        } else {
            $recurring_id = 0;
        }

        if (isset($this->request->post['quantity'])) {
            $quantity = $this->request->post['quantity'];
        } else {
            $quantity = 1;
        }

        $product_info = $this->model_catalog_product->getProduct($product_id);
        $recurring_info = $this->model_catalog_product->getProfile($product_id, $recurring_id);

        $json = array();

        if ($product_info && $recurring_info) {
            if (!$json) {
                $frequencies = array(
                    'day'        => $this->language->get('text_day'),
                    'week'       => $this->language->get('text_week'),
                    'semi_month' => $this->language->get('text_semi_month'),
                    'month'      => $this->language->get('text_month'),
                    'year'       => $this->language->get('text_year'),
                );

                if ($recurring_info['trial_status'] == 1) {
                    $price = $this->currency->format($this->tax->calculate($recurring_info['trial_price'] * $quantity, $product_info['tax_class_id'], $this->config->get('config_tax')));
                    $trial_text = sprintf($this->language->get('text_trial_description'), $price, $recurring_info['trial_cycle'], $frequencies[$recurring_info['trial_frequency']], $recurring_info['trial_duration']) . ' ';
                } else {
                    $trial_text = '';
                }

                $price = $this->currency->format($this->tax->calculate($recurring_info['price'] * $quantity, $product_info['tax_class_id'], $this->config->get('config_tax')));

                if ($recurring_info['duration']) {
                    $text = $trial_text . sprintf($this->language->get('text_payment_description'), $price, $recurring_info['cycle'], $frequencies[$recurring_info['frequency']], $recurring_info['duration']);
                } else {
                    $text = $trial_text . sprintf($this->language->get('text_payment_until_canceled_description'), $price, $recurring_info['cycle'], $frequencies[$recurring_info['frequency']], $recurring_info['duration']);
                }

                $json['success'] = $text;
            }
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }

    public function write() {
        $this->load->language('product/product');

        $json = array();

        if ($this->request->server['REQUEST_METHOD'] == 'POST') {
            if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 25)) {
                $json['error'] = $this->language->get('error_name');
            }

            if ((utf8_strlen($this->request->post['text']) < 25) || (utf8_strlen($this->request->post['text']) > 1000)) {
                $json['error'] = $this->language->get('error_text');
            }

            if (empty($this->request->post['rating']) || $this->request->post['rating'] < 0 || $this->request->post['rating'] > 5) {
                $json['error'] = $this->language->get('error_rating');
            }

            if (empty($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha'])) {
                $json['error'] = $this->language->get('error_captcha');
            }

            unset($this->session->data['captcha']);

            if (!isset($json['error'])) {
                $this->load->model('catalog/review');

                $this->model_catalog_review->addReview($this->request->get['product_id'], $this->request->post);

                $json['success'] = $this->language->get('text_success');
            }
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
}

Share this post


Link to post
Share on other sites

>> в логах

файл landing17.tpl не создали

>> переименовав файл landing.tpl на landing17.tpl результата не дало.

как определяли?

я даже скачал и поставил opencart_2010 - всё ок.

после создания нового layout (в чистой установке получился id=14) и указания его товару Sony VAIO товар выводится с шаблоном "product_layout14.tpl".

замена в шаблоне

<ul class="thumbnails">
на

<?php echo 'zhopa'; ?>
<ul class="thumbnails">
исправно выводит zhopy

post-3682-0-13797500-1419517443_thumb.png

Share this post


Link to post
Share on other sites

17 айди нового макета, определил с БД.

что-то явно делаю не то.. щас снова попробую сначала

Edited by afwollis
overquote deleted

Share this post


Link to post
Share on other sites

берите id из ссылки на редактирование layout в админке

Share this post


Link to post
Share on other sites

берите id из ссылки на редактирование layout в админке

тот-же 17

 

итак.

создано новый макет Landing путь product/landing

указал этот макет товару №

 

в controller/product/product и на всякий случай в controller/product/landing заменил код с шаблоном на

$tmpl = 'product';
$layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
$config_layout_product = $this->config->get('config_layout_product');
if ($layout_id>0 && $layout_id != $config_layout_product) {
$tmpl = 'landing'.$layout_id; // ваш tpl
}


if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/'.$tmpl.'.tpl')) {
$this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/'.$tmpl.'.tpl', $data));
} else {
$this->response->setOutput($this->load->view('default/template/product/'.$tmpl.'.tpl', $data));
}

скопировал код файла catalog/view/theme/default/template/product/product в catalog/view/theme/default/template/product/landing17.tpl + добавив зловещую zhopy :-)

 

в резальтате получаю

Товар не найден!

и чистые логи...цуко

Share this post


Link to post
Share on other sites

Share this post


Link to post
Share on other sites

Переделал все с ноля. Все воркает как надо. Спасибо всем!

Плюсанул бы, да видимо карма не позволяет

Share this post


Link to post
Share on other sites
            $tmpl = 'product';
            $layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
            $config_layout_product = $this->config->get('config_layout_product');
            if ($layout_id>0 && $layout_id != $config_layout_product) {
                $tmpl = 'product_layout'.$layout_id; // ваш tpl
            }
            
            
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/'.$tmpl.'.tpl')) {
                $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/product/'.$tmpl.'.tpl', $data));
            } else {
                $this->response->setOutput($this->load->view('default/template/product/'.$tmpl.'.tpl', $data));
            }

От куда берется $this->config->get('config_layout_product'); ? Это же в oc_setting должно быть, задаваться из настроек? Но у меня такого нет... А var_dump($config_layout_product) возвращает null 

Share this post


Link to post
Share on other sites

да.

давно хрустальный шар носил в сервис?

Share this post


Link to post
Share on other sites

Уф..

Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ?  :oops:

Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? )))

Мне кажется, самое удачно решение:

имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl

В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl.

Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю..

Edited by baxabit

Share this post


Link to post
Share on other sites

Уф..

Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ?  :oops:

Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? )))

Мне кажется, самое удачно решение:

имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl

В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl.

Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю..

 
У меня в портфолио есть бесплатный модуль для этих целей:

Share this post


Link to post
Share on other sites

Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить.

 

1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее...

2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1

 

Если не в тему не ругайтесь =)

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Sha
      349.00 руб
      Скачать/Купить дополнение


      Layout Type, ускорение мобильной версии.
      DEMO
      Подробней:
      Как сделать шаблон адаптивным? на мобильной версии скрыть "лишние" элементы.
      Как, что-бы при этом не пострадало usability? переместить модули и виджеты на другие позиции.
       
      Даже топовые шаблоны, поступают именно таким образом, элементы которые "не нужны" или наоборот необходимы только в мобильной версии: либо скрываются посредством css (display:none); либо перемещаются, хорошо если flexbox или bootstrap pull push но часто с помощью навешивания множества слушателей событий javascript. Даже адаптивность bootstrap основана на таких принципах.
      Всё это создаёт лишний "вес" и нагрузку, что конечно же замедляет работу сайта и заставляет процессор пользователя работать с повышенной нагрузкой шумя как майнинг ферма.
      Мы в наших продуктах пропагандируем использовать только то, что необходимо сейчас. И исходя из этих принципов нами был разработан
       
      модуль Мобильные схемы который позволит:
      уменьшить объём страницы (предотвратить чрезмерную нагрузку на сеть),  сократить размер структуры DOM, избавится от лишнего JavaScript кода (сократить время выполнения кода JavaScript), избавится от css костылей,       а так-же:
      Устранить ресурсы, блокирующие отображение, Сократить время ответа сервера (время до получения первого байта, TTFB), Использовать подходящий размер изображений,  
           и др.
           при этом даже улучшив
       
      адаптивность, гибкость в настройке и дружелюбность Вашего сайта!  
       
      Поддерживает встроенные схемы популярных модулей, например поддерживает SEOCMS.
      Большие скидки, для постоянных покупателей.
       
      Бесплатно модуль получить можно вместе с шаблоном Roundshop.
       
      Техническая поддержка
      доступна пользователям из списка покупателей.
      Если вы обращаетесь с просьбой разобраться в проблеме, то для экономии времени укажите:
      адрес сайта доступ в админ-панель доступ на FTP-сервер  
      По любым вопросам вы можете связаться с нами через:
      Личные сообщения на форуме; Режим работы с 10-00 до 18-00 по киевскому времени за исключением выходных и праздничных дней.
       
      Добавил Sha Добавлено 13.03.2018 Категория Кэширование, сжатие, ускорение Системные требования Сайт разработчика zeKit.pro Старая цена 450 Метод активации Автоматическая активация Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Нет  
    • By Sha
      DEMO
      Подробней:
      Как сделать шаблон адаптивным? на мобильной версии скрыть "лишние" элементы.
      Как, что-бы при этом не пострадало usability? переместить модули и виджеты на другие позиции.
       
      Даже топовые шаблоны, поступают именно таким образом, элементы которые "не нужны" или наоборот необходимы только в мобильной версии: либо скрываются посредством css (display:none); либо перемещаются, хорошо если flexbox или bootstrap pull push но часто с помощью навешивания множества слушателей событий javascript. Даже адаптивность bootstrap основана на таких принципах.
      Всё это создаёт лишний "вес" и нагрузку, что конечно же замедляет работу сайта и заставляет процессор пользователя работать с повышенной нагрузкой шумя как майнинг ферма.
      Мы в наших продуктах пропагандируем использовать только то, что необходимо сейчас. И исходя из этих принципов нами был разработан
       
      модуль Мобильные схемы который позволит:
      уменьшить объём страницы (предотвратить чрезмерную нагрузку на сеть),  сократить размер структуры DOM, избавится от лишнего JavaScript кода (сократить время выполнения кода JavaScript), избавится от css костылей,       а так-же:
      Устранить ресурсы, блокирующие отображение, Сократить время ответа сервера (время до получения первого байта, TTFB), Использовать подходящий размер изображений,  
           и др.
           при этом даже улучшив
       
      адаптивность, гибкость в настройке и дружелюбность Вашего сайта!  
       
      Поддерживает встроенные схемы популярных модулей, например поддерживает SEOCMS.
      Большие скидки, для постоянных покупателей.
       
      Бесплатно модуль получить можно вместе с шаблоном Roundshop.
       
      Техническая поддержка
      доступна пользователям из списка покупателей.
      Если вы обращаетесь с просьбой разобраться в проблеме, то для экономии времени укажите:
      адрес сайта доступ в админ-панель доступ на FTP-сервер  
      По любым вопросам вы можете связаться с нами через:
      Личные сообщения на форуме; Режим работы с 10-00 до 18-00 по киевскому времени за исключением выходных и праздничных дней.
       
    • By bass4343
      Здравствуйте, помогите решить проблему.Создал статью и выбрал к ней стандартный макет: "Контакты". Но при примени статья выводится с дефолтным шаблоном  information.tpl . В настройках схемы "Контакты" указан верный путь /information/contact . Модули спокойно выводятся из данного макета. Версия ocstore 2.3. Кэш отчищал и в менеджере дополнений и инструментах во вкладке система
    • By zebratratata
      400.00 руб
      Скачать/Купить дополнение


      ZLayouts
      ZLaoyuts предназначен для создания своих схем для вывода модулей.
      Если Вам требуется вывести модуль на определенной странице, то этот модуль, то что Вы ищете.
      С его помощью вы сможете создать список страниц на которых надо показывать модули, или наоборот список страниц на которых не надо выводить модули.
      Возможности:
      - создание списка по категориям, товарам, производителям, статьям
      - создание списка по урлам, а также "route"
      Демка
      log/pass demo
      http://zebratratata.pp.ua
      zebratratata.pp.ua/admin/index.php?route=module/zlayouts
      Проверено на версиях OC 1.5.4.x - 1.5.6.x , ocstore 1.5.5.x
      Для работы нужен vqmod, если нету, есть инструкция в архиве по установке без него
      Если нужна помощь с установкой, или нашли баг, или есть что предложить по модулю пишите - zebratratata@gmail.com или skype dedhater
      Установка: просто скопируйте файлы из папки upload в корень сайта
      Добавил zebratratata Добавлено 31.03.2015 Категория Модули Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.2
      1.5.6.1
      1.5.6 ocStore 2.3
      2.2
      2.1
      1.5.5.1.2 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х  
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.