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 100

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

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

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


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

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

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


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

в контроллере товара проверяйте 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 100

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

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


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

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

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

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

 

upd

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

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


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

            $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 100

>> в логах

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

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

да.

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

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


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

Уф..

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

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

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

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

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

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

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

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


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

Уф..

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

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

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

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

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

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

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

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


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

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

 

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

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

 

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

 

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


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

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

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

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

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

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

Войти

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

Войти


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

    • От eridan
      Здравсвуйте, в макете на главной пытаюсь изменить содержимое вверху страницы, сохраняю, но на сайте изменений нет. Захожу обратно в макет, редактировать главную, в поле вверху страницы снова стоит аккаунт. С чем это может быть связано?
    • От 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 ocStore OpenCart.Pro, ocShop  
    • От zebratratata
      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 в корень сайта
  • Последние посетители   0 пользователей онлайн

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