COVID2019 и это вот все. Друзья, вся эта история начинает плохо пахнет. Мойте руки, не ходите в люди. Отложите все плановые покупки и положите в носок заначку. Заприте ваших родителей, бабушек-дедушек на даче. Лучше перебдеть чем недобдеть. Берегите себя!

АлексейК
opencart.pro-
Публикации
129 -
Зарегистрирован
-
Посещение
-
Days Won
3
Все публикации пользователя АлексейК
-
Смотрел. Не работает. Проблемы те же. Детали ошибки = 301 Moved Permanently Да и собственно причина ошибки при вклчюенном SeoPro со слов одного из авторов в этом: if (rawurldecode($url) != rawurldecode($seo)) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($seo); }
- 6 ответов
-
- cpa
- заказнамаркете
-
(и ещё %d)
Теги:
-
Всем привет! Начинаем биться с CPA "ЯндексМаркета" или, проще, с "Заказом на Маркете". Исходные данные: OPENCART.PRO 2.1.0.2.1 (который, увы, с каждым днем все больше превращается в OPENCART.CMS в лучшем случае, но не об этом) и модуль Y.CMS от Яндекс.Кассы (1.6.0). Не без труда, но подружить их удалось. По Метрике все Ok. Импортом не пользуюсь через него, уж больно тяжело он формируется. А ставил я сей модуль исключительно для CPA "ЯндексМаркета" или, проще, с "Заказом на Маркете". Так вот, все вроде бы настроил, как указано в сопроводительной документации, но тут начинаются пляски с бубном. 1. При включенной SeoPro - модуль не работает, поскольку... Ну есть описание в сети, что она делает не так и почему модуль с ней не дружит. Прилетает ошибка "CANT_GET_RESPONSE HTTP", Детали ошибки = 301 Moved Permanently. Подробнее: ЗАПРОС: POST /yandexbuy/cart HTTP/1.1 Content-Type: application/json;charset=utf-8 {"cart":{"currency":"RUR","items":[{"feedId":451020,"offerId":"447","feedCategoryId":"16","offerName":"Варочная поверхность Kuppersberg FT6VSO9","count":1}],"delivery":{"region":{"id":213,"name":"Москва","type":"CITY","parent":{"id":1,"name":"Москва и Московская область","type":"SUBJECT_FEDERATION","parent":{"id":3,"name":"Центральный федеральный округ","type":"COUNTRY_DISTRICT","parent":{"id":225,"name":"Россия","type":"COUNTRY"}}}}}}} ОТВЕТ: HTTP/1.1 301 Moved Permanently Date: Wed, 26 Oct 2016 15:53:52 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Server: Jino.ru/mod_pizza Set-Cookie: PHPSESSID=6c61e611deecda197079668f5605219a; path=/; domain=.***; HttpOnly Set-Cookie: language=ru; expires=Fri, 25-Nov-2016 15:53:52 GMT; Max-Age=2592000; path=/; domain=*** Set-Cookie: currency=RUB; expires=Fri, 25-Nov-2016 15:53:52 GMT; Max-Age=2592000; path=/; domain=*** Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Location: https://***/index.php?route=yandexbuy/cart&auth-token=*** Vary: Accept-Encoding 2. Отключаю SeoPro - эта ошибка уходит, но приходит новая: "CANT_GET_RESPONSE UNSUPPORTED_MEDIA_TYPE", Детали ошибки = unsupported media-type; nested exception is org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'text/html;charset=utf-8' not supported. Собственно на этом всё. Собственно хотелось бы найти решение для проблемы. Может у кого-то есть проверенные рабочие модули для OPENCART.PRO? Или доработки для OPENCART.PRO? Кто с этим уже сталкивался? ТП Яндекса до проблем юзверей... Разработчик приложения "Y.CMS" словил тишину еще летом. Разработчик аналогичного приложения готов помочь только при условии использования дефолтного опенкарта без каких-либо допилов/шаблонов/модулей и т.д.
- 6 ответов
-
- cpa
- заказнамаркете
-
(и ещё %d)
Теги:
-
Хм. При отключенной директиве display_errors сайт работает. Но как связано одно с другим?..
-
Включил Ioncube Loader. После отключал, включал заново и заново отключал. Ничего не меняется.
-
Всем доброго дня! Вчера упал сайт. Из бэкапа поднять не получается. Кроме того, чистая установка так же не происходит. Понимаю, что проблема скорее с сервером, но в чем - не понимаю. Саппорт хостинга вразумительного ответа то же не может дать. При открытии сайта вываливаются ошибки: Warning: Unknown: open_basedir restriction in effect. File(/site.ru/index.php) is not within the allowed path(s): (false) in Unknown on line 0 Warning: Unknown: failed to open stream: Операция не позволяется in Unknown on line 0 Fatal error: Unknown: Failed opening required 'site.ru/index.php' (include_path='.:/usr/local/zend-5.6/share/pear') in Unknown on line 0 В чем может быть проблема, подскажите, пожалуйста.
-
Всем привет! Есть задача реализовать схему доставки для магазина с такими пожеланиями: 1. Вся доставка по километражу из серии модуля "Доставка по области", когда заранее задается расстояние до каждого пункта. Километраж идет от ПВЗ. 2. Срочная доставка. Тут идет расчет километража от РЦ. По логике вещей, можно делать из серии модуля "Доставка по Москве и за МКАД" с Яндекс Картами. Или делать же на примере "Доставка по области" и плюсовать туда километра от РЦ. Из первых двух вопросов интерес: может кто встречал более интересные модули для такой реализации? Есть у кого идеи, как все это лучше связать? Или как все проще реализовать? 3. Есть модуль "Доставка по расписанию". Его бы тоже хотел привязать. Вопрос как сделать выбор интервалов для простой и срочной доставки.
-
Вопрос 6: Редактирование кнопок соц.сетей. Многих не устраивают запиленные по дефолту социальные кнопки от AddThis. Я их заменил на нужный мне набор от https://tech.yandex.ru/share/. Собственно на тех.яндексе выбираем нужный набор, копируем код и идем в catalog\view\theme\default\template\product\product.tpl. Меняем <!-- AddThis Button BEGIN --> <div class="addthis_toolbox addthis_default_style" data-url="<?php echo $share; ?>"><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a> <a class="addthis_button_tweet"></a> <a class="addthis_button_pinterest_pinit"></a> <a class="addthis_counter addthis_pill_style"></a></div> <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-515eeaf54693130e"></script> <!-- AddThis Button END --> на полученый код. Обновляем модификаторы. Всё! p.s.: по тестам, скорость сайта со скриптом яндекса падает где-то на 1%. Вопрос 7: Тень "блока" при наведении на него. Многие спрашивают, как сделать тень при наведении на блок товара/категории на главной странице. Да, мне этот эффект нравится, поскольку добавляет некой жизни и динамики сайту. Реализовать такую тень просто. Код .product-thumb:hover { box-shadow: 0 0 5px 1px #ddd; } добавляем в catalog/view/theme/default/stylesheet/stylesheet.css Вопрос 8: "Хлебные крошки" расколбашивает в мобильной версии. Есть такая проблема, что на узких экранах хлебные крошки расползаются черт знает как и портят весь вид сайта. Единственный разумный выход из этого я нашел только правкой стилей. @media(max-width: 800px) {.breadcrumb {display:none;}} добавляем в catalog/view/theme/default/stylesheet/stylesheet.css В зависимости от начала возникновения проблем ширину отключения крошек регулируем цифрой (800).
-
Вопрос 5: Семантическая разметка schema.org для товара. Нужна она или нет - многие спорят. Я полагаю, нужна! И так... Идет в catalog\view\theme\default\template\product\product.tpl Далее по порядку меняем: <div class="container"> на <div class="container" itemscope itemtype="http://schema.org/Product"> затем <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li> на <li><a itemprop="url" href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li> затем <ul class="thumbnails"> <?php if ($thumb) { ?> <li><a class="thumbnail" href="<?php echo $popup; ?>" title="<?php echo $heading_title; ?>"><img src="<?php echo $thumb; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a></li> на <ul class="thumbnails"> <?php if ($thumb) { ?> <li><a class="thumbnail" href="<?php echo $popup; ?>" title="<?php echo $heading_title; ?>"><img itemprop="image" src="<?php echo $thumb; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a></li> затем <div class="tab-pane active" id="tab-description"><?php echo $description; ?></div> на <div itemprop="description" class="tab-pane active" id="tab-description"><?php echo $description; ?></div> затем <h1><?php echo $heading_title; ?></h1> на <h1 itemprop="name"><?php echo $heading_title; ?></h1> затем <li> <h2 itemprop="price"><div itemprop="priceCurrency" content="RUB"><?php echo $price; ?></div></h2> </li> на <li itemprop="offers" itemscope itemtype="http://schema.org/Offer"> <h2 itemprop="price"><div itemprop="priceCurrency" content="RUB"><?php echo $price; ?></div></h2> </li> ну и для полного ажура <li><?php echo $text_model; ?> <?php echo $model; ?></li> на <li><?php echo $text_model; ?> <span itemprop="model"><?php echo $model; ?></span></li> и <?php if ($manufacturer) { ?> <li><?php echo $text_manufacturer; ?> <a href="<?php echo $manufacturers; ?>"><?php echo $manufacturer; ?></a></li> <?php } ?> на <?php if ($manufacturer) { ?> <li><?php echo $text_manufacturer; ?> <a href="<?php echo $manufacturers; ?>"> <span itemprop="brand"><?php echo $manufacturer; ?></span> </a></li> <?php } ?> Всё! Если все правильно сделали, то валидатор ошибок не покажет. Показал ошибки, смотрите, где накосячили!
-
Ну и для тех кто забыл... Или не знал... checkout/ - шаблоны страниц Оформления заказа и Корзины покупок cart.tpl – страница Корзины покупок login.tpl – страница Авторизации register.tpl – страница Регистрации checkout.tpl – общий шаблон станицы оформления заказа guest.tpl – шаг, оформление без регистрации guest_shipping.tpl – шаг, ввод данных доставки (при оформлении без регистрации) payment_address.tpl – шаг, ввод личных данных адреса плательщика shipping_address.tpl – шаг, ввод данных нового адреса доставки payment_method.tpl – шаг, выбор способа оплаты shipping_method.tpl – шаг, выбор способа доставки confirm.tpl – шаблон шага подтверждения заказа shipping.tpl – шаблон вывода формы оформления доставки coupon.tpl – шаблон модуля купонов (вывод происходит в на странице корзины) voucher.tpl - шаблон модуля сертификатов (вывод происходит в на странице корзины) reward.tpl - шаблон модуля бонусных баллов (вывод происходит в на странице корзины) account/ - шаблоны страниц Личного кабинета account.tpl – шаблон главной страницы Личного кабинета login.tpl – страница авторизации register.tpl – страница регистрации address_form.tpl – страница формы редактирования адреса address_list.tpl – страница Мои адреса edit.tpl – страница редактирования контактной информации password.tpl – изменение пароля forgotten.tpl – восстановление пароля download.tpl – страница Файлы для скачивания newsletter.tpl – подписка на новости order_info.tpl – информация о заказе order_list.tpl - список заказов recurring_info.tpl – информация о периодическом платеже recurring_list.tpl – список периодических платежей return_form.tpl – форма возврата товара return_info.tpl – информация о возврате return_list.tpl – список возвратов transaction.tpl – страница транзакций reward.tpl – страница бонусных баллов voucher.tpl – подарочные сертификаты wishlist.tpl - закладки Собственно, выше я разобрал ситуацию с гостевым заказом. Зарегистрированные пользователи так же должны пользоваться аналогичной адекватной формой. Все правки делаем по аналогии.
-
Связка Windows 7 Professional 64 и Chrome 49.0.2623.112 m с дефолтными настройками:
-
Вопрос 4: Упросить простую форму заказа! На деле форма "оформление заказа" и так предельно проста. Взрывает мозг людям только "Адрес 1" и "Адрес 2". Данные поля являются по факту дословным переводом и у нас они в целом не приняты. Проще всего в соответствующих /catalog/language/russian/.php поменять "Адрес 1" на "Улица", а "Адрес 2" на "Дом, квартира". Кому этого мало (мне мало в виду покупательского контингента и особенностей магазина), можно делать следующее... 4.1. Убираем "Способ оформления заказа". Здесь не будем спорить, хорошо или плохо предлагать пользователю зарегистрироваться, у каждого на этот счет свое мнение. Идем в /catalog/view/theme/default/template/checkout/login.tpl и ищем там код: <div class="radio"> <label> <?php if ($account == 'register') { ?> <input type="radio" name="account" value="register" checked="checked" /> <?php } else { ?> <input type="radio" name="account" value="register" /> <?php } ?> <?php echo $text_register; ?></label> </div> <?php if ($checkout_guest) { ?> <div class="radio"> <label> <?php if ($account == 'guest') { ?> <input type="radio" name="account" value="guest" checked="checked" /> <?php } else { ?> <input type="radio" name="account" value="guest" /> <?php } ?> <?php echo $text_guest; ?></label> </div> меняем на <div class="radio"> <label> <?php if ($account == 'register') { ?> <input type="radio" name="account" value="register" /> <?php } else { ?> <input type="radio" name="account" value="register" /> <?php } ?> <?php echo $text_register; ?></label> </div> <?php if ($checkout_guest) { ?> <div class="radio"> <label> <?php if ($account == 'guest') { ?> <input type="radio" name="account" value="guest" checked="checked" /> <?php } else { ?> <input type="radio" name="account" value="guest" checked="checked"/> <?php } ?> <?php echo $text_guest; ?></label> </div> В самое начало этого файла приклеиваем скрипт: <script> $(document).ready(function(){ setTimeout(function(){ $('#button-account').trigger('click'); },1000); }); </script> И убираем к чертовой матери его из "оформления". Идем в /catalog/view/theme/default/template/checkout/checkout.tpl и ищем код <div class="panel-group" id="accordion"> <div class="panel panel-default"> и второму "диву" добавляем ситль style="display:none;" т.е. получаем <div class="panel-group" id="accordion"> <div class="panel panel-default" style="display:none;"> Собственно все поля, которые считаете ненужными (ИМХО - факс, компания, адрес 2) так же скрываем стилями style="display:none;" Если есть потребность скрыть обязательное поле, то туда приклеиваем значение ввода, к примеру для "фамилии" <div class="form-group required"> <label class="control-label" for="input-payment-lastname"><?php echo $entry_lastname; ?></label> <input type="text" name="lastname" value="<?php echo $lastname; ?>" placeholder="<?php echo $entry_lastname; ?>" id="input-payment-lastname" class="form-control" /> </div> меняем на <div class="form-group required" style="display:none;"> <label class="control-label" for="input-payment-lastname"><?php echo $entry_lastname; ?></label> <input type="text" name="lastname" value="Петров" placeholder="<?php echo $entry_lastname; ?>" id="input-payment-lastname" class="form-control" /> </div> т.е. вместо value="<?php echo $lastname; ?> мы определили фамилию Петров value="Петров" Делая такие замены, помните, что все это будет сыпаться клиенту в почту в подтверждение заказа, если Вы не поменяете форму письма в соответствующих .tpl !!! Прим.: Фамилию бы я не стал трогать, а вот поле "Почтовый индекс" (input-payment-postcode) можно забить нулями, особенно, если Вы не отправляете клиентам товары по почте. Поскольку 90% (на мой взгляд) владельце магазинов на OC не работают дальше своей страны, в частности, мы дальше РФ, то уберем лишнее действие пользователя. Ищем: <div class="form-group required"> <label class="control-label" for="input-payment-country"><?php echo $entry_country; ?></label> <select name="country_id" id="input-payment-country" class="form-control"> <option value=""><?php echo $text_select; ?></option> <?php foreach ($countries as $country) { ?> <?php if ($country['country_id'] == $country_id) { ?> <option value="<?php echo $country['country_id']; ?>" selected="selected"><?php echo $country['name']; ?></option> <?php } else { ?> <option value="<?php echo $country['country_id']; ?>"><?php echo $country['name']; ?></option> <?php } ?> <?php } ?> </select> </div> меняем на <div class="form-group required" style="display:none;"> <label class="control-label" for="input-payment-country"><?php echo $entry_country; ?></label> <select name="country_id" id="input-payment-country" class="form-control" style="display:none;"> <option value="176"></option> </select> <script> $('document').ready(function(){$("#input-payment-country").trigger('change');}); </script> </div> где 176 - это ID РФ по умолчанию в SQL. Проверить его или найти код своей страны можно в таблице вашпрефикс__country. Скрипт ниже помогает сохранить выбор региона. Закрытие типа <input type="text" value="176" name="country_id" id="input-payment-country" class="form-control"> убьет возможность выбора региона. Если Вы работает в пределах одного региона, то можно закрыть и этим инпутом <div class="form-group required" style="display:none;"> <label class="control-label" for="input-payment-country"><?php echo $entry_country; ?></label> <input type="text" value="176" name="country_id" id="input-payment-country" class="form-control"> </div> Регион (input-payment-zone) убивается напрочь аналогично. Если требуется все-таки оставить выбор региона, то в <div class="form-group required"> <label class="control-label" for="input-payment-zone"><?php echo $entry_zone; ?></label> <select name="zone_id" id="input-payment-zone" class="form-control"> </select> </div> ничего не меняем, а вот дальше в /catalog/view/theme/default/template/checkout/guest.tpl ищем if (json['zone'][i]['zone_id'] == '<?php echo $zone_id; ?>') { html += ' selected="selected"'; } и меняем на if (json['zone'][i]['zone_id'] == 2761) { html += ' selected="selected"'; } 2761 - ID Московской области, по моей специфике, заказы больше идут оттуда. Вы можете поставить свой регион, ID регионов в SQL в вашпрефикс_zone Опять же не понимаю смысловой нагрузки "Платежный адрес" и "Адрес доставки", точнее как, понимаю, но в нашей стране и при работе только с физиками это лишняя путаница. Так же убиваем это поле. Там же в guest.tpl ищем <input type="checkbox" name="shipping_address" value="1" checked="checked" /> <?php } else { ?> <input type="checkbox" name="shipping_address" value="1" /> и меняем на <input type="checkbox" name="shipping_address" value="1" checked="checked" /> <?php } else { ?> <input type="checkbox" name="shipping_address" value="1" checked="checked"/> Шаг с адресом доставки из батареи так же убираем стилями. To /catalog/view/theme/default/template/checkout/checkout.tpl и лепим вот так в $shipping_required <?php if ($shipping_required) { ?> <?php if (!$logged) { ?> <div class="panel panel-default" style="display:none"> <div class="panel-heading"> <h4 class="panel-title"><?php echo $text_checkout_shipping_address; ?></h4> </div> <div class="panel-collapse collapse" id="collapse-shipping-address"> <div class="panel-body"></div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><?php echo $text_checkout_shipping_method; ?></h4> </div> <div class="panel-collapse collapse" id="collapse-shipping-method"> <div class="panel-body"></div> </div> </div> <?php } else { ?> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><?php echo $text_checkout_shipping_address; ?></h4> </div> <div class="panel-collapse collapse" id="collapse-shipping-address"> <div class="panel-body"></div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"><?php echo $text_checkout_shipping_method; ?></h4> </div> <div class="panel-collapse collapse" id="collapse-shipping-method"> <div class="panel-body"></div> </div> </div> <?php } ?> <?php } ?> Решение в данном случае "костыльное". Знаете, как сделать лучше, жду. Я пока тут завис. Причина в том, что если пользователь авторизовался, то без php if он встанет на оформлении заказа. У меня есть два магазина, один торгует только по оплате наличными курьеру или на пункте выдачи. Соответственно лишний выбор способа оплаты ни к чему! В голову /catalog/view/theme/default/template/checkout/payment_method.tpl добавляем <script> $(document).ready(function(){ setTimeout(function(){ $('#button-payment-method').trigger('click'); },1000); }); </script> и <?php if ($agree) { ?> <input type="checkbox" name="agree" value="1" checked="checked" /> <?php } else { ?> <input type="checkbox" name="agree" value="1" /> <?php } ?> меняем на <input type="checkbox" name="agree" value="1" checked="checked" /> в батарее (/catalog/view/theme/default/template/checkout/checkout.tpl) закрываем также стилями (это - collapse-payment-method). Ну собственно как-то так... Получается такая картинка...Пример, настройки на старом магазине...
-
Можно! Когда вы регистрируетесь, StartSSL генерирует сертификат на вход, который должен установиться на Ваш компьютер. Здесь нет привычных логинов/паролей. Так вот даже на чистый Chrome в автоматическом режиме он вставать не хочет. Пляски с бубном, думаю, ни к чему.
-
Вопрос 3: Перекрестные сопутствующие товары. Можно прям пожеланием для будущих сборок. В OpenCart с самого начала присутствовала толи бага, толи фича с перекрестной привязкой товара. Т.е., если к процессору вы рекомендуете термопасту, то автоматически к этой термопасте рекомендуется этот процессор. Не знаю почему до сих пор никого это так не волновало и не волнует, но я считаю это жестью! За сим, не идем покупать платные модули и не ищем фрилансеров а делаем следующее (для версии 2.1.0.2 CMS): Идем по пути /admin/model/catalog/product.php и ищем участок кода: if (isset($data['product_related'])) { foreach ($data['product_related'] as $related_id) { $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'"); } } меняем его на if (isset($data['product_related'])) { foreach ($data['product_related'] as $related_id) { $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'"); //$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'"); //$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$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_related WHERE related_id = '" . (int)$product_id . "'"); if (isset($data['product_related'])) { foreach ($data['product_related'] as $related_id) { $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$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_related WHERE related_id = '" . (int)$product_id . "'"); if (isset($data['product_related'])) { foreach ($data['product_related'] as $related_id) { $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'"); $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'"); //$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'"); //$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$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_related WHERE related_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_related_article WHERE product_id = '" . (int)$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_related WHERE related_id = '" . (int)$product_id . "'"); $this->db->query("DELETE FROM " . DB_PREFIX . "product_related_article WHERE product_id = '" . (int)$product_id . "'"); С кодом все! Кинулись проверять на работу? Не заработало? Не тут то было... С данного момента все привязки будут идти без перекрестия, а вот все что было раньше придется перепривязывать. Жизнь - боль! Другого варианта решения я не нашел. Если Вы только собираете магазинчик, то делайте это сразу. p.s.: та реализация, которая есть в модуле по умолчанию, подходит для "Аналогичных товаров", для "Рекомендуемых товаров" - с натяжкой. А вот для аксесов и доп.услуг к товарам - решение выше.
-
Если никто не против, продолжу я эту тему, поскольку от разных людей приходят разные вопросы относительно магазина, и что бы было куда их ткнуть. Вопрос 1: Как и где я получил SSL. SSL для моего магазина по большей части моя блажь, не более. Но тем не менее, я это сделал. Получил я его бесплатно. Что нужно для этого сделать. Во-первых, узнайте, дружит ли Ваш хостер с SSL. Конечно, сейчас дружат практически все на условия подключения выделенного IP. Ну так во, подключил я выделенный IP. Пока на хостинге шел перенос я полез на https://www.startssl.com/. Для работы с этим сайтом не используйте Google Chrome!!! Лучше всего юзать IE. На сайте есть русскоязычний интерфейс, но с весьма убогим переводом. И так (во-вторых)... На сайте жмакаем "Сейчас получить бесплатный сертификат". Затем регистрируемся. Тут вроде все предельно ясно. Да, не смущайтесь, что время от времени сайт вас будет сбрасывать на английский интерфейс, в шапке выбирайте русский и продолжайте. После того, как сертификат установится на ваш компьютер, перезапустите браузер и зайдите на сайт снова. Далее, идете на https://startssl.com/Certificates и выбираете самый бесплатный Из предложенных вариантов нам нужен "Веб-Сервер SSL/TLS Сертификат". Далее в мастере проверки домена, вводим адрес своего магазина, и... Теперь, он вам предложит для валидации выслать код на один из адресов (postmaster@вашмагазин, или hostmaster@вашмагазин, или webmaster@вашмагазин, как вариант, примари-мэйл домена, если сможет его считать). Короче, если этих ящиков у вас нет, создавайте. Как? Это отдельная тема и OC никак не касается. Почитать можно к примеру тут - https://pdd.yandex.ru/domains_add/. Там же мануал. Все! После получения кода подтверждения, введите его на сайте и жмакайте продолжить. Через 4-6 часов ваш основной и промежуточный сертификат будет сгенерирован и доступен для загрузки. Как все это настраивать на хостинге - вопрос в ТП хостера. Вопрос 2: Как перевести магазин на SSL. Живой магазин я не переводил. Пробовал с версией 2.2.0.0 кривой сборки, ничего не получилось. Задача стояла сделать новый магазин (поскольку старый уже весь испоганен кодами). Новый я устанавливал сразу на HTTPS, предварительно внеся правки в .htaccess по ТУ хостера (пример для моего хостера) RewriteCond %{HTTP:X-Forwarded-Protocol} !=https RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] Магазин сразу встал как надо и без каких-либо проблем. Так, при нормальной сборке и не запоганеном коде, достаточно сделать изменения в конфигах <?php // HTTP define('HTTP_SERVER', 'https://вашмагазин/'); // HTTPS define('HTTPS_SERVER', 'https://вашмагазин/'); и <?php // HTTP define('HTTP_SERVER', 'https://вашмагазин/admin/'); define('HTTP_CATALOG', 'https://вашмагазин/'); // HTTPS define('HTTPS_SERVER', 'https://вашмагазин/admin/'); define('HTTPS_CATALOG', 'https://вашмагазин/'); Повторюсь! Это для нормальной сборки или оригинального движка и с неиспоганеным кодом! С этим все!
-
Спасибо! В таком виде заработало: //blog case 'blog_category_id': $blog_categories = explode('_', $value); foreach ($blog_categories as $blog_category) { $queries[] = 'blog_category_id=' . $blog_category; } unset($data[$key]); break; //blog
-
Скорее всего и куплю. Сравнил CMS и PRO, различия нашел по модулям. PRO, естественно, интереснее. Но пока на CMS потренируюсь. Сначала хочу все настроить от и до, понять все особенности сборки и т.д. А потом уже в бой! Пока вот уперся в проблему Fatal error: Switch statements may only contain one default clause in /catalog/controller/common/seo_pro.php on line 242 Ищу, что не так сделал) Выключаю SEO PRO - все работает. Включаю - не работает.
-
Как скажете. Вернул. Самое печальное, что там еще и "русский" форум!
-
Убрал я ссылку на тот вариант, чтобы так не звучало Не поверите, сколько времени на ту сборку убил.
-
Ребятки! Всем спасибо! Все свободны. Поставил ваш релиз все сразу после установки заработало на HTTPS без проблем! Подчеркиваю СРАЗУ! Устанавливал правда сразу с измененным .htaccess. Предыдущий используемый релиз на таких настройках даже стартовать не хотел! А вот это пусть горит в аду! Намаялся я с ней. Сил моих нет.
-
Когда коту делать нечего, он ничего не делает А я попробую поставить релиз от 12.01.2016 [ 2.1.0.2.X ] OPENCART.CMS. Попробую на нем настроить все то же самое. Может реально 2.2.0.0. тупит адово.
-
Какую версию рекомендуете? Собственно в конфиге так прописать? <?php // HTTP define('HTTP_SERVER', 'http://shop.ru/admin/'); define('HTTP_CATALOG', 'http://shop.ru/'); // HTTPS define('HTTPS_SERVER', 'http://shop.ru/admin/'); define('HTTPS_CATALOG', 'http://shop.ru/'); CSS отваливается. Далее все так же...
-
Такое ощущение, что MySQL отвалился от магазина. Админка Добавил. <?php // HTTP define('HTTP_SERVER', 'http://www.shop.ru/admin/'); define('HTTP_CATALOG', 'http://www.shop.ru/'); // HTTPS define('HTTPS_SERVER', 'https://www.shop.ru/admin/'); define('HTTPS_CATALOG', 'https://www.shop.ru/'); <?php // HTTP define('HTTP_SERVER', 'http://www.shop.ru/'); // HTTPS define('HTTPS_SERVER', 'https://www.shop.ru/'); Магазин по прежнему открывается в HTTPS нормально. Ссылки так же в коде прописаны как HTTP, а при переходя открываются в HTTPS (ну как и было). А вот админка умерла на стадии входа, браузер не пускает, выдает ошибку SSL, мол "сертификат сервера не соответствует адресу сайта".
-
Перенес. system/storage/cache очистил. Ничего не изменилось.