pr1h0d

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

Рекомендуемые сообщения

pr1h0d    0

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

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

Имеем 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

 

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
pr1h0d    0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
pr1h0d    0

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

            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 строки кода, прошу помочь.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
pr1h0d    0

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

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

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

 

upd

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

            $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));

}

Изменено пользователем afwollis
$product_info['product_id'] > $this->request->get['product_id']

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
pr1h0d    0

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

 

в логах

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));
    }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

>> в логах

файл 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
pr1h0d    0

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

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

Изменено пользователем afwollis
overquote deleted

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
pr1h0d    0

берите 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 :-)

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097
pardon.gifdntknw.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
pr1h0d    0

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
zeyser    2
            $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 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

да.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
baxabit    73

Уф..

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

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

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

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

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

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

Изменено пользователем baxabit

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
halfhope    158

Уф..

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
dess    4

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

 

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

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От zzharuk
      Подскажите пожалуйста, как в 2.3.0 можно реализовать уникальную страницу для каждого производителя? Пробовал методом создания схемы и добавления url: product/manufacturer/info&manufacturer_id=11 но результат нулевой
    • От Darkness
      Здравствуйте!  Подскажите кто знает как создать макет для статьи в данном случае "о нас"
      Если путь указать "/information/information" то он для всех срабатывает а как только для одной? 
      Seo url я сделал about_us и указал такой путь но ничего.

    • От validol
      Приветствую специалистов Opencarta
       
      Где-то поломал футер сайта, теперь не могу найти как восстановить. 
      Кто поможет где искать. 
      Страница категорий - нормально:
      http://take.ms/LYaU2
      На странице продуктов 
      http://take.ms/xn3LZ
       
       
       
       
    • От a1exnet
      Ребята, привет,
      У меня в PhpMyAdmin таблицы выходят все очень разбросано, накладываясь друг на друга и связи не отображаются.
      Есть у кого-нибудь диаграмма и схема базы данных MySQL Opencart 2.1.x?
      Как тут:
       
    • От antonbobrov
      Привет всем! Начинаю осваивать для себя OpenCart. установил ocStore 2.3.0.2.2. Работаю сейчас со статьями (информационные страницы) и столкнулся со следующей проблемой:
      Использую ЧПУ с помощью SeoPro. Создал информационную страницу и поставил для нее определенную схему в дизайне. В схеме определил путь не information/information, а information/infopage. Страница доступна по адресу /page_info, но шаблон тянется почему-то стандартный для информации. Пробую в схеме добавлять модули какие-нибудь - они отображаются, следовательно, схема подтягивается, но вот путь схемы до контроллера и tpl не идет. В чем может быть проблема? Может где-то стандартный код ковырнуть?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу