[FAQ] Настройки, оптимизации, фичи, статьи для OpenCart

Тема в разделе "OpenCart", создана пользователем VeroN, 23 дек 2012.

  1. VeroN

    VeroN

    Регистрация:
    26 ноя 2012
    Сообщения:
    82
    Симпатии:
    316
    « Правила раздела »
    1. Обсуждения - запрещены! Здесь размещаются только "готовые решения".
    2. Если хотите отблагодарить автора поста, то используем кнопку «Мне нравится». Создавать для этого новые сообщения не нужно!
    3. Размещать ссылки на сторонние ресурсы - запрещено.
    4. Если у вас возникли вопросы по одному из сообщений и вы считаете, что оно требует доработки или прочих изменений, то свяжитесь с автором поста для редактирования информации или сообщите одному из модераторов раздела для внесения изменений при помощи личных сообщений или кнопки "Пожаловаться".
    Правила оформления сообщения
    1. Название - для удобного поиска.
    2. Использовать размер шрифта для заголовков не больше 5, для остального не меньше 3 (стандартный). Если используете другой "цвет" шрифта, то он должен быть адекватным и не содержать 'радуги' или 'ядовитый' оттенок, который при просмотре ломает глаза.
    3. Для кода используем соответствующие теги, если код длинный, то прячем под "спойлер".
    4. Свободная информация взятая из интернета под хайдом не устанавливается! Если это ваш личный метод, то хайд на ваше усмотрение.
    Пример:
    « Меняем иконку для сайта »

    По умолчанию стандартная иконка имеет вид корзины для покупок. Рисуем свою иконку (16х16 px), сохраняем ее как "favicon.ico" и загружаем в корень сайта. Открываем файл "header.tpl" (путь: catalog\view\theme\default\template\common) и добавляем строчку:
    Код:
    <link rel="shortcut icon" href="/favicon.ico">
    - - -
    С уважением,
    Администрация форума
     
    rrrrsrer79, hisbvdis, Zelveger и 3 другим нравится это.
  2. panasys

    panasys

    Регистрация:
    14 май 2013
    Сообщения:
    83
    Симпатии:
    32
    В BlogManager 1.3.6.2 article_form.tpl НЕ НАШЕЛ этого!
     
  3. Ping

    Ping PingWin always win

    Регистрация:
    29 окт 2012
    Сообщения:
    445
    Симпатии:
    302
    Анимированный <title>

    Код вставляем сразу после <body> и радуемся увиденному
     
    lion_lk, ART994, buldozer и 3 другим нравится это.
  4. alex_storm

    alex_storm webdev

    Регистрация:
    11 дек 2012
    Сообщения:
    1.151
    Симпатии:
    667
    В нем другой input. Но, можно поискать по этому - article_description, это осталось.
     
  5. Beloksik

    Beloksik

    Регистрация:
    27 июл 2014
    Сообщения:
    4
    Симпатии:
    2
    также редактируйте в остальных таблицах, например в таблице product_special поле Price
     
  6. gdfsfdgfs

    gdfsfdgfs

    Регистрация:
    6 авг 2014
    Сообщения:
    70
    Симпатии:
    17
    хороший robots, но забыли дописать: Disallow: /index.php?route=product/compare
     
  7. Fiable

    Fiable

    Регистрация:
    16 авг 2014
    Сообщения:
    172
    Симпатии:
    114
    Дополнительная защита администраторской панели Opencart 1.5.6.4

    1 Установка пароля. Генерируем пароль тут. Для этого вводим желаемый логин и пароль в форме. Жмем create .htpasswd

    2 Закидываем этот файл в папку админ

    3 Создаем файл с названием "" .htaccess "" тут. Для этого пишем в первом окне пишем текст, который будет отображаться в форме. И в следующем - путь к файлу .htpasswd

    4 Если затрудняетесь правильно написать путь к файлу .htpasswd, то создайте файл c названием path.php со следующим кодом
    Код:
    <?php

    $dir = dirname(__FILE__);

    echo "<p>Full path to this dir: " . $dir . "</p>";

    echo "<p>Full path to a .htpasswd file in this dir: " . $dir . "/.htpasswd" . "</p>";

    ?>
    5 Откройте в браузере МАГАЗИН.ru/path.php

    6 Скопируйте путь к вашему файлу .htpasswd и вставьте, как указано в пункте 3.

    7 Жмем Create .htaccess file и копируем из окна то, что у нас получилось.

    8 Создаем в блокноте файл .htaccess, вставляем сгенерированный текст.

    7 Файл закидываем в папку admin.

    Если Вы все сделали правильно, то при попытке зайти в админ панель у Вас появится окно для ввода пароля. После ввода которого вы попадете на страницу с администраторской формой авторизации.
     
  8. zamalatb

    zamalatb

    Регистрация:
    29 апр 2014
    Сообщения:
    113
    Симпатии:
    32
    Делаем разные лого магазина в зависимости от выбранного языка на сайте!
    в файле catalog/view/theme/yourtheme/template/common/header.tpl
    вместо:
    Код:
    <?php if ($logo) { ?>
      <div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /></a></div>
      <?php } ?>
    вставляем:
    Код:
    <?php
    if($lang == 'ru'){
    $logo = 'image/data/logo_ru.png';
    } elseif($lang == 'en'){
    $logo = 'image/data/logo_en.png';
    }
    ?>
    <?php if ($logo) { ?>
    <div id="logo"><a href="<?php echo $home; ?>"><img src="<?php echo $logo; ?>" title="<?php echo $name; ?>" alt="<?php echo $name; ?>" /></a></div>
    <?php } ?>
    где logo_XX.png нужная картинка с логотипом.
     
    lion_lk, Ping, Дмитрич и 3 другим нравится это.
  9. avril

    avril

    Регистрация:
    5 авг 2014
    Сообщения:
    146
    Симпатии:
    136
    Создайте файл .htaccess, если он отсутствует, в папке downloads со следующим содержанием:
    Код:
    <Files ~ ".(php*|phtml|pl|py|jsp|asp|htm*|shtml|sh|cgi)">
        ForceType text/plain
    </Files> 
     
    travlarnor и halfhope нравится это.
  10. panasys

    panasys

    Регистрация:
    14 май 2013
    Сообщения:
    83
    Симпатии:
    32
    При переносе интернет-магазина на Opencart всегда приходится править конфигурационные файлы config.php и admin/config.php, а, именно, приписывать новые адреса хостов и пути к директориям не говоря уже о параметрах БД.

    Есть решение, которое может свести к минимуму действий при переносе сайта на Opencart на другой домен или хостинг.

    config.php

    <?php
    // HTTP
    $host = $_SERVER['HTTP_HOST'];
    define('HTTP_SERVER', 'http://'.$host.'/');
    define('HTTP_IMAGE', 'http://'.$host.'/image/');
    define('HTTP_ADMIN', 'http://'.$host.'/admin/');

    // HTTPS
    define('HTTPS_SERVER', 'http://'.$host.'/');
    define('HTTPS_IMAGE', 'http://'.$host.'/image/');

    // DIR
    $dir = dirname(__FILE__);
    define('DIR_APPLICATION', $dir . '/catalog/');
    define('DIR_SYSTEM', $dir . '/system/');
    define('DIR_DATABASE', $dir . '/system/database/');
    define('DIR_LANGUAGE', $dir . '/catalog/language/');
    define('DIR_TEMPLATE', $dir . '/catalog/view/theme/');
    define('DIR_CONFIG', $dir . '/system/config/');
    define('DIR_IMAGE', $dir . '/image/');
    define('DIR_CACHE', $dir . '/system/cache/');
    define('DIR_DOWNLOAD', $dir . '/download/');
    define('DIR_LOGS', $dir . '/system/logs/');

    // DB
    define('DB_DRIVER', 'mysql');
    define('DB_HOSTNAME', 'localhost');
    define('DB_USERNAME', 'mysql_user');
    define('DB_PASSWORD', 'mysql_password');
    define('DB_DATABASE', 'mysql_db');
    define('DB_PREFIX', 'oc_');
    ?>

    admin/config.php

    <?php
    // HTTP
    $host = $_SERVER['HTTP_HOST'];
    define('HTTP_SERVER', 'http://'.$host.'/admin/');
    define('HTTP_CATALOG', 'http://'.$host.'/');
    define('HTTP_IMAGE', 'http://'.$host.'/image/');

    // HTTPS
    define('HTTPS_SERVER', 'http://'.$host.'/admin/');
    define('HTTPS_CATALOG', 'http://'.$host.'/');
    define('HTTPS_IMAGE', 'http://'.$host.'/image/');

    // DIR
    $dir = dirname(dirname(__FILE__));
    define('DIR_APPLICATION', $dir . '/admin/');
    define('DIR_SYSTEM', $dir . '/system/');
    define('DIR_DATABASE', $dir . '/system/database/');
    define('DIR_LANGUAGE', $dir . '/admin/language/');
    define('DIR_TEMPLATE', $dir . '/admin/view/template/');
    define('DIR_CONFIG', $dir . '/system/config/');
    define('DIR_IMAGE', $dir . '/image/');
    define('DIR_CACHE', $dir . '/system/cache/');
    define('DIR_DOWNLOAD', $dir . '/download/');
    define('DIR_LOGS', $dir . '/system/logs/');
    define('DIR_CATALOG', $dir . '/catalog/');

    // DB
    define('DB_DRIVER', 'mysql');
    define('DB_HOSTNAME', 'localhost');
    define('DB_USERNAME', 'mysql_user');
    define('DB_PASSWORD', 'mysql_password');
    define('DB_DATABASE', 'mysql_db');
    define('DB_PREFIX', 'oc_');
    ?>
     
    Lasted edited by : 16 июл 2015
    travlarnor, LowTech, wwwebpl и 4 другим нравится это.
  11. Zulus

    Zulus Команда форума

    Регистрация:
    20 дек 2012
    Сообщения:
    746
    Симпатии:
    722
    Группа для зарегистрированных пользователей.
    По умолчанию в опенкарт зарегистрированные пользователи попадают в группу default, это не очень удобно, когда для зарегистрированных пользователей создаются скидки. Администратору приходится вручную переносить пользователя в нужную группу.
    На просторах интернета нашел решение, но оно было разнесено по разным темам, собрал все воедино и выкладываю здесь:
    1) Создаем группу для зарегистрированных пользователей - "Постоянный покупатель" (в админке Продажи->Покупатели->Группы покупателей->Добавить)
    2) Открываем файл на сервере /admin/controller/setting/setting.php , находим в нем кусок кода (у меня 1087-1089 строки):
    PHP:
    if (!empty($this->request->post['config_customer_group_display']) && !in_array($this->request->post['config_customer_group_id'], $this->request->post['config_customer_group_display'])) {
                
    $this->error['customer_group_display'] = $this->language->get('error_customer_group_display');
            }
    и комментируем его так:
    PHP:
    /*if (!empty($this->request->post['config_customer_group_display']) && !in_array($this->request->post['config_customer_group_id'], $this->request->post['config_customer_group_display'])) {
                $this->error['customer_group_display'] = $this->language->get('error_customer_group_display');
            }*/    
    3) Открываем Система->Настройки->Изменить->вкладка Опции->Аккаунт
    Группа клиентов: (Группа покупателей по умолчанию) - выбрать default
    Группы клиентов: (Показывать группы покупателей, которые новые покупатели могут выбрать при регистрации, такие как "Оптовые покупатели" или "Бизнес-партнёры".) - установить галочку только на нашу группу "Постоянный покупатель"
    вот так:
    [​IMG]
    4) В базе данных находим ваш-префикс_customer_group и запоминаем customer_group_id для новой группы - Постоянный покупатель (в моем случае он под номером 2)
    5) Открываем файл /catalog/model/account/customer.php
    находим строку
    $customer_group_id = $this->config->get('config_customer_group_id');
    и меняем ее на
    $customer_group_id = 2;
    где 2 - это customer_group_id для новой группы - Постоянный покупатель (может отличаться, если у вас несколько групп)
    Все, готово!
    После этого все регистрирующиеся клиенты будут сразу переноситься в группу "Постоянный покупатель", а незарегистрированные будут относиться к группе default.
     
    Последнее редактирование: 13 дек 2015
    Vlad-i-Slav, kerifan, lion_lk и 2 другим нравится это.
  12. karavan

    karavan

    Регистрация:
    4 дек 2014
    Сообщения:
    8
    Симпатии:
    1
    Защаем админку от несанкционированного доступа

    Выше уже упоминались способы через .htaccess, но хотелось бы напомнить, что свет клином не сходился на апаче.
    Для практикующих связку nginx + php-fpm рекомендую следующее решение:
    Также следует не забывать установленную пару ключ-секрет во избежание потери доступа к админке, я же напомню, что у тру-админа должен быть доступ к сайту не только по протоколу http ...
    И не забываем о возможности переименования директории admin.
     
    Lasted edited by : 16 июл 2015
    halfhope нравится это.
  13. ADvarri

    ADvarri

    Регистрация:
    31 авг 2013
    Сообщения:
    30
    Симпатии:
    24
    выставляем опции товара в ряд — горизонтально

    По умолчанию Opencart предоставляет опции вот в таком виде:



    [​IMG]

    Мы же добьемся следующего — горизонтального расположения опций:


    [​IMG]
    Код взят с OpenCart версии 1.5.3.1, но в данном случае версия не столь важна, главное понять принцип и использовать его при надобности.
    Изображения опций находятся в таблице, так что ее мы и будем немного изменять. Открываем файл catalog\view\theme\default\template\product\product.tpl и находим div с классом «option» (приблизительно 119 строка).

    а). Внутри находим таблицу и ее строке (tr) придадим собственный класс (строка 126). Теперь вместо

    <tr>
    будет
    <tr class="tr_my_options">
    б). Также придадим класс для label, который отвечает за вывод названия опции (строка 129).
    Было

    <td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>">
    <?php echo $option_value['name']; ?>

    стало

    <td><label class="name_my_options" for="option-value-<?php echo $option_value
    ['product_option_value_id']; ?>">
    <?php echo $option_value['name']; ?>

    Что дало нам появление этих двух новых классов? Теперь мы можем задать этим элементам свои стили и отпозиционировать их как посчитаем нужным.
    Если не вникать в строки кода и не изменять их по отдельности, можете заменить код (строки 126-134)

    <tr>
    <td style="width: 1px;"><input type="radio" name="option[<?php echo $option['product_option_id']; ?>
    ]" value="<?php echo $option_value['product_option_value_id']; ?>" id="option-value-<?php echo $option_value[
    'product_option_value_id']; ?>" /></td>
    <td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>">
    <img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value['name'] . ($option_value
    ['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" /></label></td>
    <td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>">
    <?php echo $option_value['name']; ?>
    <?php if ($option_value['price']) { ?>
    (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
    <?php } ?>
    </label></td>
    </tr>

    На этот код:

    <tr class="tr_my_options">
    <td style="width: 1px;"><input type="radio" name="option[<?php echo $option
    ['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>
    " id="option-value-<?php echo $option_value['product_option_value_id']; ?>" /></td>
    <td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>">
    <img src="<?php echo $option_value['image']; ?>" alt="<?php echo $option_value
    ['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value
    ['price'] : ''); ?>" /></label></td>
    <td><label class="name_my_options" for="option-value-<?php echo $option_value
    ['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
    <?php if ($option_value['price']) { ?>
    (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
    <?php } ?>
    </label></td>
    </tr>

    в). Итак, сохраняем внесенные изменения и переходим к catalog\view\theme\default\stylesheet\stylesheet.css. Добавим стиль нашим новым классам. Не буду подробно останавливаться на каждом пункте — для кого css знаком, код будет простым и понятным, кто же с ним не знаком, то и смысла нет вдаваться в подробности.
    Код, добавленный мною, который привел к горизонтальному расположению опций, как на втором скриншоте, имеет следующий вид:

    .tr_my_options {
    position: relative;
    float: left;
    width: 100px;
    margin-right: 10px;
    margin-bottom: 35px;
    }
    .name_my_options {
    position: absolute;
    top: 60px;
    left: 3px;
    right: 10px;
    text-align: center;
    }

    Вот таким несложным способом мы изменили расположение опций: теперь вместо того, чтобы выстраиваться столбцом, опции расположились рядами. Если потребуется присвоить опциям более длинные названия, уменьшить или увеличить отступы, то придется всего лишь немного подправить стили, никаких манипуляций с файлами темы не потребуется.
     
    Podmasteri, Ramst, x-guest и ещё 1-му нравится это.
  14. ADvarri

    ADvarri

    Регистрация:
    31 авг 2013
    Сообщения:
    30
    Симпатии:
    24
    НЕ РАБОТАЕТ КАПЧА НА СТРАНИЦЕ ОТЗЫВА ТОВАРА

    В своей версии Opencart 1.5.6 на странице продукта я обнаружилось, что в табе Отзывы отсутствует картинка капчи.

    Файл: system/library/captcha.php

    Что заменить:

    function__construct() {
    $this->code =substr(sha1(mt_rand()), 17, 6);
    }

    На что заменить:

    function__construct() {
    $this->code =substr(sha1(mt_rand()), 17, 6);
    $out= ob_get_contents();
    $out=str_replace(array("\n","\r","\t"," "),"",$this->code);
    ob_end_clean();
    }
     
  15. ADvarri

    ADvarri

    Регистрация:
    31 авг 2013
    Сообщения:
    30
    Симпатии:
    24
    убираем лишние страны и устанавливаем по умолчанию определенную страну

    Как нам известно, оформление заказа в OpenCart слишком длинное: масса полей, которые практически каждому хочется отключить, удалить или скрыть. Процесс регистрации и оформления заказа получается утомительным, что вполне вероятно, может негативно сказаться на магазине. И одним из немаловажных моментов является выбор страны и города: выпадающий список с перечнем стран чересчур длинный и зачастую никому не нужный, так как большая часть магазинов работает либо по городу, области, стране или максимум по паре-тройке соседних стран, так что в том же Алжире или Пакистане абсолютно нет надобности.


    Итак, допустим, что нам необходимо, чтобы в выпадающем списке с выбором стран остались следующие страны: Украина и Россия, как нам это сделать? И еще один момент: мы хотим, чтобы по умолчанию отображалась определенная страна или регион/город, как это реализовать? Начнем со второго.

    Для этого отправляемся в файлы темы (шаблона) своего магазина и открываем следующие файлы:

    catalog/view/theme/default/template/checkout/guest.tpl — для оформления заказа без регистрации
    catalog/view/theme/default/template/checkout/register.tpl — для оформления заказа с прохождением регистрации
    и ищем одну и ту же строку в обоих файлах:

    <?php if ($country['country_id'] == $country_id) { ?>
    Поскольку каждая страна имеет свой числовой идентификатор(id), то нам необходимо указать именно тот id, который присвоен нужной нам стране. ID вышеупомянутых стран и пары соседних:

    Украина — 220, Россия — 176, Беларусь — 20, Молдова — 140. Более подробно об идентификаторах различных стран смотрим в файле system\cache\cache.country.status… (для начала потестируйте процесс регистрации и выберите те страны, которые Вам необходимо использовать для регистрации).

    И меняем найденный нами код на следующий:

    <?php if ($country['country_id'] == 220) { ?>
    и теперь по умолчанию будет первой появляться Украина, так как подставлен именно ее id.
    Если же нам необходимо, чтобы и в поле Регион/Область отображался определенный город, то в этих же файлах находим код:
    if (json['zone']['zone_id'] == '<?php echo $zone_id; ?>') {
    html += ' selected="selected"';
    }

    и меняем его на код с идентификатором города Киева:

    if (json['zone']['zone_id'] == 3491) {
    html += ' selected="selected"';
    }
    Опять таки. если нам необходимо узнать id другого города, то снова заглядываем в кэш: system\cache\cache.zone…
    И теперь новый покупатель во время оформления заказа сразу видит вот такую картину:

    [​IMG]

    Что же, что касается вывода определенных стран или городов/регионов по умолчанию, то теперь мы знаем как это делать. Ну, а как же все же убрать список стран и оставить только те, которые нам нужны?
    Существует два способа, которыми можно это осуществить:
    1. Через админ-панель магазина.
    Идем по вкладкам Система/Локализация/Регионы и удаляем ненужные регионы.


    [​IMG]

    Затем идем Система/Локализация/Страны и удаляем ненужные страны, не забывая оставить те, которые нужны.


    [​IMG]

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

    2. Удаляем ненужные страны и регионы через phpmyadmin.
    Если предыдущий способ позволял удалить ненужные страны из административной части самого магазина, то данный способ осуществим лишь из, так сказать, технической части магазина — phpmyadmin. И нет никакой разницы в том где находится ваш магазин, и на сервере в интернете (хостинг) и на локальном хостинге процесс один и тот же.
    Итак, попав в phpmyadmin, слева выбираем ту базу данных, которая содержит таблицы магазина.


    [​IMG]

    Для начала разберемся с странами. Для этого находим таблицу «Country» и видим список стран, который растягивается на 8 страниц. Для удобства можно увеличить количество выводимых стран на одной странице, изменив 30 на любое другое гораздо большее число.


    [​IMG]

    Вот мы получили весь список стран на одной странице и можем удалить все страны просто в самом низу, под перечнем всех стран, нажать на «Отметить все» и затем удалить. НО при этом не забываем, после того как отметим все страны, вернуться к списку и снять отметки с нужных нам стран. Для того, чтобы знать, где искать Украину, Россию или любую другую страну, предварительно узнаем ее id. В таблице идентификаторы стран расположены в порядке возрастания.


    [​IMG]

    Теперь перейдем к редактированию регионов. В списке таблиц выбираем таблицу «Zone» (внизу списка) и получаем перечень регионов. Опять таки можно увеличить количество выводимых регионов на одной странице, изменив 30 на любое другое число (к примеру, указав 500, получим 8 страниц, а указав 1000, — всего 4 страницы и т.д. Но чем больше цифра, тем дольше может обрабатываться запрос.)


    [​IMG]

    В самом конце (под всеми 500 или 1000 выводимыми регионами), как и в странах, находим «Отметить все», нажимаем и тем самым отмечаем все регионы, и жмем «Удалить».


    [​IMG]

    Вот таким способом мы удалили 500 первых ненужных регионов. Остальные удаляем аналогичным образом, главное не забываем о том, что необходимо оставить нужные для нас регионы. К примеру, нам необходимо оставить в наших регионах Киев ( 3491 ), то мы обязательно снять с него отметку. Найти нужный регион или город не составит труда, так как идентификаторы в таблице идут в порядке возрастания. Как мы ранее узнали, идентификаторы регионов и стран находим в кэше.
    И в итоге получим желаемый результат: список стран и регионов, в оформлении заказа, будет ограничиваться тем списком, который мы установим сами.
     
    nohc нравится это.
  16. ADvarri

    ADvarri

    Регистрация:
    31 авг 2013
    Сообщения:
    30
    Симпатии:
    24
    как защитить интернет-магазин от взлома

    Сегодня мы рассмотрим немаловажный вопрос: как защитить свой магазин от взлома и проникновения?
    Хотя OpenCart считается довольно защищенной системой управления, но и на нее находятся «умельцы», которые могут однажды принести горькое разочарование и убытки владельцу интернет-магазина. Так зачем это допускать? Попробуем еще немного защитить свой магазин от взлома. Следующие методы, которые мы можем предпринять для безопасности магазина, довольно просты и не требует никаких особых знаний, так что с ними справится даже начинающий осваивать OpenCart.


    1. Одно из глобальных изменений, осуществляемых для защиты магазина на OpenCart, является скрытие админ-панели от посторонних глаз. Что это значит и как это сделать?
    Для того, чтоб зайти в административную панель своего магазина мы просто набираем в адресной строке название своего сайта и admin: http://имя-сайта.com/admin. В открывшуюся форму вводим персональные данные: логин и пароль и незамедлительно попадаем в админку. Так вот первым шагом по защите магазина можно считать изменения адреса для входа в админ-панель. Чтоб для входа в админку мы могли набирать в адресной строке не стандартное и широко известное http://имя-сайта.com/admin, а например http://имя-сайта.com/manager-shop, http://имя-сайта.com/super-Admin, http://имя-сайта.com/adminka15-6, то есть что-либо иное помимо пресловутого admin.
    Сделать это довольно просто:
    • Папке admin даем новое, никому не известное название;
    • Открываем файл config.php в корневой папке магазина и в путях вместо admin указываем название нашей новой папки (изменения будут внесены всего в один путь);
    • Аналогично поступаем с файлом config.php, который находится в вышеупомянутой папке admin — меняем в путях admin на наше новое название (5 ссылок нуждаются в изменении).
    2. Второй шаг защиты заключается в логине: никогда не оставляем для входа в админ-панель такой логин, как admin. Нет более доступного и общеизвестного логина чем admin, так что если при установке OpenCart, мы не изменили логин на более сложный, то это не поздно сделать сейчас. Самый простой способ сменить логин — это зайти в Aдмин-панель/Система/Пользователи и задать новый логин.
    [​IMG]
    3. Также поступаем и с паролем — создаем или меняем на сложный и замысловатый, используя не менее 10 знаков, желательно разного регистра и с использованием спец. символов типа $, %, &, ^ и т.д.
    Смену пароля осуществляем все из той же админки /Система/Пользователи.
    4. E-mail+пароль и e-mail+админ-панель. Большинство магазинов в контактах помимо формы обратной связи также указывают один или даже несколько почтовых ящиков для связи. И необходимо помнить о том, что пароль для входа в админ-панель и пароль к почте должны быть разными, никогда не используйте один и тот же пароль для столь важных разделов вашего магазина. Ведь именно почтовый ящик является хранилищем информации о поступивших/оплаченных заказах с персональными данными ваших покупателей.
    5. Обезопасим важные файлы: config.php и admin/config.php. Эти файлы содержат в себе весьма важную информацию: доступ к БД. По этой причине следует установить правильные права доступа к этим файлам: 0444 (только чтение).
    Права на папки устанавливаем либо через хостинг (cPanel)/ либо через ftp-клиент, который обычно используем для загрузки файлов на сервер.
    [​IMG]
    6. Отключаем отображение php ошибок. Благодаря этой возможности, которая по умолчанию в OpenCart включена, мы даем взломщикам дополнительную лазейку хакнуть наш магазин. Да и к тому же отображение ошибок не придает презентабельности нашему сайту. Эту функцию легко можно отключить из админ-панели/Система/Настройки/Сервер. Внизу напротив пункта «Показывать ошибки» отмечаем галочкой «нет». А для просмотра ошибок мы всегда можем воспользоваться журналом ошибок, имя которого есть чуть ниже. Журнал находится в корневая папка сайта/system/logs.
    [​IMG]
    Вот на таком количестве способов защиты магазина на OpenCart мы пока что и остановимся. Может их не так уж и много, они незамысловаты, но, к счастью, действенны. Существуют еще варианты ограничения доступа к админке магазина и доступа по ftp через указания ip адреса, но эти изменения стоит вносить лишь в том случае если ваш ip адрес постоянный, иначе могут возникнуть проблемы с доступом к сайту.
     
    kerifan, Zmei, Graund и ещё 1-му нравится это.
  17. ADvarri

    ADvarri

    Регистрация:
    31 авг 2013
    Сообщения:
    30
    Симпатии:
    24
    изменяем кнопки в меню навигации

    Переделываем кнопки в меню навигации – Главная, войти, кабинет, корзина, оформить.

    [​IMG]
    До: После:
    [​IMG][​IMG]

    Создадим в админ панели несколько страниц – Доставка, оплата, помощь. (каталог – статьи, тексты придумайте сами). После написания страниц идём на главную страницу магазина и в модуле информация видим наши статьи:

    [​IMG]

    Открываем файл header.tpl (..\catalog\view\theme\default\template\common) и ищем этот код:

    <div class="div4"><a href="<?php echo str_replace('&', '&amp;', $home); ?>" id="tab_home"><?php echo $text_home; ?></a>
    <?php if (!$logged) { ?>
    <a href="<?php echo str_replace('&', '&amp;', $login); ?>" id="tab_login"><?php echo $text_login; ?></a>
    <?php } else { ?>
    <a href="<?php echo str_replace('&', '&amp;', $logout); ?>" id="tab_logout"><?php echo $text_logout; ?></a>
    <?php } ?>
    <a href="<?php echo str_replace('&', '&amp;', $account); ?>" id="tab_account"><?php echo $text_account; ?></a><a href="<?php echo str_replace('&', '&amp;', $cart); ?>" id="tab_cart"><?php echo $text_cart; ?></a><a href="<?php echo str_replace('&', '&amp;', $checkout); ?>" id="tab_checkout"><?php echo $text_checkout; ?></a></div>

    изменим на это:

    <div class="div4">
    <a href="<?php echo str_replace('&', '&amp;', $home); ?>" id="tab_home"><?php echo $text_home; ?></a>
    <a href="*" id="tab_home">**</a>
    <a href="*" id="tab_home">**</a>
    <a href="*" id="tab_home">**</a>
    <a href="*" id="tab_home">**</a>
    </div>

    Вместо ** – впишем нужные вам названия:

    <div class="div4">
    <a href="<?php echo str_replace('&', '&amp;', $home); ?>" id="tab_home"><?php echo $text_home; ?></a>
    <a href="*" id="tab_home">Доставка</a>
    <a href="*" id="tab_home">Оплата</a>
    <a href="*" id="tab_home">Помощь</a>
    <a href="*" id="tab_home">Контакты</a>
    </div>

    (Если названия на сайте будут отображаться квадратами или непонятными символами сохраните названия как utf-8 или utf-8 без Bom, я делаю это в notepad ++ – кодировки – кодировать в utf-8).
    Теперь берём ссылки наших статей – Откроем главную страницу нашего магазина (витрину) и в модуле Информация выбираем одну из наших статей:

    [​IMG]

    Жмём адресную строку браузера и копируем появившуюся ссылку:

    [​IMG]

    http://localhost/default/index.php?route=information/information&information_id=6– обрезаем до такого вида:index.php?route=information/information&information_id=6и вставляем вместо *:

    <div class="div4">
    <a href="<?php echo str_replace('&', '&amp;', $home); ?>" id="tab_home"><?php echo $text_home; ?></a>
    <a href="index.php?route=information/information&information_id=6" id="tab_home">Доставка</a>
    <a href="*" id="tab_home">Оплата</a>
    <a href="*" id="tab_home">Помощь</a>
    <a href="*" id="tab_home">Контакты</a>
    </div>

    Делаем точно так-же ещё для 2х ссылок:

    <div class="div4">
    <a href="<?php echo str_replace('&', '&amp;', $home); ?>" id="tab_home"><?php echo $text_home; ?></a>
    <a href="index.php?route=information/information&information_id=6" id="tab_home">Доставка</a>
    <a href="index.php?route=information/information&information_id=9" id="tab_home">Оплата</a>
    <a href="index.php?route=information/information&information_id=8" id="tab_home">Помощь</a>
    <a href="*" id="tab_home">Контакты</a>
    </div>

    И вставляем в последнюю ссылку переход на контакты:

    <div class="div4">
    <a href="<?php echo str_replace('&', '&amp;', $home); ?>" id="tab_home"><?php echo $text_home; ?></a>
    <a href="index.php?route=information/information&information_id=6" id="tab_home">Доставка</a>
    <a href="index.php?route=information/information&information_id=9" id="tab_home">Оплата</a>
    <a href="index.php?route=information/information&information_id=8" id="tab_home">Помощь</a>
    <a href="<?php echo str_replace('&', '&amp;', $contact); ?>" id="tab_home">Контакты</a>
    </div>

    Теперь идём в админку – каталог – статьи и во всех трёх статьях внизу (порядок сортировки ставим –1(минус один)) и наши страницы не будут отображаться в модуле Информация:

    [​IMG]
     
  18. ADvarri

    ADvarri

    Регистрация:
    31 авг 2013
    Сообщения:
    30
    Симпатии:
    24
    Сравнение языковых файлов Opencart

    При поиске различий в языковых файлах Opencart огромную неприятность доставляет то, что утилиты наподобие DIFF оказываются почти бесполезны. Они сравнивают файлы построчно, а поскольку приходится сравнивать английский файл с русским, то 99% строк разные из-за перевода. И найти в этих условиях новые и удаленные переменные в файлах локализации оказывается очень сложно и муторно. Графические аналоги подобных программ тоже не очень-то помогают, даже если способны подсвечивать разницу внутри одной строки: в глазах рябит, строки длинные, и после проверки пары каталогов эта рутинная и фактически ручная визуальная проверка просто выматывает.

    Но у линукс-пользователей есть способ существенно облегчить себе задачу поиска различий, сравнивая лишь часть строк из двух файлов!

    В файлах локализации неизменной для русской и английской версии остается левая часть строк до знака '='. Их и будем сравнивать. На помощь утилитеdiffприходит утилитаcut:

    #!/bin/bash
    diff -b <(cut -d'=' -f1 -s $1) <(cut -d'=' -f1 -s $2)

    Указав этой утилитке имена двух файлов, получим краткий список отсутствующих и появившихся языковых переменных. Это то, чего мне долго не хватало!

    Спасительная командаcut -d'=' -f1 -s setting.phpвыводит только первую часть строки (-f1), разделенной знаком '='. Аdiffсравнивает две этих "первых колонки" из обеих файлов, оставляя нам только разницу.
     
    buldozer и karavan нравится это.
  19. ADvarri

    ADvarri

    Регистрация:
    31 авг 2013
    Сообщения:
    30
    Симпатии:
    24
    Улучшение сортировки на витрине Opencart

    Поступил вопрос:
    можно ли сделать по умолчанию сортировку товаров на витрине, одновременно по двум параметрам: по цене и названию. Тоесть сортируются по цене, а те у кого цены одинаковые уже по имени.
    Делая по цене было замечено что иногда Опенкарт меняет местами товары с одинаковыми параметрами сортировки, например если менять кол-во выводимого товара на одну страницу, ощущение что их тусует в произвольном порядке.

    Действительно, лучше это предусмотреть и заодно изменить стандартный способ сортировки по полю "sort_order" (которое мало кто использует в товарах) на сортировку по названию товара (а название у товара есть всегда), чтобы избежать популярной, но иногда незаметной ситуации, когда один и тот же товар может выводиться и на первой, и на второй странице (вообще-то на любых, если использовать стандартный способ сортировки, применяемый в Опенкарт).
    Diff приведён ниже, здесь же приведено описание обычными словами, т.к изменение всего одно и небольшое:

    Как внести изменения вручную

    1. Открываем файлcatalog/model/catalog/product.php

    2. Ищем функциюfunction getProducts

    3. Пролистываем почти до конца в поисках кода запроса сORDER BYи следующего за нимLIMIT. Соответствующий участок кода выглядит так:

    $sort_data = array(
    'pd.name',
    'p.model',
    'p.quantity',
    'p.price',
    'rating',
    'p.sort_order',
    'p.date_added'
    );
    if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
    if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
    $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
    } else {
    $sql .= " ORDER BY " . $data['sort'];
    }
    } else {
    $sql .= " ORDER BY p.sort_order";
    }
    if (isset($data['order']) && ($data['order'] == 'DESC')) {
    $sql .= " DESC";
    } else {
    $sql .= " ASC";
    }
    if (isset($data['start']) || isset($data['limit'])) {
    if ($data['start'] < 0) {
    $data['start'] = 0;
    }
    if ($data['limit'] < 1) {
    $data['limit'] = 20;
    }
    $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
    }

    4. Мы сделаем две вещи: для начала изменим способ сортировки товаров на витрине по умолчанию на сортировку по названию:

    } else {
    $sql .= " ORDER BY p.sort_order";
    }
    меняем на
    } else {
    $sql .= " ORDER BY pd.name";
    }

    5. И теперь добавляем вторичную сортировку по названию:

    if (isset($data['order']) && ($data['order'] == 'DESC')) {
    $sql .= " DESC";
    } else {
    $sql .= " ASC";
    }
    // БУДЕМ ВСТАВЛЯТЬ КОД СЮДА
    // БУДЕМ ВСТАВЛЯТЬ КОД СЮДА
    // БУДЕМ ВСТАВЛЯТЬ КОД СЮДА
    // БУДЕМ ВСТАВЛЯТЬ КОД СЮДА
    if (isset($data['start']) || isset($data['limit'])) {
    Всталяем в указанное место такой блок кода:
    // Additional sort order by product name
    if(isset($data['sort']) && $data['sort'] != 'pd.name') {
    $sql .= ", pd.name ASC";
    }
     
    travlarnor, buldozer и Ping нравится это.
  20. Vlad-i-Slav

    Vlad-i-Slav

    Регистрация:
    20 мар 2013
    Сообщения:
    286
    Симпатии:
    176
    Автоматическая минификация HTML
    Изменяем код system/library/response.php на этот (по умолчанию стоит максимальное сжатие)
     
    advunt, anskachkov и Ваган нравится это.
  21. x-guest

    x-guest Команда форума

    Регистрация:
    8 окт 2012
    Сообщения:
    276
    Симпатии:
    979
    Давно здесь на форуме спрашивали как прикрутить к OPENCART, всплывающее окно при закрытие страницы или же при входе на сайт (хотя здесь модулей которые запускают POPUP при входе - целая туча :wink: )
    И так начнем:
    1.) Качаем - http://wmasteru.ru/threads/Скрипты-с-ресурса-codecanyon.853/page-9#post-125766
    2.) Создаем папку и Копируем скрипт в отдельную папку в директории вашего сайта (рядом с папками Admin, Catalog ....)
    3.) Читаем инструкцию по Настройке Config.php - прилагается в архиве (ничего сложного-прописать / пользователя, имя базы данных (создаем за ранние новую) ну и конечно пароль.
    4.)Теперь нам надо подключить всю эту красоту к opencart-у / заходим в адиминку скрипта - жмем вкладку How To Use
    суть в двух словах (не стоит заморачиваться над всеми пунктами настройки -они вам не нужны! выполняем только пункт 4 и 5) то есть Подключаем скрипт, заходим к себе в папку с сайтом и ищем header.tpl :wink: что находится \catalog\view\theme\*\template\common\header.tpl прописываем (вернее копируем все из пункта 4 и 5) в тело сайта (после тега head)
    5.) Входим в админку скрипта для его настройки - (возможно потребует пароль активации версия 3.5) ограничения только на использования демо щаблонов POPUP но здесь есть заветная кнопка дублировать шаблон - жмем ее шаблон копируется без защиты, затем удаляем оригинал - все радуемся полноценной версией :tongue:
    6.) во вкладки FAQ Читаем инструкцию прописано как использовать модальные окна
    7.) Ставим лайки пользователю x-guest и радуемся скриптом:wavespin:.

     
    Oktaika, Юрий Юрьевич, rombol и 5 другим нравится это.