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

Переход на HTTPS - проблема!


Recommended Posts

5 минут назад, Yoda сказал:

RewriteCond %{HTTP:X-Forwarded-Protocol} !=https
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Для начала попробуйте это перенести в самый низ

Перенес. system/storage/cache очистил. Ничего не изменилось.

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

Такое ощущение, что MySQL отвалился от магазина. Админка

Только что, Yoda сказал:

По всем признакам - у вас проблема не в сертификате, а в том что, основное зеркало не соответсвует записи в конфиге.

Попробуйте добавить www  к адресам.

Добавил.

<?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, мол "сертификат сервера не соответствует адресу сайта".

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

3 минуты назад, Yoda сказал:

И 2.2 - это вы зря!

Какую версию рекомендуете?

5 минут назад, Yoda сказал:

Попробуйте сделать админку без HTTPS

Собственно в конфиге так прописать?

<?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 отваливается. Далее все так же...

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

Когда коту делать нечего, он ничего не делает :) А я попробую поставить релиз от 12.01.2016 [ 2.1.0.2.X ] OPENCART.CMS. Попробую на нем настроить все то же самое. Может реально 2.2.0.0. тупит адово. 

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

2 минуты назад, Yoda сказал:

Прямо как то звучит как заказушная джинса )

Убрал я ссылку на тот вариант, чтобы так не звучало :) Не поверите, сколько времени на ту сборку убил.

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

2 минуты назад, Yoda сказал:

НЕ НЕ - верните уж пожалуйста!!!!

Как скажете. Вернул.

Самое печальное, что там еще и "русский" форум! 

Цитата

На американском форуме задаешь вопрос — тебе отвечают на вопрос. На израильском форуме задаешь вопрос — тебе отвечают вопросом на вопрос. На нашем форуме задаешь вопрос — тебе долго и нудно объясняют, какой ты *****.

 

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

Только что, Yoda сказал:

 

А если вы еще про версию купите - будет вам еще ништяков пачка.

Скорее всего и куплю. Сравнил 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 - все работает. Включаю - не работает.

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

1 минуту назад, Yoda сказал:

У вас php 7.0

Уберите из


 /catalog/controller/common/seo_pro.php

Повторяющийся default: break;

Спасибо! В таком виде заработало:

				//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	

 

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

  • 2 weeks later...

Если никто не против, продолжу я эту тему, поскольку от разных людей приходят разные вопросы относительно магазина, и что бы было куда их ткнуть.

Вопрос 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://вашмагазин/');

Повторюсь! Это для нормальной сборки или оригинального движка и с неиспоганеным кодом!

 

С этим все!

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

Вопрос 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.: та реализация, которая есть в модуле по умолчанию, подходит для "Аналогичных товаров", для "Рекомендуемых товаров" - с натяжкой. А вот для аксесов и доп.услуг к товарам - решение выше.

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

Только что, RHCk сказал:

Можно об этом подробнее?

Можно!

Когда вы регистрируетесь, StartSSL генерирует сертификат на вход, который должен установиться на Ваш компьютер. Здесь нет привычных логинов/паролей. Так вот даже на чистый Chrome в автоматическом режиме он вставать не хочет. Пляски с бубном, думаю, ни к чему. 

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

Браузер - SRware Iron (аналог Chrome без следящей за действиями ерунды), думаю отличий в меню минимум.

ОС - Server 2012 R2 (окно импорта сертификатов может незначительно отличаться)

Pic_1.png

Pic_2.png

Pic_3.png

Pic_4.png

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

Вопрос 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).

 

Ну собственно как-то так... 

 

Получается такая картинка...Пример, настройки на старом магазине...

 

ш2.PNG

ш3.PNG

ш1.PNG

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

Ну и для тех кто забыл... Или не знал...

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 - закладки

Собственно, выше я разобрал ситуацию с гостевым заказом. Зарегистрированные пользователи так же должны пользоваться аналогичной адекватной формой. Все правки делаем по аналогии. 

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

Вопрос 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 } ?>

Всё! Если все правильно сделали, то валидатор ошибок не покажет. Показал ошибки, смотрите, где накосячили!

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

Вопрос 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).

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

  • 2 years later...
7 минут назад, evgenylebedevv сказал:

Сколько ещё сюрпризов ждать от 2.2, или заморочиться и перейти на 2.3?

Лучше перейти на OpenCart.pro 2.3.0.2.5

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

40 минут назад, evgenylebedevv сказал:

Каким образом это лучше сделать?

Сделать на втором нерабочем сайте, после адаптации и уверенности в работе - перенести.

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

  • 3 months later...
В 17.10.2018 at 08:17, evgenylebedevv сказал:

Может кому пригодится ответ по заданной теме:

В файле admin/view/template/common/login.tpl меняем вот это: 


<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data">

На это:


<form action="https://сайт.ру/admin/index.php?route=common/login" method="post" enctype="multipart/form-data">

Мне помогло.

Сколько ещё сюрпризов ждать от 2.2, или заморочиться и перейти на 2.3? Или может быть какие-то фиксы для неё есть?

Мне тоже помогло. Спасибо!  Админка заработала. Уже и надеялся что то найти по теме читая первую страницу и инструкции не совсем по теме в начале второй. Наткнулся на нужное сообщение можно сказать случайно.

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу