[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. d_m_n

    d_m_n

    Регистрация:
    14 янв 2013
    Сообщения:
    20
    Симпатии:
    11
    Загрузка больших изображений

    По умолчанию в OpenCart установлено ограничение на загрузку изображений с размером файла больше 300Кб и разрешением больше чем 1000 на 1000 пикселей, исправим это.
    Для снятия ограничения на размер файла изменим контроллер admin/controller/common/filemanager.php


    Находим строки:
    Код:
    if ($this->request->files['image']['size'] > 300000) {
    	$json['error'] = $this->language->get('error_file_size');
    }
    и изменяем в них значение 300000, а это размер в байтах, на то, который нам нужен «в байтах», например 3000000 - 3мб
    Для снятия ограничения на размер изображения 1000 на 1000 пикселей (в последних версия Opencart не актуально, там уже это ограничение отсутствует)

    редактируем строки:
    Код:
    $imageinfo = getimagesize($this->request->files['image']['tmp_name']);
    		if($imageinfo[0]>1000 || $imageinfo[1]>1000){
     
    Надя, alenru, cwdima и 2 другим нравится это.
  3. Alexxcha

    Alexxcha

    Регистрация:
    21 ноя 2012
    Сообщения:
    130
    Симпатии:
    36
    Настройка CloudZoom.
    Часто многие отказываются от использования этого модуля, так как он меняет два файла - продукт.тпл и продукт.пхп - многие кто редко сталкивается с программированием, боятся этих замен, ниже я приведу способ установки этого решения без замены самих файлов:

    Качаете модуль - CloudZoom

    Идем по порядку!
    Идем по пути: catalog/view/theme/ВАША ТЕМА/template/product
    Ищем файл: product.tpl

    В нем ищем блок который начинается с <div class="left"><?php if ($thumb) { ?>
    И меняем все что ниже на след код, меняем вплоть до <div class="right">

    <div class="image"><a href="<?php echo $popup; ?>" title="<?php echo $heading_title; ?>" class = 'cloud-zoom' id='zoom1' rel="tint: '#fff',tintOpacity:0.6, showTitle: false, adjustX: 10, adjustY:-4"><img src="<?php echo $thumb; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" id="image" /></a></div>
    <?php } ?>
    <?php if ($images) { ?>
    <div class="image-additional">
    <?php foreach ($images as $image) { ?>
    <a href="<?php echo $image['popup']; ?>" title="<?php echo $heading_title; ?>" class = 'cloud-zoom-gallery' rel="useZoom: 'zoom1', smallImage: '<?php echo $image['small']; ?>' "><img src="<?php echo $image['thumb']; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a>
    <?php } ?>
    </div>
    <?php } ?>
    </div>
    <?php } ?>
    <div class="right">

    Далее!
    Идем по пути catalog/controller/product
    Ищем файл product.php

    В нем ищем блок который начинается с
    if ($product_info['image']) {
    $this->data['thumb'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height'));
    } else {
    $this->data['thumb'] = '';
    }
    И после него вставляем код указанный ниже:
    ///////////////////////////////////////////
    if ($product_info['image']) {
    $this->data['small'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'));
    } else {
    $this->data['small'] = '';
    }
    ///////////////////////////////////////////
    Там же ищем:
    $this->data['images'] = array();
    $results = $this->model_catalog_product->getProductImages($this->request->get['product_id']);
    И все до - if (($this->config->get('config_customer_price') ЗАМЕНЯЕМ на:

    foreach ($results as $result) {
    $this->data['images'][] = array(
    'popup' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height')),
    'thumb' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height')),
    'small' => $this->model_tool_image->resize($result['image'], $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height'))
    );
    }

    Затем!
    Идем по пути catalog/view/theme/ВАША ТЕМА/template/common
    Ищем файл header.tpl
    В нем ищем: </head>
    И ПЕРЕД НИМ вставляем код указанный ниже:
    <link rel="stylesheet" type="text/css" href="catalog/view/theme/ВАША ТЕМА/javascript/cloudzoom/cloud-zoom.css" />
    <script type="text/javascript" src="catalog/view/theme/ВАША ТЕМА/javascript/cloudzoom/cloud-zoom.1.0.2.min.js"></script>

    Из папки модуля catalog/view/
    папку javascript - копируем в папку catalog/view/theme/ВАША ТЕМА/javascript своего магазина.


    Очищаем кэш браузера, и перегружаем страницу - вуаля!
     
    gnommong и vwfn нравится это.
  4. alex_storm

    alex_storm webdev

    Регистрация:
    11 дек 2012
    Сообщения:
    1.151
    Симпатии:
    667
    Доработка количества на странице категорий:
    Пример:
    [​IMG]

    идем в файл: catalog/view/javascript/common.js
    находим функцию:
    меняем там на этот код:



    Идем в файл: catalog/view/theme/ваша тема/template/product/category.tpl
    Ищем там: <div class="cart"></div>
    Заменим его на:



    В этом же файле добавляем в самый низ скрипт:

     
    profi555, versa4e, Rusik и 7 другим нравится это.
  5. gnommong

    gnommong

    Регистрация:
    29 июн 2013
    Сообщения:
    175
    Симпатии:
    194
    Установка пароля на папку admin

    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.

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

    з.ы. пост поправил. просьба админа удалить предыдущий пост и этот постскриптум
     
    weghjn, perepela21, mr.Elias и 6 другим нравится это.
  6. ГорМастер

    ГорМастер

    Регистрация:
    1 апр 2013
    Сообщения:
    115
    Симпатии:
    22
    Перенос на другой хостинг - смотрим правильный путь для config.php

    Смена хостинга влечёт изменение конфигурационных файлов. Правильный путь к рабочей директории можно спросить у хостера (долго и иногда весьма сложно), или посмотреть самому.
    Цитата (автор: nix) :
     
    видеотехника и winner7 нравится это.
  7. webmaster

    webmaster

    Регистрация:
    26 окт 2012
    Сообщения:
    234
    Симпатии:
    874
    Контакты в шапке сайта

    создание формы в админ-панели ( номер, иконка и имя);
    выведение данные, из выше упомянутых форм, в нужное нам место (шапку OpenCart).

    Будем править следующие файлы (делаем их копии):

    \admin\controller\setting\setting.php
    \admin\view\template\setting\setting.tpl
    \admin\language\russian\setting\setting.php
    \admin\language\russian\russian.php
    \catalog\controller\common\header.php
    \catalog\view\theme\default\template\common\header.tpl

    OpenCart 1.5.4.1
     
    irina.ray, Margo, tunasik и 6 другим нравится это.
  8. stifutkin

    stifutkin

    Регистрация:
    22 дек 2012
    Сообщения:
    172
    Симпатии:
    43
    Добавление кнопки "Удалить" в редактор карточки товара (автор nix)
    Дополнение позволяет удалять товар прямо из редактора карточки данного товара.
    xml

    code
     
    passsenger нравится это.
  9. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    756
    Симпатии:
    269
    Подключаем дополнительные функции для генерации изображений в опенкарт
    Сразу поясню что идея взята отсюда, я лишь подробно описываю как осуществить ее на страницах категорий и подправил файлы для использования в версии 1.5.6. Сами файлы можно скачать из приложения к посту, выбирайте необходимые в зависимости от версии вашего двига.
    О файлах: файлы осуществляют замену в /catalog/model/tool/image.php и в /system/library/image.php - это означает что во-первых надо сделать бекап указанных файлов. Если хотите, можете внести изменения вручную, в файлах изменения помечены комментариями.
    О функциях: Происходит подключение 2-ух дополнительных функций обработки изображений для понятности опишу их и стандартную функцию resize:
    1. Resize (стандартная функция движка) - добавляет белые поля картинка при не соответствии размеров указанным в настройках (в админке). Упрощенно это выглядит так: в настройках задан размер 100х100, исходное изображение имеет размер 100х130. При обработке изображение будет сжато до 100 по высоте а образовавшаяся пустота справа и слева будет заполнена белым фоном (или фоном указанным в Ваших настройках) Наглядно работа этой функции представлена на изображении:[​IMG]
    2. Cropsize - функция осуществляет кадрирование изображения в соответствии с размерами заданными в настройках (админке). На пальцах это работает так: в админке задан размер изображения 100х100 исходное фото 100х130, в этом случае при обработке изображение будет обрезано по 15пикс. сверху и снизу. Наглядно работа представлена на изображении:[​IMG]
    3. Onesize - функция масштабирует изображение по одному из полей высота или ширина (о подключении масштабирования речь пойдет ниже). Суть состоит в том, что при масштабировании, например, по высоте в случае указания в админке в качестве высоты изображения значения 100 и при исходных размерах изображения 100х130 произойдет сжатие изображения по высоте до размера 100пикс и пропорционально по ширине, при этом не будет добавления белых полей справа и слева пример работы."
    [​IMG]

    Как подключать?
    В примере я покажу как подключить функции на страницах категорий на примере 1.5.6, в принципе аналогичным образом происходит подключение в других версиях и для других макетов (страница товара, модули).
    Подключаем функцию Cropsize в catalog/controller/product/category.php делаем следующую замену:
    Подключаем функцию Onesize с выбором в качестве основного размера высоты изображения в catalog/controller/product/category.php делаем следующую замену:
    Подключаем функцию Onesize с выбором в качестве основного размера ширины изображения в catalog/controller/product/category.php делаем следующую замену:

    Файлы 1.5.4.1
     
    Последнее редактирование: 7 авг 2016
    klaus, PrincIP, llogovo и 5 другим нравится это.
  10. VIP24

    VIP24 Верховный Главнокомандующий

    Регистрация:
    8 июл 2013
    Сообщения:
    239
    Симпатии:
    1.206
    Подгрузка изображений по необходимости

    Это решение подгружает изображения товаров для видимой части окна браузера, т.е. после открытия страницы и по мере скроллинга.
    В файл ./catalog/view/theme/default/template/common/header.tpl в тело тега<head> добавьте следующее:

    Код:
    <style type="text/css">.product-list img[rel] { width: <?php echo $this->config->get('config_image_category_width'); ?>px; height: <?php echo $this->config->get('config_image_category_height'); ?>px; display: block; background: url('catalog/view/theme/default/image/loading.gif') center center no-repeat; }</style>
    Данный код задаёт стиль контейнера изображений с атрибутом relationship до того, как в него будет загружено реальное изображение при помощи кода JavaScript, текст которого приведён ниже. Этот код необходимо поместить в шаблон./catalog/view/theme/default/template/product/category.tpl

    Код:
    <script type="text/javascript"><!--
    
    function isScrolledIntoView(element) {
      var docViewTop = $(window).scrollTop();
      var docViewBottom = docViewTop + $(window).height();
      var elementTop = $(element).offset().top;
      var elementBottom = elementTop + $(element).height();
    return ((elementBottom <= docViewBottom) && (elementTop >= docViewTop));
    }
    $(window).ready(function() {
    $(window).resize(function() {
      ImageIntoView();
    });
    $(window).scroll(function() {
      ImageIntoView();
    });
      ImageIntoView();
    });
    function ImageIntoView() {
    $('img[rel]:not([src])').each(function() {
      if (isScrolledIntoView(this)) {
      $(this).attr('src', $(this).attr('rel')).load(function() {;
        $(this).removeAttr('rel');
      });
      }
    });
    }
    //--></script> 
    В этом же шаблоне находим слой <div class="product-list"> и в его теле для тега<img> заменяем атрибут src на rel и убираем атрибут alt.

    Готово, список товаров с картинками для категории теперь с элементами интерактива. Аналогичные действия можно выполнить для результатов поиска, списка товаров, участвующих в акциях и списка товаров производителей.
     
    anskachkov, Ваган, sergok и 9 другим нравится это.
  11. nick885

    nick885

    Регистрация:
    14 мар 2013
    Сообщения:
    101
    Симпатии:
    40
    Сортировка по количеству:
    В catalog/controller/product/category.php
    поставить так:

    if (isset($this->request->get['sort'])) {
    $sort = $this->request->get['sort'];
    } else {
    $sort = 'p.quantity';
    }

    if (isset($this->request->get['order'])) {
    $order = $this->request->get['order'];
    } else {
    $order = 'DESC';
    }
     
  12. gnommong

    gnommong

    Регистрация:
    29 июн 2013
    Сообщения:
    175
    Симпатии:
    194
    Удобный переезд с локалхост на хостинг.
    1 Заводим БД новую на хостинге, заливаем все файлы на фтп
    2 Открываем этот файл
    3 Прописываем в файле данные на нашу БД
    4 Загружаем файл в корень
    5 Запускаем www.YOURSTORENAME.COM/reinstall.php
    6 PROFIT! Все конфиги переписаны автоматом.
     
    дучгы663, zerofirefox, thug4sprite и 5 другим нравится это.
  13. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    756
    Симпатии:
    269
    Создаем схему для сквозного вывода модулей на сайте
    Некоторым бывает нужно вывести какой-либо модуль или несколько модулей на всех страницах сайта. Как это сделать? можно в настройках модуля перечислять все возможные схемы, но некоторым это покажется долгим и нудным занятием. А если вдруг придется менять положение модуля... Тех кто ценит время и силы такое положение не устраивает. Некоторые пытаются указать схему default, предполагая что она предназначена для этих целей (на самом деле не для этих). Итак разберем как создать схему для сквозного вывода модуля (модулей).
    1. Создадим схему, назовем ее так как нам удобно, я назвал свою through, Вы можете выбрать любое другое понятное Вам название, никакие пути схеме задавать не надо - просто название. После создания схемы посмотрите ее id (id можно видеть в url при редактировании схемы). Запомним этот id, допустим это 20.
    2. За вывод модулей отвечают 4 контроллера catalog\controller\common\column_left.php, catalog\controller\common\column_right.php, catalog\controller\common\content_bottom.php, catalog\controller\common\content_top.php в каждом из них находим
      Код:
      if ($module['layout_id'] == $layout_id &&
      и заменяем на
      Код:
      if (($module['layout_id'] == $layout_id || $module['layout_id'] == 20) &&
      Где 20 - наш id из пункта 1, у Вас он скорее всего будет другим!!! Сохраняем изменения, загружаем на хостинг.
    3. Заходим в настройки модуля, который хотели вывести сквозняком, указываем его положение (шапка, колонка справа, колонка слева, футер), сортировку, а в качестве схемы указываем нашу схему. Сохраняем изменения.
    4. Если все сделали правильно, то радуемся и ставим плюсики.
     
    Последнее редактирование: 6 окт 2013
    Podmasteri, kolich85, alex5151 и 2 другим нравится это.
  14. VIP24

    VIP24 Верховный Главнокомандующий

    Регистрация:
    8 июл 2013
    Сообщения:
    239
    Симпатии:
    1.206
    Очень дефицитная информация!!!
    Переменные CMS OpenCart
    В данном посте я поделюсь знаниями полученными непосильным трудом при верстки многочисленных шаблонов под CMS OpenCart. Я расскажу, о переменных CMS OpenCart, о переменных которые используют шаблоны (файлы .tpl). Документация для данной системы скудна, в ней вы не найдете ничего подобного, форумы и сообщества почему-то тоже не располагают данной информацией. А напрасно, ведь при каждой разработке своего шаблона приходится погружаться в код default и разбираться какая переменная за что отвечает. Пользуйтесь данным материалом как справочником при верстки своих шаблонов.

    [​IMG]
     
    Denlaba, tvzon, AnOcToJI и 23 другим нравится это.
  15. gnommong

    gnommong

    Регистрация:
    29 июн 2013
    Сообщения:
    175
    Симпатии:
    194
    Подробная статья про vqmod. Что, как и почему. Какие тэги, что означают.
     
    Последнее редактирование: 19 окт 2013
    AnOcToJI, MAX3000, termotorg.shop и 5 другим нравится это.
  16. x-guest

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

    Регистрация:
    8 окт 2012
    Сообщения:
    276
    Симпатии:
    979
    OpenCart Banner Module: расширение возможностей стандартного модуля
    Внимание! Перед каждой модификацией сайта или базы данных не забывайте делать резервные копиии.
    --- Добавлено, 19 окт 2013 ---

    Оптимизация Opencart: уменьшаем количество обращений к базе в режиме SEO URL
    Внимание! Перед каждой модификацией сайта или базы данных не забывайте делать резервные копиии.
    Последнее решение не избавляет от дублей, а всего лишь кеширует url.alias. Васо ©
     
    Lasted edited by : 23 окт 2013
    anskachkov, stels32, Zalex и 8 другим нравится это.
  17. Vlad-i-Slav

    Vlad-i-Slav

    Регистрация:
    20 мар 2013
    Сообщения:
    286
    Симпатии:
    176
    Vehicle Year Make Model Engine Filter - список автомобилей
     
    mak33, cereberlum, Ping и 2 другим нравится это.
  18. Vlad-i-Slav

    Vlad-i-Slav

    Регистрация:
    20 мар 2013
    Сообщения:
    286
    Симпатии:
    176
    Настройка SSL

    Сначала всё просто:
    - получаем или покупаем SSL-сертификат, устанавливаем его
    - в настройках магазина включаем поддержку SSL

    И тут видим дубли http://site.com https://site.com http://www.site.com https://www.site.com
    Кроме того, при использовании SSL на всем сайте ощутимо увеличивается нагрузка на сервер и замедляется отдача страниц за счет шифрования.
    Целесообразно шифровать лишь админку и формы ввода персональных данных.

    Решение:

    Необходимые страницы, конечно, указывайте свои, в зависимости от SEO-настроек.
    Что касается www или его отсутствия, я выбрал www потому что это - хорошая практика для корпоративных сайтов (замечайте сами, например apple.com)
     
    buldozer, gnommong и denya нравится это.
  19. Pelmen

    Pelmen Guest

    Проблема возникает, когда в категориях несколько страниц товаров. Начинаем мы с со сраницы /tovar/ а при возврате на эту страницу попадаем на /tovar/?page=1

    При пагинации ссылки на первую страницу выглядят не правильно - присутствует переменная page=1 что создает дубляж для первой страницы категории.
    Правим так в файле system\library\pagination.php
    вместо
    Код:
      if ($page > 1) {
      $output .= ' <a href="' . str_replace('{page}', 1, $this->url) . '">' . $this->text_first . '</a> <a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a> ';
        }
    пишем
    Код:
    if ($page > 1) {
        $tmp_url = str_replace('&amp;', '&', $this->url);
              $output .= ' <a href="' . str_replace('&', '&amp;', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_first . '</a>';
              if ($page == 2){
                $output .= '<a href="' . str_replace('&', '&amp;', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a> ';
              }else{
        $output .= '<a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a> ';
                }
        }
    и вместо
    Код:
     for ($i = $start; $i <= $end; $i++) {
        if ($page == $i) {
        $output .= ' <b>' . $i . '</b> ';
        } else {
        $output .= ' <a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a> ';
        }
      }
    пишем
    Код:
      for ($i = $start; $i <= $end; $i++) {
        if ($page == $i) {
        $output .= ' <b>' . $i . '</b> ';
        } elseif($i == 1) {
        $output .= ' <a href="' . str_replace('&', '&amp;', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $i . '</a> ';
        } else {
            $output .= ' <a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a> ';
        }
      }
    взято отсюда: http://opencartforum.ru/topic/10004-решено-сео-неоптимизированная-пагинация/?hl=пагинация
     
    dasinok, anskachkov, timofeas и 2 другим нравится это.
  20. x-guest

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

    Регистрация:
    8 окт 2012
    Сообщения:
    276
    Симпатии:
    979
    .htaccess запретить доступ или пароль на ресурс (пароль на сайт)
     
    buldozer, jaroslav1984, Zulus и 5 другим нравится это.
  21. alexsofdev

    alexsofdev

    Регистрация:
    13 янв 2013
    Сообщения:
    239
    Симпатии:
    46
    А онлайн тулзы уже отменили? Например эту - http://www.htaccesstools.com/htpasswd-generator/
     
    x-guest нравится это.