pr1h0d Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 Привествую камрады! Возникла проблема, при создании нового макета для страницы товаров. Имеем 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 записал все действия видяшка Плюс в репу всем, кто даст дельный ответ. Спасибо Что делаю не так? Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 товар это URL route=product/product. ваш route=product/landing (с шаблоном landing.tpl) никак не используется движком (@виртуальный@ макет "product/landing" остается виртуальным - только для привязки модулей). Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 не совсем ясно, как тогда сделать разные представления страниц для определенных товаров? Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 в контроллере товара проверяйте layout и по нему подставляйте нужный .tpl Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 колдовать нужно с этими строками? 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 строки кода, прошу помочь. В противном случае готов за пару денег купить услугу, ибо с пыхом я не особо дружу. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 что у layout`a проверять будете - id или route? Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 что у layout`a проверять будете - id или route? я так понимаю, что id route будет один - product/product, а layout-ов много разных upd нашел такой материал тыц Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 (змінено) $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)); } Змінено 25 грудня 2014 користувачем afwollis $product_info['product_id'] > $this->request->get['product_id'] Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Благодарен! но увы в логах 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)); } } Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 >> в логах файл 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 Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 (змінено) 17 айди нового макета, определил с БД. что-то явно делаю не то.. щас снова попробую сначала Змінено 25 грудня 2014 користувачем afwollis overquote deleted Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 берите id из ссылки на редактирование layout в админке Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 берите 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 :-) в резальтате получаю Товар не найден! и чистые логи...цуко Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 https://opencartforum.com/topic/12326-spetcialnyi-shablon-dlia-odnoi-kategorii-tfpic-opencart/ Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Переделал все с ноля. Все воркает как надо. Спасибо всем! Плюсанул бы, да видимо карма не позволяет Надіслати Поділитися на інших сайтах More sharing options... 1 year later... zeyser Опубліковано: 4 січня 2016 Share Опубліковано: 4 січня 2016 $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 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 січня 2016 Share Опубліковано: 5 січня 2016 да. давно хрустальный шар носил в сервис? Надіслати Поділитися на інших сайтах More sharing options... 6 months later... baxabit Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 (змінено) Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. Змінено 22 липня 2016 користувачем baxabit Надіслати Поділитися на інших сайтах More sharing options... halfhope Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. У меня в портфолио есть бесплатный модуль для этих целей: https://opencartforum.com/files/file/1986-%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B/ Надіслати Поділитися на інших сайтах More sharing options... 8 months later... dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації pagespeed Мобільна версія OpenCart магазину Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 0 коментарів 25 606 переглядів Sha 12 березня 2018 pagespeed Модуль Мобільна версія OpenCart магазину [Поддержка] 1 2 3 4 10 Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 247 відповідей 38 220 переглядів Sha 31 жовтня 2021 [Поддержка] Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 3 відповіді 1 287 переглядів kamrik 11 лютого 2021 Сортування модулів у схемах {Drag'n'Drop} Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 0 коментарів 6 081 перегляд PaulKravchenko 27 вересня 2019 HYPER Positions: +70 позицій модулів | Opencart 2.3.x | Автор: crd, 25 січня 2017 позиции дизайн (і ще %d) Теги: позиции дизайн лендинг вывод модулей блоки макет посадочные страницы 0 коментарів 53 369 переглядів HyperLabTeam 7 червня 2017 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Создание нового макета Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 не совсем ясно, как тогда сделать разные представления страниц для определенных товаров? Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 в контроллере товара проверяйте layout и по нему подставляйте нужный .tpl Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 колдовать нужно с этими строками? 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 строки кода, прошу помочь. В противном случае готов за пару денег купить услугу, ибо с пыхом я не особо дружу. Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 что у layout`a проверять будете - id или route? Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 что у layout`a проверять будете - id или route? я так понимаю, что id route будет один - product/product, а layout-ов много разных upd нашел такой материал тыц Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 (змінено) $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)); } Змінено 25 грудня 2014 користувачем afwollis $product_info['product_id'] > $this->request->get['product_id'] Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Благодарен! но увы в логах 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)); } } Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 >> в логах файл 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 Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 (змінено) 17 айди нового макета, определил с БД. что-то явно делаю не то.. щас снова попробую сначала Змінено 25 грудня 2014 користувачем afwollis overquote deleted Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 берите id из ссылки на редактирование layout в админке Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 берите 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 :-) в резальтате получаю Товар не найден! и чистые логи...цуко Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 https://opencartforum.com/topic/12326-spetcialnyi-shablon-dlia-odnoi-kategorii-tfpic-opencart/ Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Переделал все с ноля. Все воркает как надо. Спасибо всем! Плюсанул бы, да видимо карма не позволяет Надіслати Поділитися на інших сайтах More sharing options... 1 year later... zeyser Опубліковано: 4 січня 2016 Share Опубліковано: 4 січня 2016 $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 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 січня 2016 Share Опубліковано: 5 січня 2016 да. давно хрустальный шар носил в сервис? Надіслати Поділитися на інших сайтах More sharing options... 6 months later... baxabit Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 (змінено) Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. Змінено 22 липня 2016 користувачем baxabit Надіслати Поділитися на інших сайтах More sharing options... halfhope Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. У меня в портфолио есть бесплатный модуль для этих целей: https://opencartforum.com/files/file/1986-%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B/ Надіслати Поділитися на інших сайтах More sharing options... 8 months later... dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації pagespeed Мобільна версія OpenCart магазину Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 0 коментарів 25 606 переглядів Sha 12 березня 2018 pagespeed Модуль Мобільна версія OpenCart магазину [Поддержка] 1 2 3 4 10 Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 247 відповідей 38 220 переглядів Sha 31 жовтня 2021 [Поддержка] Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 3 відповіді 1 287 переглядів kamrik 11 лютого 2021 Сортування модулів у схемах {Drag'n'Drop} Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 0 коментарів 6 081 перегляд PaulKravchenko 27 вересня 2019 HYPER Positions: +70 позицій модулів | Opencart 2.3.x | Автор: crd, 25 січня 2017 позиции дизайн (і ще %d) Теги: позиции дизайн лендинг вывод модулей блоки макет посадочные страницы 0 коментарів 53 369 переглядів HyperLabTeam 7 червня 2017 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Создание нового макета Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 колдовать нужно с этими строками? 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 строки кода, прошу помочь. В противном случае готов за пару денег купить услугу, ибо с пыхом я не особо дружу. Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 что у layout`a проверять будете - id или route? Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 что у layout`a проверять будете - id или route? я так понимаю, что id route будет один - product/product, а layout-ов много разных upd нашел такой материал тыц Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 (змінено) $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)); } Змінено 25 грудня 2014 користувачем afwollis $product_info['product_id'] > $this->request->get['product_id'] Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Благодарен! но увы в логах 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)); } } Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 >> в логах файл 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 Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 (змінено) 17 айди нового макета, определил с БД. что-то явно делаю не то.. щас снова попробую сначала Змінено 25 грудня 2014 користувачем afwollis overquote deleted Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 берите id из ссылки на редактирование layout в админке Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 берите 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 :-) в резальтате получаю Товар не найден! и чистые логи...цуко Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 https://opencartforum.com/topic/12326-spetcialnyi-shablon-dlia-odnoi-kategorii-tfpic-opencart/ Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Переделал все с ноля. Все воркает как надо. Спасибо всем! Плюсанул бы, да видимо карма не позволяет Надіслати Поділитися на інших сайтах More sharing options... 1 year later... zeyser Опубліковано: 4 січня 2016 Share Опубліковано: 4 січня 2016 $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 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 січня 2016 Share Опубліковано: 5 січня 2016 да. давно хрустальный шар носил в сервис? Надіслати Поділитися на інших сайтах More sharing options... 6 months later... baxabit Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 (змінено) Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. Змінено 22 липня 2016 користувачем baxabit Надіслати Поділитися на інших сайтах More sharing options... halfhope Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. У меня в портфолио есть бесплатный модуль для этих целей: https://opencartforum.com/files/file/1986-%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B/ Надіслати Поділитися на інших сайтах More sharing options... 8 months later... dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації pagespeed Мобільна версія OpenCart магазину Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 0 коментарів 25 606 переглядів Sha 12 березня 2018 pagespeed Модуль Мобільна версія OpenCart магазину [Поддержка] 1 2 3 4 10 Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 247 відповідей 38 220 переглядів Sha 31 жовтня 2021 [Поддержка] Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 3 відповіді 1 287 переглядів kamrik 11 лютого 2021 Сортування модулів у схемах {Drag'n'Drop} Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 0 коментарів 6 081 перегляд PaulKravchenko 27 вересня 2019 HYPER Positions: +70 позицій модулів | Opencart 2.3.x | Автор: crd, 25 січня 2017 позиции дизайн (і ще %d) Теги: позиции дизайн лендинг вывод модулей блоки макет посадочные страницы 0 коментарів 53 369 переглядів HyperLabTeam 7 червня 2017 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Создание нового макета Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 что у layout`a проверять будете - id или route? я так понимаю, что id route будет один - product/product, а layout-ов много разных upd нашел такой материал тыц Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 (змінено) $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)); } Змінено 25 грудня 2014 користувачем afwollis $product_info['product_id'] > $this->request->get['product_id'] Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Благодарен! но увы в логах 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)); } } Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 >> в логах файл 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 Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 (змінено) 17 айди нового макета, определил с БД. что-то явно делаю не то.. щас снова попробую сначала Змінено 25 грудня 2014 користувачем afwollis overquote deleted Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 берите id из ссылки на редактирование layout в админке Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 берите 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 :-) в резальтате получаю Товар не найден! и чистые логи...цуко Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 https://opencartforum.com/topic/12326-spetcialnyi-shablon-dlia-odnoi-kategorii-tfpic-opencart/ Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Переделал все с ноля. Все воркает как надо. Спасибо всем! Плюсанул бы, да видимо карма не позволяет Надіслати Поділитися на інших сайтах More sharing options... 1 year later... zeyser Опубліковано: 4 січня 2016 Share Опубліковано: 4 січня 2016 $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 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 січня 2016 Share Опубліковано: 5 січня 2016 да. давно хрустальный шар носил в сервис? Надіслати Поділитися на інших сайтах More sharing options... 6 months later... baxabit Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 (змінено) Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. Змінено 22 липня 2016 користувачем baxabit Надіслати Поділитися на інших сайтах More sharing options... halfhope Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. У меня в портфолио есть бесплатный модуль для этих целей: https://opencartforum.com/files/file/1986-%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B/ Надіслати Поділитися на інших сайтах More sharing options... 8 months later... dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації pagespeed Мобільна версія OpenCart магазину Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 0 коментарів 25 606 переглядів Sha 12 березня 2018 pagespeed Модуль Мобільна версія OpenCart магазину [Поддержка] 1 2 3 4 10 Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 247 відповідей 38 220 переглядів Sha 31 жовтня 2021 [Поддержка] Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 3 відповіді 1 287 переглядів kamrik 11 лютого 2021 Сортування модулів у схемах {Drag'n'Drop} Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 0 коментарів 6 081 перегляд PaulKravchenko 27 вересня 2019 HYPER Positions: +70 позицій модулів | Opencart 2.3.x | Автор: crd, 25 січня 2017 позиции дизайн (і ще %d) Теги: позиции дизайн лендинг вывод модулей блоки макет посадочные страницы 0 коментарів 53 369 переглядів HyperLabTeam 7 червня 2017 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Создание нового макета Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Благодарен! но увы в логах 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)); } } Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 >> в логах файл 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 Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 (змінено) 17 айди нового макета, определил с БД. что-то явно делаю не то.. щас снова попробую сначала Змінено 25 грудня 2014 користувачем afwollis overquote deleted Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 берите id из ссылки на редактирование layout в админке Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 берите 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 :-) в резальтате получаю Товар не найден! и чистые логи...цуко Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 https://opencartforum.com/topic/12326-spetcialnyi-shablon-dlia-odnoi-kategorii-tfpic-opencart/ Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Переделал все с ноля. Все воркает как надо. Спасибо всем! Плюсанул бы, да видимо карма не позволяет Надіслати Поділитися на інших сайтах More sharing options... 1 year later... zeyser Опубліковано: 4 січня 2016 Share Опубліковано: 4 січня 2016 $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 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 січня 2016 Share Опубліковано: 5 січня 2016 да. давно хрустальный шар носил в сервис? Надіслати Поділитися на інших сайтах More sharing options... 6 months later... baxabit Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 (змінено) Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. Змінено 22 липня 2016 користувачем baxabit Надіслати Поділитися на інших сайтах More sharing options... halfhope Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. У меня в портфолио есть бесплатный модуль для этих целей: https://opencartforum.com/files/file/1986-%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B/ Надіслати Поділитися на інших сайтах More sharing options... 8 months later... dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації pagespeed Мобільна версія OpenCart магазину Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 0 коментарів 25 606 переглядів Sha 12 березня 2018 pagespeed Модуль Мобільна версія OpenCart магазину [Поддержка] 1 2 3 4 10 Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 247 відповідей 38 220 переглядів Sha 31 жовтня 2021 [Поддержка] Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 3 відповіді 1 287 переглядів kamrik 11 лютого 2021 Сортування модулів у схемах {Drag'n'Drop} Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 0 коментарів 6 081 перегляд PaulKravchenko 27 вересня 2019 HYPER Positions: +70 позицій модулів | Opencart 2.3.x | Автор: crd, 25 січня 2017 позиции дизайн (і ще %d) Теги: позиции дизайн лендинг вывод модулей блоки макет посадочные страницы 0 коментарів 53 369 переглядів HyperLabTeam 7 червня 2017 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Создание нового макета Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 (змінено) 17 айди нового макета, определил с БД. что-то явно делаю не то.. щас снова попробую сначала Змінено 25 грудня 2014 користувачем afwollis overquote deleted Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 берите id из ссылки на редактирование layout в админке Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 берите 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 :-) в резальтате получаю Товар не найден! и чистые логи...цуко Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 https://opencartforum.com/topic/12326-spetcialnyi-shablon-dlia-odnoi-kategorii-tfpic-opencart/ Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Переделал все с ноля. Все воркает как надо. Спасибо всем! Плюсанул бы, да видимо карма не позволяет Надіслати Поділитися на інших сайтах More sharing options... 1 year later... zeyser Опубліковано: 4 січня 2016 Share Опубліковано: 4 січня 2016 $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 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 січня 2016 Share Опубліковано: 5 січня 2016 да. давно хрустальный шар носил в сервис? Надіслати Поділитися на інших сайтах More sharing options... 6 months later... baxabit Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 (змінено) Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. Змінено 22 липня 2016 користувачем baxabit Надіслати Поділитися на інших сайтах More sharing options... halfhope Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. У меня в портфолио есть бесплатный модуль для этих целей: https://opencartforum.com/files/file/1986-%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B/ Надіслати Поділитися на інших сайтах More sharing options... 8 months later... dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації pagespeed Мобільна версія OpenCart магазину Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 0 коментарів 25 606 переглядів Sha 12 березня 2018 pagespeed Модуль Мобільна версія OpenCart магазину [Поддержка] 1 2 3 4 10 Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 247 відповідей 38 220 переглядів Sha 31 жовтня 2021 [Поддержка] Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 3 відповіді 1 287 переглядів kamrik 11 лютого 2021 Сортування модулів у схемах {Drag'n'Drop} Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 0 коментарів 6 081 перегляд PaulKravchenko 27 вересня 2019 HYPER Positions: +70 позицій модулів | Opencart 2.3.x | Автор: crd, 25 січня 2017 позиции дизайн (і ще %d) Теги: позиции дизайн лендинг вывод модулей блоки макет посадочные страницы 0 коментарів 53 369 переглядів HyperLabTeam 7 червня 2017 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Создание нового макета Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 берите 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 :-) в резальтате получаю Товар не найден! и чистые логи...цуко Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 Надіслати Поділитися на інших сайтах More sharing options... rb2 Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 https://opencartforum.com/topic/12326-spetcialnyi-shablon-dlia-odnoi-kategorii-tfpic-opencart/ Надіслати Поділитися на інших сайтах More sharing options... pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Переделал все с ноля. Все воркает как надо. Спасибо всем! Плюсанул бы, да видимо карма не позволяет Надіслати Поділитися на інших сайтах More sharing options... 1 year later... zeyser Опубліковано: 4 січня 2016 Share Опубліковано: 4 січня 2016 $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 Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 5 січня 2016 Share Опубліковано: 5 січня 2016 да. давно хрустальный шар носил в сервис? Надіслати Поділитися на інших сайтах More sharing options... 6 months later... baxabit Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 (змінено) Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. Змінено 22 липня 2016 користувачем baxabit Надіслати Поділитися на інших сайтах More sharing options... halfhope Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. У меня в портфолио есть бесплатный модуль для этих целей: https://opencartforum.com/files/file/1986-%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B/ Надіслати Поділитися на інших сайтах More sharing options... 8 months later... dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації pagespeed Мобільна версія OpenCart магазину Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 0 коментарів 25 606 переглядів Sha 12 березня 2018 pagespeed Модуль Мобільна версія OpenCart магазину [Поддержка] 1 2 3 4 10 Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 247 відповідей 38 220 переглядів Sha 31 жовтня 2021 [Поддержка] Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 3 відповіді 1 287 переглядів kamrik 11 лютого 2021 Сортування модулів у схемах {Drag'n'Drop} Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 0 коментарів 6 081 перегляд PaulKravchenko 27 вересня 2019 HYPER Positions: +70 позицій модулів | Opencart 2.3.x | Автор: crd, 25 січня 2017 позиции дизайн (і ще %d) Теги: позиции дизайн лендинг вывод модулей блоки макет посадочные страницы 0 коментарів 53 369 переглядів HyperLabTeam 7 червня 2017 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам [Решено] Создание нового макета
rb2 Опубліковано: 25 грудня 2014 Share Опубліковано: 25 грудня 2014 https://opencartforum.com/topic/12326-spetcialnyi-shablon-dlia-odnoi-kategorii-tfpic-opencart/ Надіслати Поділитися на інших сайтах More sharing options...
pr1h0d Опубліковано: 25 грудня 2014 Автор Share Опубліковано: 25 грудня 2014 Переделал все с ноля. Все воркает как надо. Спасибо всем! Плюсанул бы, да видимо карма не позволяет Надіслати Поділитися на інших сайтах More sharing options...
zeyser Опубліковано: 4 січня 2016 Share Опубліковано: 4 січня 2016 $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 Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 5 січня 2016 Share Опубліковано: 5 січня 2016 да. давно хрустальный шар носил в сервис? Надіслати Поділитися на інших сайтах More sharing options... 6 months later... baxabit Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 (змінено) Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. Змінено 22 липня 2016 користувачем baxabit Надіслати Поділитися на інших сайтах More sharing options... halfhope Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. У меня в портфолио есть бесплатный модуль для этих целей: https://opencartforum.com/files/file/1986-%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B/ Надіслати Поділитися на інших сайтах More sharing options... 8 months later... dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації pagespeed Мобільна версія OpenCart магазину Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 0 коментарів 25 606 переглядів Sha 12 березня 2018 pagespeed Модуль Мобільна версія OpenCart магазину [Поддержка] 1 2 3 4 10 Автор: Sha, 12 березня 2018 mobile speed без гмо (і ще %d) Теги: mobile speed без гмо 100/100 layout layout type mobile route mobile route adaptive usabiliti *pro* оптимизация скорость тормозит попугаи mobiledetect mobile version first mobile mobile header 247 відповідей 38 220 переглядів Sha 31 жовтня 2021 [Поддержка] Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 3 відповіді 1 287 переглядів kamrik 11 лютого 2021 Сортування модулів у схемах {Drag'n'Drop} Автор: PaulKravchenko, 27 вересня 2019 сортировка схемы (і ще %d) Теги: сортировка схемы layout 0 коментарів 6 081 перегляд PaulKravchenko 27 вересня 2019 HYPER Positions: +70 позицій модулів | Opencart 2.3.x | Автор: crd, 25 січня 2017 позиции дизайн (і ще %d) Теги: позиции дизайн лендинг вывод модулей блоки макет посадочные страницы 0 коментарів 53 369 переглядів HyperLabTeam 7 червня 2017 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
baxabit Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 (змінено) Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. Змінено 22 липня 2016 користувачем baxabit Надіслати Поділитися на інших сайтах More sharing options...
halfhope Опубліковано: 22 липня 2016 Share Опубліковано: 22 липня 2016 Уф.. Модуль так никто и не догадался выпустить, кроме варианта для1.5.* ? :oops: Беря во внимания одно из решений использования ячейки "mpn", может кто-нибудь накатать модуль? ))) Мне кажется, самое удачно решение: имеем нужное количество версий карточки товара, скажем, минимальных две - стандартную product.tpl и переименнованную product-XXX.tpl В нужных товарах добавляем ХХХ в графу "mpn" и получаем вывод нестандартного файла tpl. Только вот не получается добить до финала в 5 утра :))) Или из-за шаблона пролетаю.. У меня в портфолио есть бесплатный модуль для этих целей: https://opencartforum.com/files/file/1986-%D0%BF%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B/ Надіслати Поділитися на інших сайтах More sharing options... 8 months later... dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
dess Опубліковано: 29 березня 2017 Share Опубліковано: 29 березня 2017 Всем привет! Я новичок в Опенкарде - но если надо отдельный макет для определенного товара то в админке можно настроить. 1 - Создайте новый макет в Система\Дизайн\Макет - выставите уникальный путь - к примеру "id=60" для товара и подключайте что надо на нее... 2 - На странице товара во вкладке Дизайн (у меня последний таб) - выбрать тот макет который создали в пункте 1 Если не в тему не ругайтесь =) Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts