Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

natalia8978

Users
  
  • Posts

    55
  • Joined

  • Last visited

Everything posted by natalia8978

  1. Но есть еще вопрос, это не критично но все же, если в страницы нет чпу, тогда при переключении на другой язык з основного получаем 404, это нормально, или это у меня только такой глюк?
  2. В общем разобралась... Сначала я удалила все модификаторы и оставила только SEO мультиязык Из него переписала все полностью вручную в файлы магазина... Очистила все возможные кеши, но изменений полный ноль..... После я тупо изменила вставку строки: $data['hreflang'] = $this->load->controller('extension/module/ocd_multilang'); Не перед : $data['language'] = $this->load->controller('common/language'); как в модификаторе, а вставила ее после: $data['cart'] = $this->load->controller('common/cart'); То есть сделала так: <file path="catalog/controller/common/header.php"> <operation> <search><![CDATA[$data['cart'] = $this->load->controller('common/cart');]]></search> <add position="after"><![CDATA[$data['hreflang'] = $this->load->controller('extension/module/ocd_multilang');]]></add> </operation> </file> И о чудо, теперь все работает без задоринки, ошибок нету, и hreflang в исходном коде прописывает корректно.
  3. Точно... это уже что то другое... А я изначально что то глянула на сообщение и показалось что у меня такое же, ...Наверное сонная была. Но у меня такая ошибка как я написала...
  4. да, и модификаторы и кеш системы, и браузер, ошибка все равно на месте. : Undefined variable: hreflang in /var/www/..../data/www/.../system/storage/modification/catalog/view/theme/..../template/common/header.tpl on line 185 А так то все супер если бы не эта ошибка, которая мне не дает покоя... Вроде все работает только не могу от ошибки избавится, пока просто скрываю отображения ошибок. Я даже из шаблоном разобралась уже и переделала все места где вызывается ссылка в шаблоне, сделала по рекомендации Алексея.
  5. Да, и подскажите пожалуйста как быть из ссылками прописанными напрямую, к примеру во многих шаблонах есть специальные поля где можно указать какую то ссылку и вывести ее в шаблоне. Или же в самом файле шаблона если указать относительную ссылку, то все равно ссылки выводятся без привязки к языку.
  6. А у меня все без изменений, обновленный модуль не момог, чистка кешей тоже не помогла. Тоже 2.3 После очистки кеша системы ошибка пропадает, а через одно два посещения по страницам появляется снова.
  7. Здравствуйте. Нужно поправить опции в аналогичных товарах, я уже сделала вывод опций в карточке товара в аналогичных товарах, но никак не могу сделать так чтоб они добавлялись в корзину после клика купить, в корзину уходит просто товар без опции, если же опция обязательна то редирект на сам товар идет. Насколько я понимаю, по крайней мере в версиях ниже я такое делала, есть много примеров, что нужно изменить саму кнопку и дописать javascript для нее, но к сожалению инструкции я не нашла для третьей версии, и собственно доделать не смогла.... Чтобы вы понимали о чем речь https://prnt.sc/sfvy7b https://prnt.sc/sfvvxn Если готовы помочь в этом вопросе прошу сообщить сроки и сумму... Opencart 3 Спасибо с уважением Наталия.
  8. Наконец то я каким то чудом смогла добавить отображения опций в модули, а так же в карточке в сопутствующие товары, но есть проблема... И так что нужно чтоб опции отображались в сопутствующих товарах: 1. контролер catalog/controller/product/product.php Находим код: $data['products'][] = array( и сразу над ним пишем так: $options = array(); foreach ($this->model_catalog_product->getProductOptions($result['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), $this->session->data['currency']); } 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'] ); } } $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'] ); } 2. Шаблон catalog/view/theme/default/template/product/product.twig точный вывод зависит от шаблона но где то во внутрь после строчек: {% if products %} <h2 class="home-heading text-center">{{ text_related }}<span class="head-bottom"></span></h2> <div class="pro-nepr row thummargin"> <div id="related" class="owl-carousel owl-theme"> {% for product in products %} Обычно перед кнопкой покупки, добавляем код: {% if product.options %} {% for option in product.options %} {% if option.type == 'text' %} <div class="form-group{% if option.required %} required {% endif %}"> <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label> <input type="text" name="option[{{ option.product_option_id }}]" value="{{ heading_title }}" placeholder="{{ option.name }}" id="input-option{{ option.product_option_id }}" class="form-control" /> </div> {% endif %} {% endfor %} {% endif %} Собственно все, теперь опции красиво отображаются в всех сопутствующих товарах... Обратите внимание что в примере только опция вида текст: {% if option.type == 'text' %} <div class="form-group{% if option.required %} required {% endif %}"> <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label> <input type="text" name="option[{{ option.product_option_id }}]" value="{{ heading_title }}" placeholder="{{ option.name }}" id="input-option{{ option.product_option_id }}" class="form-control" /> </div> {% endif %} но по аналогии можно и любую другую или же все виды опций вывести, мне же нужен был именно текст... В общем как оказалось все легко и просто, но тут для меня и закончились радостные эмоции... Дело в том что отобразить опции я то отобразила но при клике по кнопке купить происходит следующее: Если в товаре опция не обязательная, то товар падает просто в корзину, но без выбранной опции, ну а если опция обязательная то соответственно бросает на страницу данного товара.... То есть опция не выбирается. Я понимаю что проблема в javascript и самой кнопке, то есть нужно изменить кнопку ее вызов а так же добавить соответствующий код javascript , но вот какой код ума не приложу, нашла куча примеров в интернете но все они для 2 или 1.5 ветки, а для моей третьей версии ничего нету.... Подскажите пожалуйста какой в третьей версии javascript нужно прописать чтоб опции выбирались....?
  9. Да, спасибо, я как раз до этого тоже додумалась так как увидела $this->config->get('config_theme') . '_image_ И сразу дошло что ведь там тема размеры указывает, изменила назад именно куски на _image_related_width и _image_related_height и теперь все ровненько, спасибо Вам всем за помощь. Счас инструкцию вверху подправлю для других...
  10. Да действительно вы правы, я изменила контролер теперь на такой: Перед: $data['products'] = array(); Добавила теперь так: $data['swatch_products'] = array(); $results = $this->model_catalog_product->getProductSwatch($this->request->get['product_id']); foreach ($results as $result) { if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_swatch_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_swatch_height')); } else { $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('theme_' . $this->config->get('config_theme') . '_image_swatch_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_swatch_height')); } if ($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')), $this->session->data['currency']); } 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')), $this->session->data['currency']); } else { $special = false; } if ((float)$product_info['special']) { $data['action_percent'] = 100-round($product_info['special']/$product_info['price']*100, 0); } else { $data['action_percent']= false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = (int)$result['rating']; } else { $rating = false; } $data['swatch_products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) ); } А в шаблоне теперь так: <div class=""> {% if swatch_products %} <h2 class="home-heading text-center">{{ text_swatch }}<span class="head-bottom"></span></h2> <div class="pro-nepr row thummargin"> <div id="swatch" class=""> {% for product in swatch_products %} {% if column_left and column_right %} {% set class = 'col-xs-8 col-sm-6' %} {% elseif column_left or column_right %} {% set class = '' %} {% else %} {% set class = 'col-xs-12 col-sm-12' %} {% endif %} <div class="product-layout col-xs-12"> <div class="product-thumb transition"> <div class="image"><a href="{{ product.href }}"><img src="{{ product.thumb }}" alt="{{ product.name }}" title="{{ product.name }}" class="img-responsive center-block" /></a> <!-- insp Images Start --> {% set t = 0 %} {% for more_image in product.more_images %} {% for pop in more_image %} {% if t == 0 %} <a href="{{ product.href }}"><img src="{{ pop.popup_more }}" class="img-responsive second-img" alt="hover image"/></a> {% set t = t + 1 %} {% endif %} {% endfor %} {% endfor %} <!-- End --> {% if product.price %} {% if product.special %} <span class="salepro">sale</span> {% endif %} {% endif %} </div> <div class="caption text-center"> <h4><a href="{{ product.href }}">{{ product.name }}</a></h4> {# <p>{{ product.description }}</p> #} {% if product.price %} <p class="price"> {% if not product.special %} {{ product.price }} {% else %} <span class="price-new">{{ product.special }}</span> <span class="price-old">{{ product.price }}</span> {% endif %} {# {% if product.tax %} <span class="price-tax">{{ text_tax }} {{ product.tax }}</span> {% endif %} #} </p> {% endif %} {% if product.rating %} <div class="rating"> {% for i in 1..5 %} {% if product.rating < i %} <span class="fa fa-stack"> <i class="fa fa-star-o fa-stack-2x"></i> </span> {% else %} <span class="fa fa-stack"> <i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i> </span> {% endif %} {% endfor %}</div>{% else %} <div class="rating">{% for i in 1..5 %} <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span> {% endfor %}</div> {% endif %} <div class="button-group"> <button type="button" class="prowish" data-toggle="tooltip" title="{{ button_wishlist }}" onclick="wishlist.add('{{ product.product_id }}');"><svg width="16px" height="16px"><use xlink:href="#addwish"></use></svg></button> <div class="bquickv" data-toggle="tooltip" title="{{ button_quickview }}"></div> <button class="acart" type="button" onclick="cart.add('{{ product.product_id }}');">{# <i class="fa fa-shopping-cart"></i> #}<span class="hidden-xs">{{ button_cart }}</span></button> <!--<button type="button" class="pcom" {# data-toggle="tooltip" title="{{ button_compare }} " #} onclick="compare.add('{{ product.product_id }}');">+ {{ button_compare }}</button>--> </div> </div> </div> </div> {% endfor %} </div> </div> {% endif %} </div> Теперь в модуле верно отображает нужную позицию https://prnt.sc/sffw6m именно та которая в админке указанна. Но ошибки все равно сыплятся https://prnt.sc/sffwub Ну и не показывает собственно картинку, остальное вроде отображает ровно все... Собственно где то что то еще не так....
  11. Доброго времени суток. Сегодня задалась вопросом как сделать дополнительный блок Related Products и у меня почти все получилось, наполовину... Но есть где то косяк который не могу решить самостоятельно, по этому пишу здесь подробнейшую инструкцию как cделать клон сопутствующих товаров в Opencart 3, а с вашей помощью надеюсь довести его до ума. И так первым делом админка, здесь вопросов нет, все идеально. Что делалось и как делалось: 1.admin/controller/catalog/product.php Находим: if (isset($this->request->post['product_related'])) { Перед ним добавляем: if (isset($this->request->post['product_swatch'])) { $products = $this->request->post['product_swatch']; } elseif (isset($this->request->get['product_id'])) { $products = $this->model_catalog_product->getProductSwatch($this->request->get['product_id']); } else { $products = array(); } $data['product_swatchs'] = array(); foreach ($products as $product_id) { $swatch_info = $this->model_catalog_product->getProduct($product_id); if ($swatch_info) { $data['product_swatchs'][] = array( 'product_id' => $swatch_info['product_id'], 'name' => $swatch_info['name'] ); } } 2.admin/model/catalog/product.php Находим код: if (isset($data['product_related'])) { Примерно 105 строка https://prnt.sc/sfdexa и над ним добавляем код: if (isset($data['product_swatch'])) { foreach ($data['product_swatch'] as $swatch_id) { $this->db->query("DELETE FROM " . DB_PREFIX . "product_swatch WHERE product_id = '" . (int)$product_id . "' AND swatch_id = '" . (int)$swatch_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_swatch SET product_id = '" . (int)$product_id . "', swatch_id = '" . (int)$swatch_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_swatch WHERE product_id = '" . (int)$swatch_id . "' AND swatch_id = '" . (int)$product_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_swatch SET product_id = '" . (int)$swatch_id . "', swatch_id = '" . (int)$product_id . "'"); } } После находим туже строку if (isset($data['product_related'])) { но уже примерно на 297 строке и над ними пропускаем две строчки которые выше и добавляем: $this->db->query("DELETE FROM " . DB_PREFIX . "product_swatch WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_swatch WHERE swatch_id = '" . (int)$product_id . "'"); if (isset($data['product_swatch'])) { foreach ($data['product_swatch'] as $swatch_id) { $this->db->query("DELETE FROM " . DB_PREFIX . "product_swatch WHERE product_id = '" . (int)$product_id . "' AND swatch_id = '" . (int)$swatch_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_swatch SET product_id = '" . (int)$product_id . "', swatch_id = '" . (int)$swatch_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_swatch WHERE product_id = '" . (int)$swatch_id . "' AND swatch_id = '" . (int)$product_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_swatch SET product_id = '" . (int)$swatch_id . "', swatch_id = '" . (int)$product_id . "'"); } } Чтоб получилось примерно так:https://prnt.sc/sfdiab Далее находим: $data['product_related'] = $this->getProductRelated($product_id); и перед ним добавляем: $data['product_swatch'] = $this->getProductSwatch($product_id); Далее ищем код, я так понимаю он за удаление товара отвечает: $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "'"); И выше него пишем такой код: $this->db->query("DELETE FROM " . DB_PREFIX . "product_swatch WHERE product_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_swatch WHERE swatch_id = '" . (int)$product_id . "'"); Потом находим код: public function getProductRelated($product_id) { И над ним пишем такое: public function getProductSwatch($product_id) { $product_swatch_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_swatch WHERE product_id = '" . (int)$product_id . "'"); foreach ($query->rows as $result) { $product_swatch_data[] = $result['swatch_id']; } return $product_swatch_data; } Теперь откриваем шаблон: 3.admin/view/template/catalog/product_form.twig Ищем строку <label class="col-sm-2 control-label" for="input-related"> И над ней выше <div class="form-group"> Добавляем: <div class="form-group"> <label class="col-sm-2 control-label" for="input-swatch"><span data-toggle="tooltip" title="{{ help_swatch }}">{{ entry_swatch }}</span></label> <div class="col-sm-10"> <input type="text" name="swatch" value="" placeholder="{{ entry_swatch }}" id="input-swatch" class="form-control" /> <div id="product-swatch" class="well well-sm" style="height: 150px; overflow: auto;"> {% for product_swatch in product_swatchs %} <div id="product-swatch{{ product_swatch.product_id }}"><i class="fa fa-minus-circle"></i> {{ product_swatch.name }} <input type="hidden" name="product_swatch[]" value="{{ product_swatch.product_id }}" /> </div> {% endfor %}</div> </div> </div> Далее в самом низу ищем $('input[name=\'related\']').autocomplete({ и над ним вставим следующее: // Swatch $('input[name=\'swatch\']').autocomplete({ 'source': function(request, response) { $.ajax({ url: 'index.php?route=catalog/product/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request), dataType: 'json', success: function(json) { response($.map(json, function(item) { return { label: item['name'], value: item['product_id'] } })); } }); }, 'select': function(item) { $('input[name=\'swatch\']').val(''); $('#product-swatch' + item['value']).remove(); $('#product-swatch').append('<div id="product-swatch' + item['value'] + '"><i class="fa fa-minus-circle"></i> ' + item['label'] + '<input type="hidden" name="product_swatch[]" value="' + item['value'] + '" /></div>'); } }); $('#product-swatch').delegate('.fa-minus-circle', 'click', function() { $(this).parent().remove(); }); 4.Теперь нам нужно открыть admin/language/ru-ru/catalog/product.php И добавить куда то к примеру в конец списка после всех строчек: $_['entry_swatch'] = 'Swatch Products'; $_['help_swatch'] = '(Autocomplete)'; 5.Ну и последний пункт для вывода в админке: Заходим в базу данных phpMyAdmin там жмем экспорт, в списке находим oc_product_related все галочки снимаем а только возле него оставляем и жмем вперед. Сохраняем на компьютере откриваем в нотепад + и делаем замену всех related на swatch и грузим обратно в базу данных кнопкой импорт. Ну вот собственно и все, теперь в админке можно добавлять свои товары, что с этого кода лишнее я не знаю, но у меня все работает как часы и ошибок не выдает, это я про админку. Ах да, и еще нужно очистить таблицу oc_product_swatch после импорта, там есть такая заветная кнопочка. Все, теперь то что у меня не совсем получилось, это вывести все это в карточку, надеюсь знающие люди подскажут где я сделала ошибку... ----------------------------------------------------------------------- 1. Модель catalog/model/catalog/product.php Здесь мы ищем: public function getProductRelated($product_id) { и над ним добавляем: public function getProductSwatch($product_id) { $product_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_swatch pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.swatch_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); foreach ($query->rows as $result) { $product_data[$result['swatch_id']] = $this->getProduct($result['swatch_id']); } return $product_data; } 2. Открываем контролер catalog/controller/product/product.php: Находим код: $data['products'] = array(); И над ним добавляем: $data['swatch_products'] = array(); $results = $this->model_catalog_product->getProductSwatch($this->request->get['product_id']); foreach ($results as $result) { if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_related_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_related_height')); } else { $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('theme_' . $this->config->get('config_theme') . '_image_related_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_related_height')); } if ($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')), $this->session->data['currency']); } 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')), $this->session->data['currency']); } else { $special = false; } if ((float)$product_info['special']) { $data['action_percent'] = 100-round($product_info['special']/$product_info['price']*100, 0); } else { $data['action_percent']= false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = (int)$result['rating']; } else { $rating = false; } $data['swatch_products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) ); } 3. Открываем шаблон и в нем находим код {% if tags %} и над ним ставим : <div class=""> {% if swatch_products %} <h2 class="home-heading text-center">{{ text_swatch }}<span class="head-bottom"></span></h2> <div class="pro-nepr row thummargin"> <div id="swatch" class=""> {% for product in swatch_products %} {% if column_left and column_right %} {% set class = 'col-xs-8 col-sm-6' %} {% elseif column_left or column_right %} {% set class = '' %} {% else %} {% set class = 'col-xs-12 col-sm-12' %} {% endif %} <div class="product-layout col-xs-12"> <div class="product-thumb transition"> <div class="image"><a href="{{ product.href }}"><img src="{{ product.thumb }}" alt="{{ product.name }}" title="{{ product.name }}" class="img-responsive center-block" /></a> <!-- insp Images Start --> {% set t = 0 %} {% for more_image in product.more_images %} {% for pop in more_image %} {% if t == 0 %} <a href="{{ product.href }}"><img src="{{ pop.popup_more }}" class="img-responsive second-img" alt="hover image"/></a> {% set t = t + 1 %} {% endif %} {% endfor %} {% endfor %} <!-- End --> {% if product.price %} {% if product.special %} <span class="salepro">sale</span> {% endif %} {% endif %} </div> <div class="caption text-center"> <h4><a href="{{ product.href }}">{{ product.name }}</a></h4> {# <p>{{ product.description }}</p> #} {% if product.price %} <p class="price"> {% if not product.special %} {{ product.price }} {% else %} <span class="price-new">{{ product.special }}</span> <span class="price-old">{{ product.price }}</span> {% endif %} {# {% if product.tax %} <span class="price-tax">{{ text_tax }} {{ product.tax }}</span> {% endif %} #} </p> {% endif %} {% if product.rating %} <div class="rating"> {% for i in 1..5 %} {% if product.rating < i %} <span class="fa fa-stack"> <i class="fa fa-star-o fa-stack-2x"></i> </span> {% else %} <span class="fa fa-stack"> <i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i> </span> {% endif %} {% endfor %}</div>{% else %} <div class="rating">{% for i in 1..5 %} <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span> {% endfor %}</div> {% endif %} <div class="button-group"> <button type="button" class="prowish" data-toggle="tooltip" title="{{ button_wishlist }}" onclick="wishlist.add('{{ product.product_id }}');"><svg width="16px" height="16px"><use xlink:href="#addwish"></use></svg></button> <div class="bquickv" data-toggle="tooltip" title="{{ button_quickview }}"></div> <button class="acart" type="button" onclick="cart.add('{{ product.product_id }}');">{# <i class="fa fa-shopping-cart"></i> #}<span class="hidden-xs">{{ button_cart }}</span></button> <!--<button type="button" class="pcom" {# data-toggle="tooltip" title="{{ button_compare }} " #} onclick="compare.add('{{ product.product_id }}');">+ {{ button_compare }}</button>--> </div> </div> </div> </div> {% endfor %} </div> </div> {% endif %} </div> 4. в языковый файл catalog/language/ru-ru/product/product.php Добавляем заголовок $_['text_swatch'] = 'Swatch Products'; Все я закончила... А теперь вопрос знатокам, где я натупила? Почему на сайте выводится шо попало но только не то что в админке, походу выводит именно рекомендуемые старые но никак не из нового мода.... Плизззззз помогите найти причину ошибки, всем спасибо. PS: инструкцию писала лично сама по ходу своих действий по етому строго не судите если что не так... *************************************************************************************************************** Инструкция поправлена, и полностью рабочая, отдельная благодарность Seriusis и Vetroff *************************************************************************************************************** Тему можно закрывать.
  12. текст: Но я уже это {% if option.type == 'select' %} Уже сменила на {% if option.type == 'text' %} Но к сожалению ошибка не в етом так как все равно не хочет...
  13. Кеш чистила, $product_info заменяла... все без изменений...
  14. Контролер мой счас <?php class ControllerExtensionModuleorderswatch extends Controller { public function index($setting) { $this->load->language('extension/module/orderswatch'); $this->load->model('catalog/product'); $this->load->model('tool/image'); $data['products'] = array(); $filter_data = array( 'sort' => 'p.date_added', 'order' => 'DESC', 'start' => 0, 'limit' => $setting['limit'] ); $results = $this->model_catalog_product->getProducts($filter_data); if ($results) { foreach ($results as $result) { if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height']); } else { $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']); } if ($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')), $this->session->data['currency']); } 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')), $this->session->data['currency']); } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = $result['rating']; } else { $rating = false; } $options = array(); foreach ($this->model_catalog_product->getProductOptions($result['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), $this->session->data['currency']); } 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'] ); } } $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'] ); } $data['products'][] = array( 'product_id' => $result['product_id'], 'options' => $options, 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) ); } return $this->load->view('extension/module/orderswatch', $data); } } } И шаблон <h3>{{ heading_title }}</h3> <div class="row"> {% for product in products %} <div class="product-layout col-lg-3 col-md-3 col-sm-6 col-xs-12"> <div class="product-thumb transition"> <div class="image"><a href="{{ product.href }}"><img src="{{ product.thumb }}" alt="{{ product.name }}" title="{{ product.name }}" class="img-responsive" /></a></div> <div class="caption"> <h4><a href="{{ product.href }}">{{ product.name }}</a></h4> <p>{{ product.description }}</p> {% if product.rating %} <div class="rating">{% for i in 1..5 %} {% if product.rating < i %} <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span> {% else %} <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span> {% endif %} {% endfor %}</div> {% endif %} {% if product.price %} <p class="price"> {% if not product.special %} {{ product.price }} {% else %} <span class="price-new">{{ product.special }}</span> <span class="price-old">{{ product.price }}</span> {% endif %} {% if product.tax %} <span class="price-tax">{{ text_tax }} {{ product.tax }}</span> {% endif %} </p> {% endif %} {% if product.options %} <hr> <h3>{{ text_option }}</h3> {% for option in product.options %} {% if option.type == 'select' %} <div class="form-group{% if option.required %} required {% endif %}"> <label class="control-label" for="input-option{{ option.product_option_id }}">{{ option.name }}</label> <select name="option[{{ option.product_option_id }}]" id="input-option{{ option.product_option_id }}" class="form-control"> <option value="">{{ text_select }}</option> {% for option_value in option.product_option_value %} <option value="{{ option_value.product_option_value_id }}">{{ option_value.name }} {% if option_value.price %} ({{ option_value.price_prefix }}{{ option_value.price }}) {% endif %} </option> {% endfor %} </select> </div> {% endif %} {% endfor %} {% endif %} </div> <div class="button-group"> <button type="button" onclick="cart.add('{{ product.product_id }}');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span></button> <button type="button" data-toggle="tooltip" title="{{ button_wishlist }}" onclick="wishlist.add('{{ product.product_id }}');"><i class="fa fa-heart"></i></button> <button type="button" data-toggle="tooltip" title="{{ button_compare }}" onclick="compare.add('{{ product.product_id }}');"><i class="fa fa-exchange"></i></button> </div> </div> </div> {% endfor %} </div> А на деле так https://prnt.sc/sey12b Что ему еще надо?
  15. Да проблема что там все другое, а twig вообще меня в ступор ставит, я никогда в жизни с ним дела не имела.... Для 1.5. я всегда этой инструкцией пользовалась, но для тройки оно совсем не работает, здесь на форуме так же нашла для двойки инструкцию и она тоже не хочет, Так же нашла для тройки это , даже брала и тупо копировала данный код контролера и шаблона, изменяла только название модуля в контролере, и все равно никак... Не хочут отображатся опции ни как.... Я сейчас делаю опции для блока рекомендуемые товары, вернее зделала клон рекоммендуемых, (с ними все ок) и в данный модуль теперь мучаюсь не могу никак вывести опции....
  16. Приветствую. Не могу нигде найти достойной инструкции о том как добавить в категорию и модули выбор опций для Opencart 3. Для 1.5 все это без проблем решалось парой строчек кода максимум 5-10 минут работы , и я без труда это проделывала, а вот для тройки никак не получается, прошу вашей помощи или ткните носом в тему так как я ее так и не нашла... Спасибо, и заранее благодарю за помощь. PS: Модули не предлагать они мне не нужны, так как у меня задачи совсем иные...
  17. Во ссылку получилось вывести, вместо $data['category_href'] = $category_info['href']; Вставила $data['category_href'] = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url); Все работает но все равно ругается в браузере на Notice: Undefined variable: url in / Все теперь работает и ошибки нет, вот так надо было : $data['category_href'] = $this->url->link('product/category', 'path=' . $this->request->get['path']);
  18. Кстати в версиях 1.5 я всегда пользовалась таким методом: <?php $real_url = $_SERVER['REQUEST_URI']; //получаем адрес текущей страницы $cut_url = rtrim( dirname( $real_url ), "/" )."/"; //отрезаем текущий товар и получаем адрес директории ?> <a href="<?php echo $cut_url; ?>">текст...</a> Но в тройке данный метод не работает так как Php в шаблон не вставить, Может подскажите как можно его внедрить в тройку? это идеальный вариант для меня....
  19. Да, если так то все ок отображает только главную как и нужно, но ссылка все равно не подтягивается Ошибку выдает Notice: Undefined index: href in /home/.../public_html/catalog/controller/product/product.php
×
×
  • Create New...

Important Information

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