Пользователь
0,0
рейтинг
30 марта 2010 в 07:02

Разработка → Практический опыт разработки интернет-магазина на OpenCart

В ноябре 2009 года я познакомился с www.opencart.com и остался очень доволен этой CMS построенной с соблюдением основных принципов MVC. Это просто замечательная система код которой можно легко адаптировать под собственные нужды. Файлы системы разделены по папкам controller, model, view, language.
image
Гениально и просто. Настолько просто, что я за считанные часы понял как работает система и уже смог адаптировать несколько файлов контроллеров под свои нужды. Как CMS эту систему лучше не рассматривать в принципе! Все очень скудно и печально. Но площадка для коммерческой деятельности очень приличная. Главный лозунг сайта интернет-магазин с минимальными усилиями при разработке.

Важным для меня преимуществом является высокая скорость генерации страницы. Простой код с разделением на модель, вью, контроллер. Шаблоны дизайна лежат в папках с понятной структурой. Простая система по сравнению с magento commerce в которой что-то поменять ну очень не просто.

А теперь немного подробностей, которые могут быть интересны тем, кто интересуется Опенкартом. Публикую инфу, которая на мой взгляд может оказаться полезной и что самое важное основанную не на теоретическом опыте, а на примере использования в конкретном проекте.


Достаточно легко вносить изменения в код

Вот например, видите блок с рыночной ценой и экономией при покупке на этой странице: www.toolsonline.ru/toolsets/allinone/nab.14.12.116 он выводится только для товаров бренда станкоимпорт. Чтобы сделать этот блок потребовалось добавить некоторые переменные в файл контроллера отвечающего за формирования карточки товара. Не скажу, что это ну очень юзабильно и мне да мне потребовалось изменять PHP файлы по FTP. Но логика настолько прозрачная, что я уверен в том, что в будущем не запутаюсь в том, что уже сделал или потом сделаю. Блок выводится только для одного конкретного производителя. Логика находится в отдельном файле контроллера. Представление блока в файле шаблона дизайна, где PHP и HTML в перемешку. Шаблонизация в opencart примитивнейшая из возможных, но в этом есть своя сила! Которую понимаешь после того, как поработаешь с чужими шаблонами дизайна на xslt. Я добавил изменения в два php файла и получил нужный мне результат.

Выгрузка в Яндекс.Маркет за 3 дня


Я написал код для выгрузки товаров интернет магазина в формат Yandex ML. Это очень просто сделать на основе имеющегося в системе файла для экспорта товаров в формат Google Base. Это на самом деле просто сделать.
Очень много интересных аспектов этого формата открылось мне при согласовании параметров выгрузки с менеджером Яндекс.Маркета прежде чем он одобрил окончательный вариант я вносил изменения в выгрузку 4 раза. Очень помогла админка Яндекс.Маркета, где можно проверить валидность выгрузки. Яндексоиды хорошо сделали эту утилиту проверки файла. Я реализовал задачу по интеграции интернет-магазина в Яндекс.Маркет всего за 3 дня и очень этим гордился следующие 3 дня =) Причем я реализовал модель vendor.model и сдела так, что в админке можно выбирать минимальную цену товаров начиная с которой товары выгружаются в файл.

Для тех кто не знает как именно происходит выгрузка:
Товары автоматически выгружаются в YML файле на Яндекс.Маркет. Файл загружается, обрабатывается и публикуется приблизительно через каждые 5 часов. Яндекс.Маркет опрашивает случайным образом ссылки на товары сайта с периодичностью в 1 минуту. Если сайт недоступен, то он снимается с публикации автоматически. По этому, если вы будете кликать по товарам в поиске Яндекс.Маркета, то каждый клик будет стоить владельцу сайта не менее 3 рублей. Глупость формата YML заключаются в том, что XML принимается только в windows-1251, а не в UTF-8. Не поддерживается львиная доля HTML Entity. Причина такой странной поддержки мне непонятна.

Работа с изображениями


Посмотрите на дополнительные картинки в описании товара: www.toolsonline.ru/toolsets/allinone/nab.14.12.105 они выводятся в 275х275 пикс. Клик по картике открывает картинку в размере 800х800 поверх картинки выводится водный знак. Масштабирование изображений, наложение защитного watermark'a в OpenCart встроено по умолчанию. Надо лишь разобраться где лежит нужная библиотека генерирующая изображения требуемого размера и добавить несколько строчек кода в библиотеку вывода изображения. Вывод ватермарка реализован, но его надо включать в одном из методов хелпера в PHP файле.

У товара не может быть полей для отдельных свойств и как следствие не реализовать в принципе фильтры по свойствам, как в Virtuemart и других движках, но там очень приятный и простой WYSIWYG (не знаю как называется), можно добавлять неограниченное количество доп. картинок для товара. Очень много встроенных средств для управления ценой товара. Можно добавлять опции, которые влияют на итоговую цену. Каждый товар можно поместить одновременно в несколько разделов каталога.

Проблемы с ЧПУ


У этой CMS есть ряд недостатков, которые обязательно требуется исправить! Очень много ошибок с ЧПУ, я так понимаю, что эта возможность появилась начиная с версии 1.3.x и ещё не отлажена. Один товар можно смотреть так seo-url от корня сайта www.toolsonline.ru/cs-tk56pmq или в структуре каталога: www.toolsonline.ru/toolsets/unisets/cs-tk56pmq т.е. несколько путей до одного и того же товара, что по моему мнению не есть гуд. Общее количество страниц больше, но вес каждой страницы с точки зрения поисковика должен быть меньше, т.к. у них одинаковый контент отдается. Кроме варианта SEO ссылок параллельно действуют ссылки с параметрами, что тоже напрягает. Вот ссылка www.toolsonline.ru/index.php?route=information/contact и красивую ссылку /contacts/ сделать у меня простым способом не получилось.

Проблема с кодом 404


Вторая важная проблема в том, что Daniel архитектор этой самой CMS принципиально не отдает ошибку 404 для несуществующих страниц т.е. текст «страница не найдена» будет выведен, но для страницы будет передан код HTTP 200 OK. Поисковик будет думать, что страница существует, а это не так. Шлак из индекса поисковика удаляться не будет. Эту проблему я решил, но удивлен почему нет решения в сообществе Opencart на официальном сайте forum.opencart.com. Я там есть под своим обычным ником jfima и уже запостил туда пару своих решений для этой и других проблем. Я бы сказал, что сообщество молодое и неокрепшее и народу мудрого там мало.

Итог


В общем OpenCart хорошо подходит для интернет-коммерции, если ориентироваться на вариант с минимальными вложениями усилий в разработку. Моего уровня хватает, чтобы дописать что-то для этой CMS своими силами, а это значит, что многим фрилансерам эта система окажется доступной. Простой фреймворк, который можно легко настроить под нужды проекта.
Ефим Жилин @jfima
карма
9,9
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (49)

  • +4
    >Глупость формата YML заключаются в том, что XML принимается только в windows-1251, а не в UTF-8

    не правда. наш сайт выгружает в utf-8 и никаких проблем не имеет
    • 0
      Согласен. Нужно просто нормально кодировку настроить.
    • 0
      А вы можете дать ссылку на выгрузку? я вам не верю на слово.
      Я проверю файл в партнерке Яндекс.Маркета и если файл загрузится без ошибок, то буду приносить извинения и расшаркиваться =))
      Но в описании стандарта четко указана кодировка win-1251 я пробовал скармливать XML в UTF-8 никаких результатов не получил. Валидатор говорит, что ошибка в заголовке.
      • 0
        pastebin.org/128563
        использует https://sourceforge.net/projects/php-xhtml/ как обертку над DOM (чтобы проще было)
        • 0
          тег offer вынесен в отдельный объект, что поломало простой вывод в файл — потому что у хостера ограничение на 32 МБ, а оно кушало на 1000 позиций ~34МБ.

          так — просто подчиненные элементы без дополнительных объектов и вывод одним махом возможен. пример — как создаются теги category
        • 0
          Спасибо большое за код.
          Вот пример выгрузки в YandexML c сайта, которую я реализовал: www.toolsonline.ru/index.php?route=feed/yandex_yml
          Меня больше всего интересует пример выгрузки в XML полученной в результате выполнения вашего кода.
          • 0
            • 0
              Проверил валидатором файл в кодировке UTF-8 и windows-1251
              Теперь валидатор пишет
              «Определена кодировка: windows-1251 (строка 0, столбец 0)»
              или
              «Определена кодировка: utf-8 (строка 0, столбец 0)»

              Когда я занимался разработкой такого текста валидатор не возвращал, а значит Яндексоиды сделали upgrade для валидатора.

              Ведь по сути я дополнительно конвертирую файл iconv('UTF-8//IGNORE','CP1251',$output) чтобы получить из нормальной кодировки UTF-8 теперь ставшую редкостью win-1251.
      • 0
        Можете на слово не верить, но utf8 маркетом принимается, несмотря на то, что менеджер маркета утверждает обратное :) Обходится просто. При регистрации магазина подсовывается статический файл в windows-1251. После того, как магазин зарегистрирован — статический файл удаляется, далее работаем в utf8 (валидация проходит).
        • 0
          можно сразу в utf-8
          • 0
            Что, маразм у них прошел? Отрадно. Я год назад час препирался с менеджером маркета, который не верил, что у нас другие сайты в utf YML отдают, а маркет его принимает :)
        • 0
          Просто ради эксперимента попробую так сделать. По сути самая простая проверка — это подсунуть файл в UTF-8 валидатору и посмотреть ругнется или нет.
  • +3
    Если не трудно, допишите в обзор — как обстоит дело со славянскими локализациями, нашими же платежными системами и русскими системами доставки. На сайте их не нашел, но возможно кто-то их сделал?
    • +1
      Я делал на 1.2.x. Нашёл русскую и чешскую локализации. Не обошлось без напильника, но в целом доволен. Сайт — vixi.biz, если интересно.
      • 0
        Кстати. Как я понимаю у вас каталог мультиязычный. Это работало «из коробки» или только с помощью напильника?
        Мне просто нужно переделать на чем-то уже существующий магазин, в котором обязательно должен быть каталог на двух языках.
        • 0
          Из коробки. Это один из критериев выбора этой системы.
    • 0
      С локализацией дело обстоит хорошо. Есть переведенные файлы, но их обязательно требуется адаптировать под конкретный проект.

      А вы мне не подскажете, где у нас есть русская система доставки заказов, которая имеет интерфейс для обмена информацией с интернет-магазинами?
      Например, xml интерфейс взаимодействия с сайтом, чтобы могла отдавать стоимость доставки в указанный регион.

      Обещаю, что сделаю, если подскажете где уже есть и поделюсь кодом модуля. Интересует вариант службы доставки с представительством в Санкт-Петербурге.
    • 0
      По поводу платежных систем смогу написать, когда получу опыт подключения. Код мне понятен и я не вижу проблем с подключением платежных систем на техническом уровне. На повестке дня вопрос о подключении RBCMoney vs QIWI. Обе системы хороши, но какую подключать ещё не решил заказчик.
      • 0
        Лучше обе. Они слишком разные.
    • 0
      Достаточно крупное сообщество по opencart в России — myopencart.ru
  • 0
    тоже выбрал opencart для своего веб-магазина (1.3)
    весьма доволен
    правда, пришлось поработать напильником, чтобы сделать свои способы доставки и привязать Paypal (стандартный плагин работает на ура), но результат того стоит
    дорабатываю и сейчас, но уже по мелочам

    считаю его лучшим движком на данный момент среди бесплатных
    другие тоже пробовал, но пришлось выкинуть
    oscommerce, например, не поддерживает MVC и не генерирует превью-картинки (а просто грузит большие и уменьшает width и height, что считаю некошерным)
    • 0
      Продемонстрируйте пожалуйста ваш проект. Очень интересно посмотреть.
    • 0
      oscommerce стоит забыть как страшный сон. Лично я ни с чем более ужасным не встречался. И при том такая популярность.
  • 0
    Подскажите, правильно ли я сделал, что опубликовал запись в личном блоге или стоит перенести в блог посвященный CMS? Я не разобрался в критериях публикации в различные блоги. Это личная запись или CMS или web-разработка?
    • +2
      Разницы никакой нет, но записи из личного блога не попадают на главную ни при каком раскладе, из блогов попадают если блог не оффтопик в меню выбора это видно если он оффтопик,
      • 0
        Спасибо!
        Ещё как оказывается постить можно только в тот блог на который ты сам подписан. Гениальная идея.
  • 0
    Я вот сейчас с престой развлекаюсь. Рассматривал опенкарт как альтернативу. Скажите почему выбрали именно опенкарт, если брать в виду престу. Я думаю, вы тоже ее рассматривали.
    • 0
      На мой взгляд PrestaShop посложнее, чем OpenCart внешне и внутренне и при выборе я исходил из вопросов связанных с предметной областью. Я знал, что всё описание товара будет храниться в виде текста + много изображений, а свойства и фильтры по свойствам товаров не понадобятся в будущем. Получается, что простая система для такого заказчика будет лучше. Вот так я думал, когда принимал окончательное решение.
      Ещё могу сказать, что заказчик остался очень доволен именно простой и понятной админкой.
      • 0
        а если встанет вопрос усложнения проекта… как быть? я пока все же на престу больше смотрю, но возможно поковыряю еще раз опенкарт.
  • 0
    кстати как совет, убрать подсчет количества покупок на один товар, если они и так эксклюзивные =)
  • 0
    Вопрос! Зачем внизу странички писать XHTML 1.0 (со ссылкой на валидатор), когда всё совсем печально? =)
    • 0
      18 errors — это вовсе не печально, это практически здорово, а если присмотреться, то видно что ошибка там вообще всего одна — ссылки формата «forum.opencart.com/viewtopic.php?f=2&t=12767» в блоке «Latest News»

      Хотя размещать на сайте ссылки на валидатор — это, пожалуй, действительно моветон.
  • 0
    Url в студию!

    Сам присматриваюсь к опенкарту.
    Все здорово, но на том хостинге что есть, (мастерхост) тормозит, не смотря на включенный по максимуму кеш.
    Страшно подумать, что будет с магазином при пятистах посетителях в день.
    Какой хостиг вы используете под ваш проект?
    • –2
      Советую использовать www.ht-systems.ru
      Даже достаточно тяжеловесная по запросам к базе юми на этом хостинге не тормозит.
      • 0
        Пробовал из тех что под рукой Мастерхост, Зенон и Ru-center. Разные тарифы.
        Для OpenCart производительности нехватает везде. При этом DataLife Engine (10K новостей и 1k Посетителей в день) чувствует себя вполне уверенно без всяких доработок.

        Пробовал без нагрузки может конечно при нагрузке он побыстрее будет. но мне чего-то с трудом в это верится.
        • 0
          На мастерхосте и руцентре OpenCart будет работать хорошо!
          Правда бывает так, что достается медленный сервер уже перегруженный проектами и это сразу будет видно.
          Можно попробовать попросить поддержку перенести ваш аккаунт на другой сервер и скорее всего эта манипуляция очень поможет.
          Тормозит то почти всегда база данных. Если контент медленно отдается, то это клинический случай на хостинге.
          В принципе я не понимаю, что именно в OpenCart может тормозить?
          • 0
            Тестировал и пустых площадках и на демонстрационных и на дорогих тарифах на которых вышеуказанные компании обещают прирост производительности (отличие системных ресурсов)
            ставил на выделенный сервер знакомого на котором 2-3 мертвых сайта.

            По субъективной оценке, комфортности сёрфинга и времени генерации файла у Firebug, на выделенном сервере скорость соизмерима с вашим сайтом.
            Но меня это не устраивает.

            Не устраивает даже как он работает на локалке.
            По скорости значительно отстаёт от специальных решений что я пользовал.

            Это я тут могу демагогию разводить про MVC и ООП
            А заказчику/клиенту до этих вещей дела нету.
            заказчик: — я нажал на кнопку а страница медленно открылась
            заказчик: — а на старом сайте(у конкурентов) страницы быстро открываются
            прогер: Вы понимаете… Это новое решение. Огромная масштабируемость за счёт MVC. ООП.
            заказчик: Ты мне мозг нее$$и! Результат где?
            • 0
              Вас не устраивает скорость загрузки www.toolsonline.ru?
              Если такая скорость не устроит вашего клиента, то наверное у вас оочень избалованный клиент.

  • 0
    Проблемы с ЧПУ

    <link rel=«canonical» href="...." /> еще никто не отменял
  • 0
    Спасибо, было интересно почитать. Мы в своё время сделали выбор в пользу Magento и вот уже полтора года, то жалеем, то радуемся этому выбору. Судя по админке, OpenCart проигрывает Magento в функциональности, но для большинства магазинов её явно хватает.
    • 0
      Пожалуйста!

      Когда впервые увидел magento то остался под впечатлением от реализованного функционала и в целом от величия архитектуры системы. Установка сторонних модулей чего стоит. Космос!
      Попробовал в действии и ну очень долго разбирался в коде и в том, как это все подгружается там по хитрому.
      Я попробовал переделать шаблон дизайна и столкнулся с тем, что не понимаю как его изменить под себя =( На мой взгляд я потратил много времени и получил не совсем то, что хотел. В общем сложно. Шаблоны, как слоёный пирог. Очень умные. =)

      Ещё есть значительные проблемы с производительностью на shared-хостинге.
      Магента — это супер умная штука. Её обязательно надо смотреть, чтобы расширить горизонты о том, как может быть устроен интернет-магазин.
    • 0
      Не подскажите, есть ли в ней возможность сделать каталог товаров и весь сайт на нескольких языках как на OpenCart?
      • +1
        Да, разумеется. В Магенто есть такое понятие как store view. Для одного магазина можно создать несколько store view и каждому из них поставить необходимый язык. В редактировании товаров всё это тоже учитывается.
  • +1
    ЧПУ, значит.
    Я решил проблему так.

    Итак, мы полагаем, что УРЛ отражает структуру сайта-магазина. Домен/категория/подкатегория/.../товар

    Значит, при формировании урла достаточно находить категорию товара. Так и сделал. Здесь в целях избегания ресурсоемкого построения «ветки иерархии» было решено хранить в БД в таблице категорий не только id родительской категории, но и полный путь к ней вида 24_113_113 (категория_подкатегория_подподкатегория), формируется и обновляется автоматически при редактировании категории из админки. Это, кстати, можно использовать не только в товаре, но для меня пока это неактуально — ресурсов хватает.
    Остался только вопрос — что если товар относится к нескольким категориям? Решение здесь я выбрал такое: одна из категорий помечается как «основная», и для урла используется она и только она. Тонкости с получающейся запутанной для юзеров структурой сайта решаются дизайном.
    • 0
      О! Наш человек ;-)
      Я почти аналогичным способом решил проблему, только на этом сайте структура каталога древовидная без переплетений и можно выбирать так сказать первую попавшуюся категорию для товара. по сути изменения вносятся только в этот файл:

      ./catalog/model/tool/seo_url.php

      и во всех местах где надо получить красивый URL вставляем:

      $this->model_tool_seo_url->rewrite();

      Это на самом деле показатель того, что SEOURL приделывались наспех к OpenCart не сразу, а уже после релиза версии 1.1
      ^-^
  • 0
    > выводится водный…
    «водяной знак» правильней
  • +1
    Много занимаюсь OpenCart.
    Основной недостаток что в команде нету человека по контролю Юзабильности.

    1) Админка.
    Писали её для Админа, а пользовать её кто постоянно будет? Манагер! Коллцентр и Доставка. Всё прходиться допиливать руками. Сделал отдельный шаблон для манагеров. Урезал всё кроме самого необходимого. Система управления провами групп админов(манагеро) совсем корявая. Закрыть доступ можно только к целой странице. Шаблоном для меня было проще и понятней.

    1) Картинки.
    Картинки грузяться с реальным именем прям на хостенх. Со всеми (ВАННА «Джулия» 1231 на 180.JPG). Также небыло контроля за дублями файлов. Если есть файл с такимже именем его просто затирало (1.jpg).
    Со всем вышеперечисленным встрял на реальном проекте. Это мне с малых лет понятно как фалй в Досе называються, а Менеджеру?
    Выпустили специальный релиз, где основной фишкой был редактор (JS) картинок. Но в целом ничего не поменялось.

    А нужно то всего, одна кнопка «Загрузить картинку»! При загрузке картинку переименовать в вид (%product_id%.jpg). Положить её в папку (images/products/). Зачем этот огород городить? Редактор если и встраивать то только для простейших манипуляций (crop resize)

    И последний вопрос с производительностью. Кэш — кэшем, но контрольровать её надо!

    Выгрузку в Яндекс.Маркет делал на основе модуля выгрузки GoogleSitemap.
  • 0
    из минусов, что я увидел в опенкарт (но при этом мне понравилась блольше других цмс)
    1) мелкие картинки после загрузки и нажатии клика на них, он их растягивает, если они меньшим размером (но может где то настраивается)
    2) установка расширений не всегда проходит прозрачно, плагин для импорта/экспорта товаров мне удалось поставить раза с третьего
    3) Поддержка языков Нет подстановки языка по умолчанию, т.е. если отсутствует что то в переводе, то просто отсутствует (опять же речь про админку)
    4) Падение системы Система очень легко ложится и при этом нет инструмента для его восстановления, ну например, добавляем мы к русскому, английский язык. Посмотрели как он выглядит в магазине, но по каким то причинам решили его удалить и удаляем. После этого магазин перестаёт функционировать если вы его смотрели на англ. языке (нужно переключить назад, и вернуться назад), при этом сообщений об ошибке или чего то что бы могло выправить ситуацию отсутствует, похожая проблема и с установкой /удалением расширений.
  • 0
    Вдруг если кто не знает, то у проекта есть русское сообщество :)
    Маленькое правда, но есть :) Русская локализация выходит с задержкой примерно в день.
    myopencart.ru

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

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