Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

natalia8978

Користувачі
  
  • Публікації

    55
  • З нами

  • Відвідування

Усі публікації користувача 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. Контролер мой счас <?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 Что ему еще надо?
  14. Да проблема что там все другое, а twig вообще меня в ступор ставит, я никогда в жизни с ним дела не имела.... Для 1.5. я всегда этой инструкцией пользовалась, но для тройки оно совсем не работает, здесь на форуме так же нашла для двойки инструкцию и она тоже не хочет, Так же нашла для тройки это , даже брала и тупо копировала данный код контролера и шаблона, изменяла только название модуля в контролере, и все равно никак... Не хочут отображатся опции ни как.... Я сейчас делаю опции для блока рекомендуемые товары, вернее зделала клон рекоммендуемых, (с ними все ок) и в данный модуль теперь мучаюсь не могу никак вывести опции....
  15. Приветствую. Не могу нигде найти достойной инструкции о том как добавить в категорию и модули выбор опций для Opencart 3. Для 1.5 все это без проблем решалось парой строчек кода максимум 5-10 минут работы , и я без труда это проделывала, а вот для тройки никак не получается, прошу вашей помощи или ткните носом в тему так как я ее так и не нашла... Спасибо, и заранее благодарю за помощь. PS: Модули не предлагать они мне не нужны, так как у меня задачи совсем иные...
  16. Во ссылку получилось вывести, вместо $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']);
  17. Кстати в версиях 1.5 я всегда пользовалась таким методом: <?php $real_url = $_SERVER['REQUEST_URI']; //получаем адрес текущей страницы $cut_url = rtrim( dirname( $real_url ), "/" )."/"; //отрезаем текущий товар и получаем адрес директории ?> <a href="<?php echo $cut_url; ?>">текст...</a> Но в тройке данный метод не работает так как Php в шаблон не вставить, Может подскажите как можно его внедрить в тройку? это идеальный вариант для меня....
  18. Да, если так то все ок отображает только главную как и нужно, но ссылка все равно не подтягивается Ошибку выдает Notice: Undefined index: href in /home/.../public_html/catalog/controller/product/product.php
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.