sv2109

  • записи
    52
  • комментариев
    14
  • просмотров
    26 879

Записи в этом блоге

sv2109

ec17f0_9a58cc27ba4b405785bc365f3e86ecf2.jpg

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

 

 

 

Что я могу на это ответить? 

"Да, я знаю это!"
Мало того, я специально делают такие не идеальные модули. Потому что после 3-х лет разработки модулей для OpenCart могу констатировать, что делать идеальные во всех смыслах модули для OpenCart просто не выгодно, это не окупается. 

Принцип Паретто

Если применить к разработке модулей принцип Паретто, то можно сказать, что потратив на разработку модуля 20% времени и сделав 20% базового функционала, модуль удовлетворит 80% покупателей, для них этих 20% базового функционала будет вполне достаточно для их сайта. 

Что это значит в денежном эквиваленте?

Допустим, на написание базового функционала модуля нужно потратить неделю. За неделю можно создать модуль, который удовлетворит 80% покупателей, и которые его купят за условно 300-500 рублей. 
Теперь, для того, чтобы удовлетворить следующие 20% покупателей, которым нужен идеальный модуль, нужно потратить еще 80% времени (так как всевозможных мелочей может быть очень много) или еще месяц. Но так как времени нужно потратить в 5 раз больше, то и модуль нужно продавать в 5 раз дороже или уже за 2000-2500 рублей. Но за такие деньги этот модуль купят буквально единицы, а остальные резонно скажут: "Мне это дорого", так скажут даже большинство покупателей из тех 20%.
А что будет если за этот месяц написать еще 2-3 других модуля с тем же базовым функционалом? Он опять устроит 80% пользователей и его опять купят 80% пользователей. 

Конечно, возможно реальное соотношение будет не 20% на 80%, а 30% на 70%, или другое, но зависимость однозначно есть. 

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

Возможно, в других движках, где модули стоят 50, 100, 200$ за модуль ситуация другая а там выгодно делать идеальные модули, но в OpenCart, да еще и русском сегменте, где модули стоят 300, 400, 600 рублей, увы. Так что не требуйте, чтобы модуль за 300 или 500 рублей был идеальным во всех смыслах, это невозможно. 

 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

questions-reponses-profits.jpgИногда хочется написать какую-то статью в блоге но не совсем понятно о чем писать, какие темы были бы интересны читателям, по каким темам мало информации, какие темы оставляют больше всего вопросов. 

Поэтому обращаюсь к читателям этого блога - сообщите об этом! 

И я постараюсь по возможности раскрыть эту тему более подробно. 

Сообщить можно в комментариях к этому посту, в ЛС тут на форуме или на почту sv2109@gmail.com

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

Безопасность OpenCart

psihologia-bezopasnosti-600x350.jpgРешил написать большую статью на тему безопасности OpenCart, так как к сожалению, для такого популярного движка, как OpenCart, такой важной информации я не нашел, есть несколько статей на английском языке, но они больше копируют официальную документацию и описывают банальные вещи, есть какие-то темы на форумах. Поэтому решил заполнить этот пробел и написать свои мысли на тему безопасности OpenCart.
 
Возможно, некоторые пункты вам могут показаться слишком мудреными, но, мне кажется, в вопросе безопасности и нужно быть немного параноиком, это тот случай, где, как говориться, лучше перебрать, чем недобрать. 

Итак, мои рекомендации по безопасности:

1. Отношение к взлому. Очень важный пункт, так как очень часто люди недооценивают взлом. Они думают: "Да кому там мой сайт нужен, кто его будет ломать?". При таких мыслях и отношении к взлому аналогичное: "Зачем мне что-то защищать, если меня все равно никто ломать не будет?". 
В результате мы получаем очень легкую добычу для злоумышленников, сайт, который практически никак не защищен, именно такие сайты чаще всего и ломают. 
Нужно всегда помнить о том, что ваш сайт будут ломать и всегда быть готовым как до попыток взлома, так и до самого взлома. Только так вы максимально защитите свой сайт. Просто подумайте, что вы потеряете, сколько денег, если злоумышленники: скопируют базу вашего сайта и выложат его в интернет, скопируют базу ваших клиентов и продадут конкурентам, начнут рассылать спам с вашего сайта, разместят вирусы на страницах ваших сайтов, из-за которых будут украдены данные ваших клиентов, поисковые системы наложат на ваш сайт санкции и вы вылетите из индекса и так далее. Неужели всего этого не достаточно для того, чтобы серьезно задуматься о безопасности вашего сайта?

2. Основные требования к безопасности. Они описаны в документации по OpenCart. Они включают основные рекомендации:
- удалить папку install
- переименовать папку админ панели
- защита файлов логов
- права доступа к файлам

3. Защита админки OpenCart. 
Очень часто сайты ломают именно через админку, поэтому защитить админку очень важно. Самая лучшая защита админки такая, при которой злоумышленник даже не знает где она находится, тогда какой-то подбор паролей становится абсолютно невозможным.  Вот несколько советов по защите админки:
- обязательно создавайте для админа нестандартный логин, НЕ admin, administrator, root, ваш ник итд.
- обязательно установить сложный пароль к админке, напр: !d2#Um$jT4EE5k&n7)t, не нужно ставить пароли типа: 12345, admin123 итд.
- очень желательно перенести админку в другую папку, вместо admin в напр. d2UmjT4EE5k
- если у вас статический IP то будет очень хорошей защитой запретить доступ к админке всем, кроме этого IP:
нужно добавить файл .htaccess c кодом:

order deny,allow
allow from xxx.xxx.xx.xx
deny from all

где вместо "xxx.xxx.xx.xx" нужно вписать ваш IP адрес. 

- очень хорошей защитой админки будет перенос ее на отдельный поддомен или даже отдельный технический домен. 
- можно установить доп. пароль доступа к админке
- можно установить на вход капчу. 
- если доступ к админке имеют разные пользователи (администраторы, модераторы, контентщики итд.) то давайте каждому пользователю не больше прав, чем ему нужно. Тоже самое справедливо если даете кому-то стороннему доступ к админке.
- не держите в админке настройки FTP и SMTP, лучше их держать в отдельном конфиге

4. Доступ к сайту. 
В целях безопасно, запрещается давать доступ к вашему сайту другим пользователям: разработчикам, фрилансерам итд.. Очень часто вижу ситуацию, когда покупатель покупает модуль у меня и уже через 15 минут скидывает на почту полный доступ к своему сайту (иногда даже с ssh и доступом к хостингу), чтобы установить ему этот модуль. Уверен, так же он поступает со всеми разработчиками и доступ к его сайту получают десятки людей.. о какой защите в таком случае вообще может идти речь?
Доступ к вашему сайту должны иметь: а) вы б) ваш программист, который работает с вашим сайтом. Если вы сами не знаете программирования, то будет очень хорошей идеей нанять такого программиста, чтобы только он один имел доступ к вашему сайту и только он один устанавливал и настраивал вам модули и делал другую работу по сайту. Он один, а не десятки других программистов.
Если все-таки нужно дать доступ к сайту другому разработчику, то:
а) давайте доступ не к основному сайту, а к тестовому сайту, его копии
б) установите на этом сайте любой инструмент контроля изменения кода, см. ниже. 
в) давайте доступ только проверенным разработчикам 
г) обязательно меняйте все пароли доступа по завершению работы

5. Ограничить FTP доступ.
Многие хостеры это поддерживают - ограничение FTP доступа  по IP, которое можно включить в админке хостинга. Да, это дополнительные хлопоты, особенно когда у вас динамический IP, который нужно будет постоянно менять, но зато кроме вас никто не сможет зайти на FTP, а это очень важно для безопасности, так как получив FTP доступ к сайту (а это можно сделать напр. через вирусы на вашем компьютере)  злоумышленник может сделать что угодно. 

6. Дополнения
а) Покупайте модули только у проверенных разработчиков, которые уже несколько лет занимаются разработкой модулей, у которых уже десятки и сотни продаж этого модуля. А не у разработчиков, которые месяц назад зарегистрировались и это их первый или второй модуль.
б) Покупайте модули только на проверенных площадках, а не на каких-то сомнительных сайтах в зонах ".cc", ".ws" итд.
в) Забудьте об варезе, так как огромное к-во вирусов на сайтах именно из-за вареза. Сначала пользователь ставит на свой сайт кучу модулей скачанных непонятно откуда, а потом создает на форуме тему: "Помогите, у меня вирусы на сайте". Насмотрелся уже на это..

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

8. Удалить дополнительные скрипты для работы с сайтом. Это относится к скриптам работы с базой, типа phpmyadmin, разные скрипты дял создания архивов итд. Лучше их держать где-то на отдельном поддомене, чтобы их файлов не было в корне сайта. Так как через ошибки в этих скриптах могут взломать ваш сайт.

9. Отключить вывод ошибок на екран. На рабочем сайте он должен быть отключен, иначе если на сайте произойдет ошибка, то пользователям на экран будет выведен текст этой ошибки, а также системные пути к файлам вашего сайта, информация, которая не должна быть доступна для пользователей, так как ею могут воспользоваться злоумышленники. 
Чтобы убрать вывод ошибок на экран, добавьте в index.php сначала код:

ini_set('display_errors', 0);

10. Права доступа к сайту. Нужно всегда  давать минимальное к-во прав, необходимое для работы сайта. 
Очень важно для безопасности вашего сайта понимать права доступа к файлам в системе Linux, читайте документацию.
Предлагаю 2 варианта прав доступа к файлам. Один менее безопасный, но более удобный, особенно на этапе разработки сайта. Второй более безопасный, но менее удобный, подойдет для варианта, когда сайт уже полностью готов и изменения в него вносятся очень редко. 

Первый вариант. Он дает права на запись пользователю FTP, и права на чтение группе www-data.
Группа www-data - это группа пользователей, от которой обычно работает вебсервер. То есть, все php скрипты работают под пользователем www-data из группы www-data
Категорически запрещается давать пользователю www-data права на запись всех файлов!

В этом варианте нужно сделать:
а) владельцем всех файлов сделать пользователя ftp (он у вас может называться по-разному, напр. вашим ником)
Команда для рекурсивного добавления пользователя sv2109 для всех файлов текущего каталога

sudo chown -R sv2109:www-data ./*

б) добавить пользователя sv2109 в группу www-data

sudo usermod -a -G www-data sv2109

в) права доступа к файлам должны быть 640, папок - 750. 
Команда рекурсивного добавления прав 640 для всех файлов

find ./ -type f -exec chmod 640 {} +

Команда рекурсивного добавления прав 750 для всех каталогов

find ./ -type d -exec chmod 750 {} +

Таким образом, мы даем права на запись пользователю ftp, это позволит писать файлы через FTP, мы даем права на чтение группе www-data, это дает право пользователю www-data из той же группы читать файлы сайта, это нужно для работы сайта, мы даем всем остальным права - 0, то есть, никаких прав, даже на чтение, оно им не нужно. 

г) для файлов и папок, которым нужны права на запись:
/system/storage/modification
/system/storage/cache
/system/storage/upload
/system/storage/logs
/system/storage/download
/image

устанавливаем права для файлов 660, для папок 770

find ./ -type f -exec chmod 660 {} +
find ./ -type d -exec chmod 770 {} +

д) права доступа к файлу .htaccess сделать 644, 640 на моем сервере не сработало именно для этого файла.


Второй вариант - он закрывает все права доступа для пользователя ftp и всем другим пользователям, отличным от www-data. Это значит, что даже если кто-то получит данные доступа по ftp к вашему сайту, то он все равно не сможет навредить вашему сайту. Но так же и вы сами не сможете работать через ftp, файлы изменять придется через ssh, работая от пользователя root, что не правильно. Поэтому этот способ нужно использовать тогда, когда сайт уже полностью готов и изменять что-то на нем нужно очень редко. 

В этом варианте нужно сделать:
а) владельцем всех файлов сделать пользователя www-data
б) права доступа к файлам должны быть 400, папок - 500. 
в) для файлов и папок, которым нужны права на запись:
/system/storage/modification
/system/storage/cache
/system/storage/upload
/system/storage/logs
/system/storage/download
/image

устанавливаем права для файлов 600, для папок 700

г) права доступа к файлу .htaccess сделать 444

Это очень надежный вариант, но также и очень неудобный для работы, особенно, если сайт еще разрабатывается.

11. Оставить доступными для веб только те файлы, которые должны быть доступными для веб и не более. 
Зачем оставлять доступным для веб хотя бы один файл или категорию (особенно те, которые доступны для записи), если им совсем не обязателен этот доступ?
Нужно перенести все файлы, которые не должны быть открыть для интернета за пределы папки сайта, которая вся открыта для интернета. 
Доступными для интернета должны быть исключительно файлы, которым этом нужно, это: файл index.php, файлы .htaccess, php.ini, robots.txt, картинки, css файлы, яваскрипт файлы, файлы шрифтов (woff2, woff, ttf, svg, eot) ну и все. Все контроллеры, модели, файлы шаблонов, библиотеки, логи итд. нужно вынести за папку сайта.

Чтобы это сделать нужно:
а) скопировать все файлы, которые не должны быть доступны через интернет, в другую папку, выше паки сайта. 
Напр. если у вас сайт находится в папке: /var/www/html/sv2109.com/ то перенести эти файлы нужно в папку выше, напр. в /var/www/html/sv2109.com_files/ или с любым другим названием. 
б) файлы config.php тоже перенести в новую папку, но не забудьте изменить путь к конфигу из файлов index.php каталога и админки
для каталога заменить в index.php 

if (is_file('config.php')) {
  require_once('config.php');
}

на

if (is_file('../sv2109.com_files/config.php')) {
  require_once('../sv2109.com_files/config.php');
}


для админки заменить 

if (is_file('config.php')) {
  require_once('config.php');
}


на

if (is_file('../../sv2109.com_files/admin/config.php')) {
  require_once('../../sv2109.com_files/admin/config.php');
}

в) в файле config.php пропиать новые пути (заменить sv2109.com на sv2109.com_files) для всех перенесенных папок, кроме DIR_IMAGE

Таким образом, у вас должна получится следующая структура.
Основной каталог сайта, доступный для интернета /var/www/html/sv2109.com/:
/catalog/
/catalog/view/javascript/ - тут все явасрипты
/catalog/view/theme/default/stylesheet/ - тут все css файлы
/catalog/view/theme/default/image/ - картинки темы
/catalog/.htaccess
/image/ - картинки сайта, эта папка остается полностью
/admin/view/javascript/ - тут все явасрипты админки
/admin/view/stylesheet/ - тут все css файлы админки
/admin/view/image/ - картинки темы админки
/admin/view/.htaccess
/admin/index.php
/admin/php.ini
index.php
php.ini
.htaccess
robots.txt

Защищенный каталог сайта, закрытый для интернета /var/www/html/sv2109.com_files/:
/admin/view/template/
/admin/model/
/admin/controller/
/admin/language/
/admin/config.php
/system/
- вся системная папка 
/catalog/view/theme/default/template - шаблоны темы
/catalog/controller/
/catalog/model/
/catalog/language/
config.php

12. Для папок, открытых для интернет нужно закрыть доступ для всех файлов, которых не должно быть в этих папках. 
Для этого нужно добавить в эти папки файл .htaccess 
для папок /catalog/ и /admin/view/ открыть доступ только для картинок, css, js и файлов шрифтов. Все остальные файлы не будут доступны.

<FilesMatch "\.(ico|gif|jpg|jpeg|png|css|js|woff2|woff|ttf|svg|eot)$">
Allow from all
</FilesMatch>
Deny from all

для папки /image/ открыть доступ только для картинок:

<FilesMatch "\.(gif|jpg|jpeg|png)$">
Allow from all
</FilesMatch>
Deny from all

Так, даже если в этой папке окажется вредоносный файл, напр. evil.php, то все равно никто не сможет его запустить из интернета. 
Если вам вдруг понадобиться какое-то другое расширение в этих папках, то его несложно добавить в файле .htaccess

13. Добавить в основной файл .htaccess после RewriteEngine On следующий код (взято из этой темы)

<IfModule mod_rewrite.c>
    RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
    RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
    RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR]
    RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR]
    RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
    RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
    RewriteCond %{QUERY_STRING} (\'|\")(.*)(drop|insert|md5|select|union) [NC]
    RewriteRule .* - [F]
</IfModule>

Этот код защитит ваш сайт от выполнения опасных php функций, яваскриптов и закроет доступ к файлам паролей, 

14. Постоянно делайте резервные копии.
- лучше этот процесс автоматизировать, например с помощью модуля от SOFORP - "Резервные копии"   
- нужно делать копии как всех файлов сайта, так и базы данных. 
- файлы архивов никогда не держите на том же сервере, что и ваш сайт
- всегда сохраняйте не одну-две копии, а минимум 2-3 последних плюс по одной копии за последние месяцы. Это нужно на случай, если кто-то изменит файлы вашего сайта и вы этого не увидели сразу, то чтобы были более старые архивы из которых вы сможете восстановить оригинальные данные. 

15. Используйте какой-то инструмент для отслеживания изменений в файлах. 
- это может быть бесплатная система контроля версий git, но она непроста для новичка и требует выделенного сервере с ssh доступом
- есть готовый модуль FSMonitor для OpenCart от halfhope
- или любой другой инструмент

16. Установите себе на рабочий компьютер, с которого вы работаете с сайтом хороший антивирус или вместо Windows какой-то Linux дистрибутив (напр. Ubuntu), где вирусов почти нету. 

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

Это основные пункты, в дальнейшем этот список будет обновляться.

Если у вас есть вопросы или предложения по улучшению безопасности OpenCart - пишите в комментариях.
 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

shutterstock_79251061.jpgМногие мои клиенты меня часто спрашивают подсказать какой-то хороший хостинг. И всегда, вот уже года 2 я всем советую хостинг, которым сам все время пользуюсь. Сегодня я узнал, что у него еще и партнерская програма появилась, поэтому посоветовать его захотелось еще больше :)

 

 

 

 

Итак, встречайте - fastvps.ru

 

Почему именно он?

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

Минимальный тарифный план стоит всего 3.9 евро и за эти деньги вы получаете: Процессор Intel® Xeon™1 Core, SSD (!) Диск 5 GB, Память 1 GB DDR4.

Плюс бесплатную систему управления хостингом. 

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

 

Как я его нашел? 

У меня, кроме OpenCart, есть еще несколько сайтов на Drupal, один из них - это сайт моего города, который я создал уже наверное лет 7 тому назад, это достаточно большой (больше 100 тыс. материалов) сайт, очень тяжелый, так как работает на Drupal, с посещаемостью около 5 тыс. в сутки. Сначала этот сайт работал на самом дешевом виртуальном хостинге, но по мере роста хостеры постоянно намекали сменить тариф на более дорогой, после 2-3 смен тарифа мы переходили на другой хостинг, некоторой время все было нормально, после чего начинались теже рекомендации хостера сменить тариф. Сайт постоянно ужасно тормозил. И вот после около 5 смен всевозможных хостингов мы наконец решили попробовать fastvps и по сегодняшний день там, сайт работает быстро (правда уже желательно взять другой тариф) и никуда уходить не хочется. 

 

Почему дешевые виртуальные хостинги - это плохо?

Потому что, что такое виртуальный хостинг? Это сервер, на который хостер всегда пытается всунуть максимум сайтов, чтобы заработать больше денег, а чем больше сайтов работает на одном сервере, тем медленнее от работает. Поэтому хостеру очень выгодны простые малопосещаемые сайты, они почти не потребляют ресурсы и их на один сервер можно всунуть сотни и тысячи таких. Но как только на ваш сайт (или даже на не ваш сайт, но размещенный на том же сервере) зашло немного больше пользователей, так все сразу начинает тормозить, а через некоторое время вы начинаете получать "письма счастья" от вашего хостера о том, что ваш сайт слишком сильно нагружает сервер и предлагает или оптимизировать скрипты (куда еще оптимизировать OpenCart, он и так простой, как двери) или купить более дорогой тариф. 

 

Что такое VPS?

Очень условно - это мини выделенный сервер, то есть вы имеете свой мини сервер, с который вы можете сделать все что угодно, у вас есть полный root доступ к нему. А также вы имеете гарантированные ресурсы. То есть, ваши ресурсы не сможет украсть ваш сосед по серверу, на сайт которого зашло больше пользователей, даже если это случится, ваш сайт от этого никак не пострадает. Конечно, все очень условно, но суть примерно такая. 

Поэтому я всем советую взять VPS и забыть очень надолго (а возможно и навсегда) о скорости работы вашего сайта. Ваш сайт будет реально летать на этом хостинге. 

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

 

Поэтому вот ссылка:

https://fastvps.ru/

Ссылка реферальная, но если вы перейдете именно по ней, то получите скидку до 5% в зависимости от тарифного плана, который вы выберете, а я на пару центов заплачу меньше за свой хостинг :)

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

php7.jpgВ последнее время получаю все больше писем о том, что "Мы перевели свой сервер на php 7 и ваши модули теперь не работают".

 

 

 

 

Да, php 7 - это очень круто, новая версия, работает быстрее, имеет кучу новых плюшек и т.д.

Но, не смотря на все это,  мой совет всем пользователям OpenCart: "Не стоит на данный момент переводить ваш OpenCart магазин на php 7!"

 

Как минимум по нескольким причинам:

  • Сам OpenCart еще не поддерживает php 7. Раз нету официальной поддержки от разработчиков движка, то ипользовать это на рабочих сайтах крайне не рекомендуется. Конечно, поиграться можно, не не ставить на реальный рабочий сайт.
  • Все разработчики должны придерживаться стандартов движка, поэтому все модули должны работать на тех конфигурациях, на которых работает сам OpenCart, но так как OpenCart php 7 не поддерживает то и модули этого делать не должны. Да, многие модули могут работать, но это не означает, что должны работать все. Разработчики не обязаны делать версии модуля для версий php, которые даже сам движок еще не поддерживает.
  • Многие разработчики используют ionCube для кодирования файлов модулей, поэтому это также нужно учитывать, а кодировщики обычно очень медленно выпускают новые версии для новых версий php. ionCube буквально только на днях выпустил поддержку php 7, но лучше ее пока не использовать, так как она еще может быть не очень стабильной. Плюс для того, чтобы использовать php 7 в ionCube нужно: а) перекодировать все модули под уже шестой лоадер. б) этот же 6 лоадер должен быть установлен на хостинге, а хостеры обычно тоже не спешать обновлять ionCube лоадеры, некоторые клиенты мне еще недавно жаловались, что даже 5 версию их хостер не поддерживает, хотя ей уже года полтора.

 

Поэтому повторюсь, мой совет: "Не стоит пока еще использовать php 7 для OpenCart, потому что никто не сможет вам гарантировать работу и самого движка и модулей"

 

Когда можно будет?

Когда будут выполнены 2 условия:

  • поддержку php 7 добавят в OpenCart официально, возможно это произойдет с 3 версии, так как переводить всевозможные движки на php 7 сейчас стает модным.
  • будет стабильная поддержк php 7 в ionCube и хостеры перейдут на 6 версию ionCube Loader-а.

Думаю, где-то через пол года ситуация может улучшиться по каждому из 2-х пунктов.

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

keys.jpgИногда спрашивают: "Я купил модуль для одного сайта, а теперь мне он нужен на другом, на первом уже нет, можно перенести лицензию на другой сайт?".

 

 

 

 

Если коротко, то - нет. 

 

Есть несколько причин для этого. 

 

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

Вы можете сказать:

Цитата

"Я вам обещаю модуль не использовать на старом сайте".

Да, но ведь гарантии нету никакой, что вы это действительно сделаете и завтра не установите его опять. 

Цитата

"Так почему же вы тогда не сделаете техническую возможность переносить лицензии?" 

 

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

Все еще хотите, чтобы разработчики использовали сервер лицензий?

 

Вторая причина заключается в том, что модуль это не только код, это еще и поддержка, которая иногда стоит даже больше самого модуля. Так как модуль у вас работал на другом сайте то и поддержку вы уже получали на этом сайте. Вам скорее всего уже помогали установить и настроить модуль, а может и устанавливали на ваш сайт, отвечали на ваши вопросы и так далее. Вы устанавливаете модуль на другой сайт и у вас могут опять возникнуть какие-то проблемы с установкой, настройкой модуля, какие-то конфликты итд. И их опять придется решать и оказывать поддержку, но ведь она уже была оказана для первого сайта. Получается вы будет постоянно менять сайт, а разработчик должен бесплатно тратить время на установку модуля на все ваши сайты?

 

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

 

Поэтому, если вам нужен модуль для другого сайта - покупайте лицензию для этого сайта. 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

Как установить ionCube?

ioncube.pngionCube используется многими модулями OpenCart. Если модулю нужен ionCube, а ionCube у вас не установлен то такой модуль у вас работать не будет.
Как проверить установлен ли на вашем хостинге ionCube я писал раньше. Обычно, на 99% хостингов ionCube уже установлен. Но если вам не повезло, вы проверили и увидели, что ionCube у вас все же не установлен - эта статья для вас, сдесь будет дана информация как установить ionCube на вашем хостинге.

 

 

Что такое ionCube?

ionCube - это библиотека php. Это значит, что для того, чтобы ее установить вам нужен полный доступ в вашему серверу. Он у вас есть если у вас есть личный выделенный сервер или VPS. Но его у вас нету, если у вас бюджетный шаред хостинг, на котором работает, наверное 90% всех сайтов на OpenCart. Поэтому если у вас шаред хостинг то вы не можете самостоятельно установить ionCube.

 

Как установить ionCube на шеред хостинге?

Как я уже написал выше, вы не можете этого сделать самостоятельно, для того, чтобы установить ionCube в этом случае вам нужно:

  1. Зайти в панель упраления хостингом и посмотреть настройки там. На некоторых хостингах включить поддержку ionCube и даже выбрать версию Loader-а, можно прямо в панели управления хостингом. Поищите хорошо в настройках. 
  2. Если вы не нашли в панели управления такой настройки - поищите в разделе с документацией по вашему хостингу, обычно на всех хостингах такой раздел есть и в этом разделе есть инструкция какие шаги нужно предпринять чтобы включить ionCube на вашем хостинге
  3. Если вы не нашли такой инструкции, напишите вашему хостеру и попросите включить ionCube для вашего сайта. Хостер вам или скинет инструкцию, которую вы не нашли в п.2 или включит ionCube самостоятельно. При обращении к хостеру укажите так же какая версия ionCube Loader-а вам нужна.

 

Какую версию ionCube Loader-а включать?

На сегодня актуальна 5 версия, версия 4.7 уже устарела, поэтому если включаете ionCube то сразу включайте более новую версию, модули, которые используют версию 4.7 на версии 5 работать будут, а вот модули, которые используют 5 (а таких уже становится все больше) на 4.7 работать не будут.

 

Если у вас свой выделенный сервер или VPS

В этом случает у вас есть полный доступ к вашему серверу и вы можете установить ionCube самостоятельно, для этого:

  1. Посмотрите в документации по хостингу, там может быть руководство как установить ionCube самостоятельно на ваш дистрибутив Linux, так как установка немного отличается для разных дистрибутивов (Ubuntu, CentOS)
  2. Если такой документации нету, то вы можете зайти на сайт ionCube, скачать последнюю версию ionCube Loader-а и установщик и следовать инструкциям установщика
  3. Если у вас возникли какие-то проблемы с установкой - напишите в поддержку вашего хостера.

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

opencart.pngКакая версия OpenCart актуальна на сегодня. Какую версию OpenCart нужно использовать сейчас для нового проекта?

 

 

 

 

Несколько месяцев назад я уже писал подобную статью.  Тогда я советовал использовать для новых проектов OpenCart 1.5.6.4

Изменилось ли что-то за это время?

Да. Если тогда вторая версия движка только вышла, была еще достаточно сырой и под нее было очень мало модулей то сегодня ситуация изменилась. 

За это время версия 2.0 окрепла, из нее было выпилено достаточное количество багов, многие разработчики уже перевели свои модули на вторую версию. Я тоже уже практически все свои OpenCart модули перевел на OpenCart 2

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

Еще одним весомым аргументом в пользу 2.0 есть то, что это новая версия! И какой смысл создавать новый магазин на уже устаревшей 1.5 версии? Если это сделать то через каких-то полгода, год нужно будет весь магазин переводить на вторую версию, а это достаточно непросто и дорого, особенно если магазин большой, там много товаров, модулей, измененный движок, тема итд. Так почему бы сразу не установить на новый магазин новую версию движка? Если это сделать то магазин еще долго будет работать на актуальной версии, а обновляться с между вторыми версиями, напр. с 2.1.0.1 на 2.1.0.2 , уже будет не сложно. 

Поэтому я, если бы делал новый сайт сегодня, то однозначно уже делал его на  OpenCart 2

 

Какую именно версию использовать?

На сегодня, 06.02.16, самой актуальной является версия 2.1.0.2. Версия 2.2 еще находится в альфе, она пока доступна только для разработчиков и не предназначена для рабочих сайтов. О том,что нового в версии 2.2 я уже писал раньше

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

ips_logo.jpgВ предыдущей статье я писал об первом знакомстве с движком IPS, сейчас напишу об его коде, который очень сильно отличается от кода ОpenСart и показался мне очень интересным для изучения.

 

 

 

Документация 

Тут все очень печально, потому что версия 4 вышла всего пару месяцев тому назад и документации по ней для программистов почти вообще нету. Я нашел около 10 статей и все. Может просто плохо искать и есть какие-то блоги или форумы, но я не нашел.

НО ситуация очень сильно спасает то, что каждый класс и методы очень хорошо документированы, напр. 

/**
   * GET /forums/topics/{id}
   * Get posts in a topic
   *
   * @param   int   $id     ID Number
   * @apiparam  int   hidden    If 1, only posts which are hidden are returned, if 0 only not hidden
   * @apiparam  string  sortDir   Sort direction. Can be 'asc' or 'desc' - defaults to 'asc'
   * @throws    1F294/1 INVALID_ID  The topic ID does not exist
   * @return    \IPS\Api\PaginatedResponse<IPS\forums\Topic\Post>
   */
  public function GETitem( $id )
  {

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

 

Стиль кодирования

Еще даже до знакомства с OpenCart  мне его стиль кодирования казался самым правильным. Напр. конструкция:

if ($condition) {
 // do something
} else {
  // do something else
}

А теперь сравним со стилем IPS:

if ( $condition )
{
 // do something
}
else
{
  // do something else
}
  1. В скобках стоят лишние пробелы ( $condition ), это увеличивает читабельность кода, код с пробелами легче читается, чем когда все на кучу
  2. Фигурные скобки стоят со следующей строки, это:
  • оставляет меньше шансов ошибиться и пропустить открывающую фигурную скобку, особенно когда условие длинное и она где-то в самом конце строки
  • все фигурные скобки находятся в одной линии, что делает код более однообразным и, как следствие, легче читабельным
  • между условием и кодом в скобках за счет скобки всегда есть строка (в которой находится скобка) Это тоже делает код боее однообразным, так как в стиле OpenCart эту пустую строку для больших условий можно установить, чтобы как-то отделить код для лучшей читабельности, а для небольших не нужно. Такой код также легче читать, так как везде есть строка, которая отделяет условие от самого кода. Так и более красиво и практично. 


Поэтому мне стиль кодирования IPS показался более практичным и удобным. 
 

Инициализация системы

Для того, чтобы загрузить все необходимое для работы, нужно подключить всего 1 файл:

require 'init.php';

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

require 'init.php';
 
// загрузить пользователя с id 1 
$member = \IPS\Member::load( 1 );
 
// вывести его имя
echo $member->name;

Это конечно же очень удобно, что не нужно писать десятки строк кода, подключать десятки классов, библиотек конфигов итд.

 

Пространство имен, Namespaces

Движок очень широко его использует, сам движок имеет пространство IPS, каждый компонент имеет свои пространства, элементы этого компонента свои итд.

Поэтому часто в коде приходится видеть что-то типа этого:

namespace IPS\core\modules\front\system;
 
/**
 * Sidebar Widgets
 */
class _widgets extends \IPS\Dispatcher\Controller

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

 

Singleton, cинглтон, одиночка

Движок широко использует этот шаблон проектирования, почти каждый класс грузится с помощью него. Для этого в классах есть метод i(), который возвращает объект этого класса. 

Поэтому весь код переполнен конструкциями типа:

foreach ( json_decode( \IPS\Db::i()->select( 'widgets', 'core_widget_areas', array( 'app=? AND module=? AND controller=? AND area=?', \IPS\Request::i()->pageApp, \IPS\Request::i()->pageModule, \IPS\Request::i()->pageController, \IPS\Request::i()->pageArea ) )->first(), TRUE ) as $k => $block
 ) {

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

 

Active Record, актив рекорд

Еще один паттерн проектирования, который используется очень широко в движке. 

Если кто не знает, то это паттерн для работы с базой данных. Если у вас есть 100 таблиц в базе данных то вам не нужно для каждой писать отдельно методы для получения, создания, редактирования и удаления записей для этой таблицы (как происходит в OpenCart) Вместо этого есть 1 класс, который все это делает. 

Для того, чтобы подключить новую таблицу создается новый класс, который наследует интерфейс ActiveRecord и в котором указываются настройки новой таблицы (название таблицы, идентификаторы итд.) и все. После этого можно с помощью этого нового класса работать с новой базой используя методы для работы с базой интерфейса. 

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

Такой штуки очень не хватает OpenCart

 

Логи

Очень понравился лог в IPS. Лог там имеет разные типы ошибок:

* @li LOG_ALERT  action must be taken immediately
   * @li LOG_CRIT   critical conditions
   * @li LOG_ERR    error conditions
   * @li LOG_WARNING  warning conditions
   * @li LOG_NOTICE normal, but significant, condition
   * @li LOG_INFO   informational message
   * @li LOG_DEBUG  debug-level message

Существует так же 3 медода для обработки ошибок:

   * Acceptable methods are "disk", "email" and "syslog".

И существует возможность каждый конкретный тип ошибки обрабатывать своим методом.

Напр., критические ошибки можно слать сразу на емейл, не очень критические - писать в лог на диск, еще какие-то в syslog

 

Дисковый лог также можно смотреть в админке.

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

 

Формы

Еще одна очень классная штука, которой очень сильно не хватает OpenCart это конструктор форм. Вот как формы создаются в IPS:

$form->add( new \IPS\Helpers\Form\Text( 'theme_template_export_author_name', $this->author_name, false ) );
$form->add( new \IPS\Helpers\Form\Text( 'theme_template_export_author_url' , $this->author_url, false ) );
$form->add( new \IPS\Helpers\Form\Text( 'theme_update_check' , $this->update_check, false ) );

После этого с болью вспоминаю сколько времени уходит на создание форм для OpenCart из чистого HTML и сколько времени всем разработчикам приходится тратить чтобы перевести всемодули на OpenCart 2.0 потому что создатели движка решили перейти на новый модный bootstrap.. А ведь если бы использовался конструктор форм то для переноса модулей на 2.0 вообще бы не нужно было переписывать код форм! 

 

Возможности расширения

Тут все очень классно, намного лучше, чем в OpenCart

1. Есть API. Об API OpenCart я писал недавно, но тут оно намного лучше:

  • есть документация по каждому методу, которая отображается в админке. Создается она автоматически из описания методов. Она достаточно полная - видно что делает этот метод, какие параметры получает, какие из них обязательные, что возвращает, какой объект с какими свойствами итд.
  • для каждого ключа можно указать IP с какого к нему можно обращаться или дать возможность подключаться с любого IP
  • для каждого ключа можно указать только конкретные методы, к которым этот ключ может обращаться
  • все запросы можно писать в лог, который показывает всю информацию об этом запросе, даже выходные данные

2. Хуки. Хуками в IPS называют возможность переназначить любой класс. Чем можно значительно расширить функционал не изменяя при этом код самого движка. Не стоить путать с хуками в напр. Drupal, там под хуками имеются ввиду События (Events)

3. События. Это возможность выполнять какой-то свой код после каких-то событий в системе. 

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

4. Модульная система. Неимоверно крутой штукой является то, что модули для движка можно создавать в админке! Для этого необходимо установить расширение для разработчиков, после этого в плагинах появляется кнопка "Создать" и можно прямо из админки создавать новый плагин, виджет, добавлять настройки, переопределять классы движка итд. После чего его можно скачать одним xml и поделиться с кем-то. 

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

 

То есть системы расширения намного превосходит OpenCart.

 

Заключение.

Этот материал не претендует на полноту, так как автор всего пару дней как познакомился с этим движком.  

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

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

Форумный движок IPS Community Suite

ips_logo.jpgНужно было установить на один сайт какой-то форумный движок. Обычно я таким не занимаюсь, но в данном случае отказаться возможности не было, поэтому пришлось немного окунуться в эту тему. Не пожалел, так как выучить что-то новое, разобраться как работает новая система мне всегда интересно. Надеюсь не только мне :)

 

 

 

Выбор движка

Долго выбирать не пришлось. Я когда-то, лет 5 тому назад был немного знаком, как пользователь, с движком IPS (тогда он назывался IPB), который на тот момент был достаточно популярным. Сейчас тоже вижу, что достаточно много форумов в рунете на нем работает. Также я узнал что где-то совсем недавно, всего пару месяцев тому назад вышла новая 4 версия, то есть движок развивается и совершенствуется. Поэтому решил остановиться именно на нем. 

 

Первые впечатления 

За последние 5 лет форумные движки очень сильно выросли. Если раньше это был обычный форумный движок, все возможности которого сводился в основном к созданию новых форумов и постов + системы администрирования. То сейчас это уже полноценная CMS в которой и функционал форума значительно увеличился, форум уже больше стал похож на социальную сеть, даже страница пользователя немного напоминает профиль в Facebook, даже упоминать кого-то в постах через @имя можно, после этого этот пользователь увидит сообщение, что его упомянули, в какой теме и сможет присоединится к беседе. 

Но это не все. Кроме собственно форума движок это:

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

 

Расширяемость 

Очень понравились возможности расширений этого движка. Новые модули можно создавать прямо в админке после чего скачать готовый модуль. 

В движке есть достаточно мощное API, очень классно сделано, намного лучше, чем API в OpenCart, о котором я недавно писал. 

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

 

В следующей статье более подробно опишу особенности кода этого движка. Он мне показался очень интересным..

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

API система OpenCart

8a5da52ed126447d359e70c05721a8aa.pngAPI сиcтема в OpenCart появилась со второй версии OpenCart. Она дает возможность обмениваться с сайтом на OpenCart данными на программном уровне.

 

 

 

Как это работает?

В админ панели (Меню->Настройки->Пользователи->API) есть возможность создавать новые API ключи с помощь которых мы можем обращаться к OpenCart.

 

Для каждого ключа мы можем указать:

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

Имея ключ можно из своего приложения обратиться к OpenCart.

 

Сначала авторизация 

Для того чтобы начать пользоваться API сначала нужно авторизироваться в магазине:

$apiKey = 'dzL3oaoqLHXCT3ZEyS4u3in3urBrUAD1kLagTFihrKN8D1XUQewGsxSOSWzibnWs4F414PPxmMuDD';
 
$curl = curl_init( 'http : // localhost/opencart/2101/index.php?route=api/login/' );
 
$post = array (
  'key' => $apiKey
);
 
curl_setopt_array( $curl, array(
  CURLOPT_RETURNTRANSFER=> TRUE,
  CURLOPT_POSTFIELDS      => $post
) );
 
$response = json_decode(curl_exec( $curl ));
curl_close($curl);
if (isset($response->token)) {
  $token = $response->token;
} else {
  // обработка ошибки
  // var_dump($response)
}

Теперь, получив от сервера токен, мы можем, используя этот токен,  обращаться дальше к этому серверу, слать другие запросы. Например, этот запрос добавляет новый товар в корзину:

$curl = curl_init( 'http :// localhost/opencart/2101/index.php?route=api/cart/add/&token=' . $token );
 
$post = array (
  'product_id' => 41
);
 
curl_setopt_array( $curl, array(
  CURLOPT_RETURNTRANSFER=> TRUE,
  CURLOPT_POSTFIELDS      => $post
) );
 
$response = json_decode(curl_exec( $curl ));
curl_close($curl);

 

Что можно сделать в OpenCart c помощью API?

К сожалению, пока не густо. На данный момент это только операции с корзиной. 
Мы можем:

  • положить товар(ы) в корзину
  • посмотреть содержимое
  • изменить валюту
  • добавить купоны
  • добавить методы доставки  и оплаты
  • добавить заказ 

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

 

Немного критики:

  • очень мало API методов, с помощью API пока можно разве что программно "купить" какой-то товар, больше ничего API "из коробки" сделать не позволяет
  • слабые возможности API - нету возможности назначить API ключ для какого-то конкретного метода, который будет по этому API доступен, нету нормального лога запросов, который бы показывал кто с какого IP по какому API что запрашивал и что получал в ответ итд.
  • для API ключа обязательно указывать IP, а что если IP динамический? возможности создать API ключ для всех IP нету. 
  • неудобные ошибки, которые возвращает сервер, иногда это строка иногда объект 'error' из свойством 'key', иногда 'warning', иногда другими, это значительно усложняет обработку ошибок

 

Но конечно же, все это не очень большие недостатки, очень хорошо, что функционал API появился в OpenCart, все остальное несложно дописать, например те же методы, при необходимости можно написать любой за 15 минут. И хочеться надеяться, что этот функционал и дальше будет развиваться в OpenCart.

 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

500error.pngОшибка 500 - это Internal Server Error или внутренняя ошибка сервера. Еще ее называют "белый экран", WSOD (white screen of death - белый экран смерти)

 

 

 

 

Наверняка многие с этим сталкивались - при загрузке страницы сайта (часто после установки какого-то модуля или внесения каких-то правок в код сайта) вы видите белый экран и текст, который уже добавляет браузер чтобы как-то вам помочь понять что происходит, напр.:

Server error 500
The website encountered an error while retrieving http://localhost/opencart/2200a1/. It may be down for maintenance or configured incorrectly.

Ошибка 500 чаще всего возникает тогда, тогда есть какая-то серьезная ошибка в коде сайта и интерпретатор не может этот код выполнить.
Эту ошибку бесполезно искать в логе OpenCart или других CMS.
Не поможет так же включение отображения ошибок на сайте:

display_errors = 1; 
error_reporting = E_ALL;

Что делать?

Вам нужен лог веб сервера.
Этот лог может находится:

  • в настройках вашего хостинга (или целый лог или опция настроек чтобы его включить)
  • в в корне сайта, например: site.com/error.log
  • в папке log выше сайта, напр:
  1. log/ 
  2. site.com/
  • в папке /var/log/apache2
  • в других местах на вашем хостинге в зависимости он настроек вебсервера

Если вы не знаете где у вас на хостинге лог вебсервере - спросите у вашего хостера или почитайте документацию по хостингу.

Логов есть 2

Вебсервер обычно ведет 2 лога:
1. Лог доступа. Файл site.com.access.log. Этот лог вам не нужен, в нем информация кто и когда обращался к вашему сайту.
2. Лог ошибок. Файл site.com.error.log. Этот лог вам нужен.

Нашли лог, что дальше?

Вам нужно открыть файл лога в любом текстовом редакторе и посмотреть что там в самом конце.
Там может быть что-то такое:

[Sat Jan 23 21:31:39.991122 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP Fatal error:  Class 'Controllerdesigntheme' not found in /var/www/html/opencart/2200a1/system/engine/action.php on line 36

Это значит что в файле /var/www/html/opencart/2200a1/system/engine/action.php
в строке 36 идет вызов класса Controllerdesigntheme, который не найден.
Имея эту информацию уже легко понять в чем проблема в каком файле, в какой строке и чего именно не хватает.

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

[Sat Jan 23 21:31:39.996914 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP Stack trace:
[Sat Jan 23 21:31:39.996951 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP   1. {main}() /var/www/html/opencart/2200a1/admin/index.php:0
[Sat Jan 23 21:31:39.996978 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP   2. require_once() /var/www/html/opencart/2200a1/admin/index.php: 22
[Sat Jan 23 21:31:39.996988 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP   3. Front->dispatch() /var/www/html/opencart/2200a1/system/framework.php:99
[Sat Jan 23 21:31:39.996995 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP   4. Front->execute() /var/www/html/opencart/2200a1/system/engine/front.php:29
[Sat Jan 23 21:31:39.997001 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP   5. Action->execute() /var/www/html/opencart/2200a1/system/engine/front.php:34
[Sat Jan 23 21:31:39.997007 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP   6. call_user_func_array() /var/www/html/opencart/2200a1/system/engine/action.php:44
[Sat Jan 23 21:31:39.997013 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP   7. ControllerStartupRouter->index() /var/www/html/opencart/2200a1/system/engine/action.php:44
[Sat Jan 23 21:31:39.997019 2016] [:error] [pid 29493] [client 127.0.0.1:36811] PHP   8. Action->execute() /var/www/html/opencart/2200a1/admin/controller/startup/router.php:26

Это также важно для понимания как работает OpenCart.

Лог есть, а ошибок там нету.

Бывает такая ситуация, правда не часто. Это значит что на вашем вебсервере не правильно настроен лог.
В этом случае вам нужно написать вашему хостеру и попросить его настроить.
Потому что если сайт показывает ошибку 500 то эта ошибка (за очень редкими исключениями) должна быть в логе. 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

OpenCart 2.2.0.0_a1 - что нового?

opencart.pngВышел OpenCart 2.2.0.0_a1.
Это альфа версия, она создана для тестов и исправления возможных ошибок, крайне не рекомендуется устанавливать ее на рабочий сайт.
В ней достаточно много изменений по сравнению с 2.1.0.2, поэтому решил присвятить этому отдельную статью.
Итак, что же нового?

 

 

Адмика

1. Настройки темы теперь находяться по адресу:

admin/index.php?route=theme/theme_default

что, конечно же, намного удобнее, чем искать их в настройках магазина

Плюс для каждой темы можно установить свои настройки

 

2. Новые методы оплаты (которые у нас все равно не используются): 

  • Lay-Buy
  • Cardinity
  • Eway

3. Новые модули:

  • Lay-Buy
  • sagepay
  •  

Структура

1. Появился composer:

composer.json

Я так понял, будет доступно 2 версии OpenCart - в одной будет composer и все библиотеки будут подгружаться через него. Для этой версии папку vendor стоит вынести выше каталога магазина.

 

2. index.php сильно уменьшился, он теперь занимает всего около 20 строк кода. 

// Version
define('VERSION', '2.2.0.0_a1');
 
// Configuration
if (is_file('config.php')) {
  require_once('config.php');
}
 
// Install
if (!defined('DIR_APPLICATION')) {
  header('Location: install/index.php');
  exit;
}
 
// Startup
require_once(DIR_SYSTEM . 'startup.php');
 
$application_config = 'catalog';
 
// Application
require_once(DIR_SYSTEM . 'framework.php');

Как видно, весь код из него добавили в в файл с гордым названием framework.php

Теперь OpenCart можно называть CMF :)

На самом деле это хорошо, так как нету дублирования кода, весь код и для каталога и для админки размещен в одном файле. 

 

3. Появилась папка 

/catalog/controller/startup

в которую перенесли все, что нужно загрузить при старте:

  • startup.php
  • session.php
  • seo_url.php
  • router.php 
  • maintenance.php
  • event.php
  • error.php

 

4. Появилась папка

/catalog/controller/event

с файлами:

  • theme.php
  • debug.php

 

5. Добавился /system/engine/proxy.php

6. Все что связано с корзиной перенесено в 

/system/library/cart:

  • weight.php
  • user.php
  • tax.php
  • length.php
  • customer.php
  • currency.php
  • cart.php
  • affiliate.php

7. Появилась папка 

/system/library/session

с файлами:

  • db.php
  • file.php

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

 

8. Локализации теперь размещены в 

language/en-gb

вместо

language/english

 

По коду

1. Поменялось создание ссылок

было:

'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')

стало:

'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true)

SSL теперь подключается в конструкторе библиотеки:

system/library/url.php

public function __construct($ssl = false) {

 

2. Поменялась генерация представлений

было:

$this->response->setOutput($this->load->view('analytics/google_analytics.tpl', $data));

стало:

$this->response->setOutput($this->load->view('analytics/google_analytics', $data));

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

Также рендеринг вынесен в адаптер:

upload/system/library/template.php

public function render($template) { 
	return $this->adaptor->render($template); 
}

название которого поменялось, теперь

/system/library/template/basic.php 

в 2.1 было php.php

Да, появились, правда немного раньше, неймспейсы:

namespace Template;

 

Использование адаптеров в шаблонах не совсем понятно, так как он все равно один и задается при создании класса шаблона жестко в тексте. 

$template = new Template('basic');

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

 

3. Локализация

Подключение файла языка меняют уже давно, возвращают назад, опять меняют.. наконец, хочется верить, этот процесс завершен, 

было:

$this->language->load('catalog/attribute_group');

стало:

$this->load->language('catalog/attribute_group');

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

$this->registry->get('event')->trigger('language/' . $route . '/before', $route); 

$this->registry->get('language')->load($route); 

$this->registry->get('event')->trigger('language/' . $route . '/after', $route);

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

было:

<img src="image/flags/<?php echo $language['image']; ?>" alt="<?php echo $language['name']; ?>" title="<?php echo$language['name']; ?>">

стало:

<img src="catalog/language/<?php echo $language['code']; ?>/<?php echo $language['code']; ?>.png" alt="<?php echo$language['name']; ?>" title=">

 

4. По Событиям (Events)

Они опять переписаны (уже наверное раз десятый с момента появления)

было:

if (version_compare(VERSION, '2.0.1', '>=')) {
  $this->load->model('extension/event');
  $this->model_extension_event->addEvent('openbay', 'post.admin.product.delete', 'extension/openbay/eventDeleteProduct');
  $this->model_extension_event->addEvent('openbay', 'post.admin.product.edit', 'extension/openbay/eventEditProduct');
} else {
  $this->load->model('tool/event');
  $this->model_tool_event->addEvent('openbay', 'post.product.delete', 'extension/openbay/eventDeleteProduct');
  $this->model_tool_event->addEvent('openbay', 'post.product.edit', 'extension/openbay/eventEditProduct');
}

стало:

$this->load->model('extension/event');
$this->model_extension_event->addEvent('openbay', 'admin/model/catalog/product/deleteProduct/before', 'extension/openbay/eventDeleteProduct');
$this->model_extension_event->addEvent('openbay', 'admin/model/catalog/product/editProduct/before', 'extension/openbay/eventEditProduct');

Удаление было:

if (version_compare(VERSION, '2.0.1', '>=')) { 
	$this->load->model('extension/event'); 
	$this->model_extension_event->deleteEvent('openbay'); 
} else { 
	$this->load->model('tool/event'); 
	$this->model_tool_event->deleteEvent('openbay'); 
}

стало:

$this->model_extension_event->deleteEvent('openbay');

 

Добавление тригеров, было

$this->event->trigger('pre.view.' . str_replace('/', '.', $template), $data);

стало

$result = $this->registry->get('event')->trigger('view/' . $route . '/before', array(&$route, &$data));

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

Остались только в 

  • system/engine/loader.php
  • catalog/model/openbay/etsy_order.php
  • catalog/model/openbay/ebay_openbay.php
  • catalog/controller/startup/router.php
  • admin/controller/startup/router.php

все!

 

5. Валидацию емейлов изменили

было:

if (utf8_strlen($email) > 0 && preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $email)) {

стало:

if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) {

 

6. переписан system/engine/action.php

теперь в нем используется класс Reflection (рефлексия или отражение), очень спорное решение, так как это API работает очень медленно, а вызывается оно для каждого контроллера. 

 

Заключение

Рефлексия, композер, неймспейсы.. это точно OpenCart? :)

На самом деле меня это не может не радовать, что OpenCart не стоит на месте и постоянно развивается. 

Плохо то, что делается это неимоверно медленно. Те же События можно было запустить еще со второй версии, уже 2.2, за это время их уже раз десять переписали, а теперь вообще половину тригеров выбросили, оставив только несколько в лоадере.. Такими темпами полноценную поддержку Событий мы получим лет через 5.. в то время когда сейчас практически все популярные движки их уже имеют. 

 

Стоит ли переходить с 2.1 на 2.2. 

Каких-то существенных улучшений я не увидел. Поменялась структура, что в будущем может только добавить проблем с совместимостью модулей, которые были написаны под старую структуру, добавились некоторые косметические улучшения в админке, которые ничего особо не меняют. Поэтому особого смысла срочно переходить на новую версию с 2.1.0.2 я не вижу. Хотя, конечно, желательно всегда иметь свежую версию движка.  

 

Замечание. В этой статье приведены не все изменения в версии 2.2, а только те, что мне удалось обнаружить при беглом изучении новой версии и те, которые я посчитал существенными. 

Если вы обнаружили другие изменения - пишите в комментариях. 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

Тестовый сайт

continuous-testing.jpgЯ уже немного писал об этом в своей статье "Нужно ли давать разработчику FTP доступ к вашему OpenCart сайту?" но все равно многие делают эту ошибку.
Я своим клиентам в последнее время настоятельно рекомендую создать копию сайта для тестирования.
Копию можно разместить на поддомене, например dev.myshop.com или test.myshop.com или на любом другом.

 

 

Что там должно быть?

  • Тот же движок, что и на рабочем сайте
  • Все модули, установленные на рабочем сайте
  • Та же тема
  • Копия базы данных (не полная)

 

Что не нужно переносить?

  • Информацию о заказах
  • Информацию о клиентах
  • Последние товары, цены статьи итд. 

 

Зачем?

Это крайне важно, учитывая специфику opencart, потому что:

  • В opencart нету нормальной системы расширений с зависимостями, когда если модуля что-то не устраивает, например версия другого модуля, то он просто не установится. Это есть в других движках, но этого нету в opencart.
  • В opencart вообще нету системы удаления модуля. Если модуль установлен, то его файлы раскидываются по всем папкам движка и удалить его потом достаточно проблематично. 
  • В opencart нету нормальной системы изменения логики без изменения кода самого движка, есть vqmod (ocmod), который является причиной огромного к-ва конфликтов.
  • В opencart низкий порог вхождения и очень много начинающих и низкоквалифицированных программистов, продающих свои модули. Эти модули не только могут не запуститься на вашем сайте но и принести вред сайту. 
  • Если такой не очень опытный разработчик получит полный доступ к сайту, то он может случайно что-то удалить или внести какие-то опасные для сайта изменения. Вместо этого вы предоставляете доступ для этого разработчика для копии сайта, где нет ни важных данных и не страшно если этот сайт и поломается.

 

Преимущества

Вы получите огромное количество преимуществ. 

  • Вы получите сайт, на котором перед установкой нового модуля или темы или какого-то скрипта можно все протестировать, отладить и только если вы на 100% уверены что все работает и нету никаких конфликтов, вы можете перенести этот код на рабочий сайт. Если же что-то пошло не так, то все изменения внесены в копию сайта и они никак не повлияют на рабочий сайт, вы можете или не спеша исправить конфликты или удалить новый код. 
  • Вы защищаете свой рабочий сайт от возможных вирусов
  • Если вам нужно предоставить доступ к своему сайту разработчику какого-то дополнения для устранения конфликтов (а бывает это достаточно часто) то вам не нужно давать доступ к основному сайту, потому что:
  1. разработчик может получить доступ к вашим данным (заказах, покупателях итд.) 
  2. разработчик может по неосторожности или неопытности поломать ваш сайт, удалив что-то нечаянно 
  3. разработчик может загрузить на ваш сайт какой-то вирус или троян
  • Это общеизвестная практика и используемая многими (абсолютно всеми большими) магазинами, когда все новое тестируется на тестовом сайте и только после этого переносится на рабочий сайт. 

 

Поэтому в реалиях OpenCart это просто "must have" практически для любого серьезного магазина. 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

Ремонт

remont.jpgИзвините, что давно не появлялся в блоге - у меня ремонт.
Нет, не ремонт сайта, не ремонт компьютера, а ремонт в квартире..

 

 

 

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

Так как раньше я этим никогда особо не занимался то приходится много времени тратить на то, что бы понять как правильно сделать. Спасибо интернету, а также youtube с кучей роликов, где все разжевано даже для таких чайников в строительстве как я :)

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

Но больше всего меня в этом ремонте радует то, что у меня наконец появится свой личный кабинет! Делаю его на балконе-лоджии, она утепленная, стоят пластиковые окна, провел туда батарею, чтобы зимой не замерзнуть, провел розетку и освещение и уже работаю тут. Еще нужна мебель - стол, стул, какой-то шкафчик для книг и бумаг, а так же жалюзи на окна, так как после обеда солнце так светит что работать тут почти не возможно... но это все со временем.  

Надеюсь, с появлением своего кабинета появится больше времени, так как никто мешать не будет  и можно будет больше времени приделать блогу. 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

opencart.png

Приходится иногда по 10 раз на день отвечать покупателям модуля на одни и те же вопросы, решил оформить в отдельную статью.

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

 

 

Итак, вы купили модуль, установили его и он не работает, что делать?

Прежде чем сразу писать автору модуля, сначала:

  1. Еще раз прочитайте инструкцию по установке, каждый шаг, очень внимательно, возможно вы что-то не так сделали. В инструкции каждый шаг важный, если он там есть значит его обязательно нужно сделать, а не надеяться что и так будет работать. 
  2. Попробуйте еще раз переписать все файлы, проверьте что все файлы нормально переписались и находятся в нужных папках и имеют права для чтения.  
  3. Попробуйте переустановить модуль в админке.
  4. Если модуль использует vqmod или ocmod - посмотрите vqmod лог на наличие ошибок, если они есть, значит скорее всего есть конфликт с другим модулем или сборкой или темой и эти конфликты нужно исправить. Как исправить конфликты vqmod?.
  5. Если модуль использует ionCube (когда вам нужно ввести ключ чтобы модуль работал) значит проверьте установлен ли у вас ionCube
  6. Если после установки вы видите ошибку 500 (белый экран смерти) читайте статью Ошибка 500 (Internal Server Error) - как исправить?
  7. Если есть возможность можете установить модуль на чистый движок и проверить будет ли модуль работать там. Если да, то причина не в модуле а где-то в вашем сайте, модулях, установленных на нем, нестандартной теме итд. 

 

Если ничего не помогло - пишите автору модуля.

Для этого:

  1. Если вы уже общались с автором модуля то НЕ создавайте новое письмо или сообщение, пишите в том же, так автору будет намного проще понять в чем проблема. 
  2. Укажите в письме кто вы (ник, с которого покупался модуля), название модуля с которым у вас проблемы, версию модуляверсию движка, что именно не работает -детально опишите проблему, с ссылками на эту проблему на сайте, скриншотами итд. 
  3. Не удаляйте модуль из системы, оставьте его установленным, так автор быстрее исправит ошибку потому что ему не придется дополнительно устанавливать модуль. 
  4. В 90% случаев вам придется предоставить доступ к вашему сайту (фтп и админке). Почему нужно давать доступ?
  5. - нужен именно FTP доступ, а не доступ на хостинг, тимвивер и другие доступы, которые трубуют установку доп. программ
  6. - доступ нужен в формате: Хост: ххх.ххх, логин: хххх, пароль: ххх А не логин и пароль без хоста итд. 
  7. - вариант "а может я вам просто нужные файлы на почту скину?" не подходит, нужен именно доступ к сайту.
  8. Не забывайте что у каждого разработчика модулей обычно больше десятка модулей и им каждый день приходится отвечать иногда на десятки писем, поэтому не требуйте ответа через пол часа, это наоборот может разозлить разработчика, обычно время ответа в пределах 1 рабочего дня считается нормой. Рабочий день это с 9 до 18 с понедельника по пятницу. И никак  не в час ночи с субботы на воскресенье.. 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

Модификации OCMOD в OpenCart 2.0

opencart-vqmod.jpgВ предыдущих статьях я уже писал об отличиях между OpenCart 1.5.6 и OpenCart 2.0, а также о том как перенести модуль с Opencart 1.5.6 на OpenCart 2.0. В этой статье речь пойдет об отличиях между vQmod и OCMOD.  

 

 

 

Где что используется?

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

OCMOD используется в OpenCart 2.0, он уже встроен в ядро, устанавливать его не нужно.

 

Установка модификаций

В OpenCart 2.0, модификации OCMOD устанавливается через админку, меню Установка расширений. На этой странице есть возможность загрузить как отдельный xml файл OCMOD так и архив с несколькими файлами: OCMOD, установка таблиц в базе данных, php код установки. 

После загрузки информация о новой модификации пишется в базу данных в таблицуmodification.

И новая модификация доступна в меню Модификации

 

Страница модификаций

Опишу принцип работы с этой страницей, так как многие действия там не очевидны:

  • после загрузки модуля он не будет работать автоматически, для того, чтобы он заработал нужно нажать кнопку Обновить. Эта кнопка изменяет кеш модификаций, создает новые измененные файлы движка, которые будут загружаться системой вместо оригинальных. 
  • кнопка Очистить удаляет весь кеш модификаций, все файлы 
  • кнопка Удалить удаляет данную модификацию из базы (но не чистит кеш и эта модификация продолжает работать!!!)

 

Критика такого подхода

  • все модификации хранятся в базе что делает процесс исправления конфликтов очень сложным, а они скорее всего будут. Потому что в отличии от vQmod, где модификации хранятся в файлах и их легко изменить, базу данных изменить сложнее и нежелательно, остается каждый раз изменять и заново загружать эту модификацию. А для исправления конфликта иногда этот процесс придется повторить несколько раз. Для обычного пользователя это значительно добавит головной боли.
  • весь процесс местами непонятен. Разобраться обычному пользователю будет сложно - что куда загружать, после чего чистить кеш итд. 
  • процесс установки усложняется, так как вместо одного действия (переписать файл в нужную папку вместе с другими файлами модуля) получается несколько действий: сначала переписать файлы модуля, потом зайти в админку, выбрать нужный файл, загрузить его, обновить кеш 
  • если пользователь загрузить файл, а потом его удалит или потеряет то достать этот файл из базы и восстановить будет сложно. 

 

Плюсы такого подхода

  • безусловно плюсом является то, что пользователь видит из админки все модификации и может из админки их временно отключить или удалить. 

 

Режим для разработчиков

В OpenCart 2.0.1.1. для упрощения этого немного неудобного подхода добавлен режим для разработчиков. В этом режиме не нужно каждый раз загружать файл OCMOD, достаточно его записать в папку /system и назвать *.ocmod.xml и система после обновления кеша внесет изменения из этого файла в кеш. Правда, такой файл не появится на странице Модификаций.  

 

Файловая структура

  • кеш модификаций хранится в папке /system/modification. Файлы кеша точно наследуют структуру OpenCart, что упрощает работу с ними, в отличии от vQmod где кеш называется как-то так: vq2-admin_model_catalog_category.php и если много файлов то найти нужный затруднительно
  • в папке /system также находится файл modification.xml это главный файл, который подключает модификации к движку, почему бы код подключения не внести в сам код движка, если OCMOD уже в движке?
  • в этой же паке /system можно добавлять свои *.ocmod.xml файлы в режиме разработки
  • в /system/logs/ocmod.log находится лог OCMOD, он же отображается в админке на странице с модификациями. Лог очень неудобный, понять в нем что-то, особенно обычному пользователю очень сложно.

 

Отличия файлов vQmod и OCMOD

Атрибуты:

  • вместо id тепреь атрибут code, он обязательный, без него модификация не установится.
  • vqmver не нужен 
  • name
  • author
  • version
  • link - можно свой сайт вписать, удобно

Все атрибуты не обязательны, но крайне желательны так как они отображаются на странице модификаций. Модификацию без названия система устанавливает но на странице модификаций она отображается пустой строкой, то есть это ошибка, так быть не должно, возможно в следующих версиях появится проверка. 

 

Другие отличия

1. Позиция указывается не в элементе search

<search position="replace">

а в элементе add

<add position="replace">


2. Название файла указывается не через свойство name

<file name="catalog/controller/product/search.php">

а через path

<file path="catalog/controller/product/search.php">

 

Читайте также: 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

opencart.pngТема сегодня поднималась на форуме - во многих популярных движках есть такая мега крутая штука как авто обновление. Прямо из админки можно обновить как любой модуль так и сам движок до более новой версии. 

 

 

 

 

Например, вы заходите в админку в раздел модулей и видите: "Модуль 1", версия 2.5.3 и сообщение "Доступна новая версия этого модуля 2.6.1, обновить?" И кнопочка "Обновить". Вы нажимаете эту заветную кнопку, система пару секунд что-то думает, страницы обновляется и у вас уже установлена версия 2.6.1 этого модуля. При этом не нужно идти на сайт движка, качать этот модуль, копировать его через FTP итд. Так же можно обновить и движок. 

Или у вас в админке есть раздел с каталогом доступных модулей из он-лайн каталога, вы можете найти оттуда любой нужный вам модуль и с помощью нажатия той же заветной кнопки установить его на свой магазин. Не понравился? Точно так же нажатием на 1 кнопку и удалить. 

 

Удобно? 

Да! Очень!

 

Ну так когда же подобный функционал появится в OpenCart?

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

 

Почему так?

Причин несколько:

1. OpenCart не умеет работать с версиями модуля, он он них вообще не видит. В других движках это есть и это позволяет движку:

  • понимать что есть новая версия
  • обрабатывать зависимости, например для "Модуля 1" версии 2.6.1 нужен "Модуль 2" версии не ниже 3.5, если этот "Модуль 2" не установлен или имеет версию ниже то "Модуль 1" просто не установится. Это позволяет избежать огромного количества конфликтов и ошибок.
  • создать механизм обновления модулей. Например в "Модуле 1" в версии 2.6.1 добавилась новая таблица в базе данных. В этом случае мы можем создать отдельную функцию, которая добавит эту таблицу в базу данных. Движок проверит версии модулей и обновлений к ним и автоматически все обновит. 
  • 2. в OpenCart нету нормальной системы расширения движка через Хуки или События, вместо этого есть костыль под названием vQmod который является причиной огромного количества конфликтов. И если систем автаматического обновления и появится, то после обновления каждого второго модуля придется вручную исправлять все эти конфликты

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

 

Так что, увы, за все нужно платить. Хотите простую систему, которую можно изучить за 2-3 дня? Получите мало функциональный движок, без множества крутых фич, доступных в других движках.

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

OpenCart vs Prestashop: заключение

opencart-vs-prestashop.jpgПо мотивам первых 2-х частей: "OpenCart vs Prestashop: установка и сравнение функционала" и "OpenCart vs Prestashop: погружение в код" подведу итог.

 

 

 

Замечания:

  1. Я только начинаю изучать PrestaShop, в отличии от OpenCart, который знаю достаточно хорошо, поэтому если где допустил ошибку или неточность - пишите в комментариях.
  2. В сравнении участвует OpenCart  2.0 и PrestaShop 1.6
     

Таблица сравнения:

  OpenCart PrestaShop

Установка
С установкой PrestaShop возникли небольшие проблемы, плюс установка PrestaShop занимает намного больше времени

X  

Документация

Документация для пользователей неплохая для 2-х движков: есть достаточно полные с скриншотами описания процесса установки, настройки, основных действий.
Но в PrestaShop это доступно в нескольких языках, а в OpenCart только в английском. 
В OpenCart нету документации по последней 2.0 версии
Документация для разработчиков лучше в PrestaShop, для OpenCart почти вообще нету ничего и создании модулей, в PrestaShop есть примеры, описание, но далеко не полное. 
Но в PrestaShop документация слабо структурирована.
  X

Требования к системе
PrestaShop более тяжелая система, для нее нужно больше ресурсов. 

X  

Скорость работы
Скорость работы намного больше в OpenCart. На локальном сервере главная OpenCart из коробки грузится 0.4 сек., PrestaShop 0.7 сек., то есть OpenCart почти в 2 раза быстрее. 

X  
Функционал из коробки
В PrestaShop из коробки намного боше возможностей, чем в OpenCart
  X
Модули количество
Для OpenCart модулей намного больше, около 15 тысяч, для PrestaShop 2688 (24 модуля на страницу, 112 страниц), то есть в OpenCart модулей в 5.5 раза больше
X  
Качество модулей
Могу предположить, что для PrestaShop модули в среднем лучше (конечно, есть достаточно много хороших модулей и для OpenCart и уверен есть и плохие для PrestaShop я говорю о 
среднем качестве) по нескольким причинам:
  • PrestaShop движок более сложный, для создание модулей для PrestaShop нужно больше квалификации программистов, в то врем как модули для OpenCart может писать даже начинающий программист и очень много модулей просто ужасного качества.
  • в PrestaShop лучше реализована система расширений через хуки и переопределение классов, соответственно тут меньше конфликтов, в то время как в OpenCart за это отвечает vqmod, который напрямую изменяет файлы движка и создает огромное количество конфликтов.
  • в PrestaShop более правильно организовано создание модулей с проверкой версий движка, зависимостями, обновлением модуля итд.
  • в PrestaShop сторонние модули получают статус без доверия, для того, чтобы модуль попал в доверительный список, его нужно загрузить на оф. сайт.
  X
Простота создания модулей
Модули для PrestaShop создавать намного сложнее, это требует намного больше и опыта программирования и времени, необходимого для обучения, так как сам PrestaShop намного сложнее OpenCart.
X  
Цена модулей
Так как модули для OpenCart создавать проще то и цена из меньше и количество больше. Модули для PrestaShop стоят где-то в 2-3 раза дороже аналогичных модулей для OpenCart
X  
Простота системы
OpenCart намного проще PrestaShop. Время на обучение будет в разы меньше чем для PrestaShop. 
X  

 

Заключение:

  • Если вы создаете свой первый магазин и вам достаточно функционала из коробки - берите PrestaShop там из коробки функционала значительно больше.
  • Если вы создаете свой первый магазин и планируете вносить в него много изменений - берите OpenCart он намного проще в освоении. 
  • Если вы создаете магазин для которого критична скорость работы, например каталог авто запчастей с сотнями тысяч товаров, берите OpenCart он намного быстрее.
  • Если у вас ограниченный бюджет - берите OpenCart, модули для него намного дешевле.
  • Если вы программист с опытом и вам нужна более расширяемая система - берите PrestaShop, там система расширений реализована лучше. 

Но, конечно, все это рекомендации, и один и другой движок хорош по своему и при наличии опыта хороший магазин можно сделать и на OpenCart и на PrestaShop. 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

opencart-vs-prestashop.jpgВ этой статье пойдет речь об отличии PrestaShop от OpenCart на уровне кода.

 

 

 

 

Замечания:

  1. Я только начинаю изучать PrestaShop, в отличии от OpenCart, который знаю достаточно хорошо, поэтому если где допустил ошибку или неточность - пишите в комментариях.
  2. Описывается функционал из коробки, без дополнительных модулей.
  3. В сравнении участвует OpenCart  2.0 и PrestaShop 1.6

 

MVC в PrestaShop

MVC реализовано намного хуже, чем в OpenCart, сходу и не скажешь что оно там есть, но документация говорит, что есть, поверим :)

На самом деле:

  • нет четкой структуры, например папка controllers где бы были собраны все контроллеры, папка Models где бы были собраны все модели итд. вместо этого все файлы раскиданы по разным папкам, это существенно усложняет поиск нужного файла.
  • часто можно встретить код, где вперемешку php, SQL запросы и куски html кода, при чем это в самом движке, который должен был бы быть образцом для подражания.

 

Шаблонизатор PrestaShop

PrestaShop использует Smarty шаблонизатор, в отличии от OpenCart, который использует php код в качестве шаблонизатора. 

Мне подход OpenCart нравится больше, потому что: 

  • php это и так язык, который первоначально создавался как шаблонизазатор, потом развился в что-то большее
  • Smarty это дополнительный синтаксис, который нужно изучать 
  • не такая гибкость, как в php
  • это увеличение времени загрузки страницы за счет дополнительного слоя.
  • Но возможно для дизайнеров более удобным покажется Smarty, так как не нужно углубляться в php код.

 

Расширяемость PrestaShop

Тут PrestaShop значительно превосходит OpenCart, потому что:

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

 

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

 

Стандарты кодирования PrestaShop

В PrestaShop они более строгие. Единственно с чем не согласен, так это с тем, что не нужны фигурные скобки в условиях с 1 строкой:

if ($condition) 
  return true;
return false;

Как по мне, вообще не удобно и может привести к ошибкам. 

 

Модули в PrestaShop

  • модуль можно унаследовать от другого модуля, например свой платежный модуль от PaymentModule
  • все файлы модуля находятся в 1 папке, что намного удобнее чем как в OpenCart они раскиданы по всем папкам.
  • в настройках модуля можно указывать минимальную версию движка с которой этот модуль работает, этого нету в OpenCart
  • зависимости с другими модулями, нету в OpenCart
  • версию модуля, тоже нету в OpenCart
  • проверка качества модуля. Если создать свой модуль и установить то PrestaShop напишет что модуль "Untrusted" то есть которому нельзя доверять, чтобы получить модуль, которому можно доверять, нужно загрузить его в магазин дополнений (где как я понимаю происходит какая-то проверка качества этого модуля?)
  • много статичных методов классов переменных классов, практически все на них построено:
Tools::isSubmit('submit'.$this->name);
Validate::isGenericName($my_module_name);
Configuration::updateValue('MYMODULE_NAME', $my_module_name);
AdminController::$currentIndex;
Shop::isFeatureActive();
Db::getInstance()->execute();
Context::getContext();
Hook::exec('actionModuleInstallBefore', array('object' => $this));
Cache::clean('Module::isInstalled'.$this->name);
  • форм билдер, отличная штука, которой так не хватает в OpenCart, не нужно каждую форму создавать из голого html, вместо этого создается массив со всеми элементами и передается в помощник, который создает всю форму:
$helper->generateForm($fields_form);
  • есть автообновление модулей  
  • есть свой валидатор кода
  • есть свой баг трекер для модулей

 

Ну и на закуску метод валидации, который случайно нашел в коде :)

public static function isAnything() { 
	return true; 
}

 

Заключение 

  • система расширений PrestaShop развита лучше, чем в OpenCart.
  • к-во различных методов для работы в PrestaShop наверное раз в 10 больше, чем в OpenCart. Например класс Tools имеет штук 150 разных статичных методов, класс Module от которого наследуются все модули штук 70 методов итд. практически в каждом классе в разы и даже в десятки раз больше методов чем в аналогичных классах OpenCart. 
  • поэтому могу сказать, что PrestaShop в несколько раз сложнее OpenCart. 
  • наверное поэтому и цены на модули в разы больше.

 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

speed.jpgВ этой статье будет сравнение 3-х модулей страничного кеширования для OpenCart. 

 

 

 

 

Что значит страничное кеширование

Страничное кеширование (page cache) это вид кеширования, при котором в кеш попадает целая страница. И при последующих обращениях эта же страница отдается пользователю. Это позволяет увеличить скорость генерации страницы в десятки, сотни и даже тысячи раз! Потому что при генерации страницы не происходит обращений к базе, не загружаются дополнительные классы и библиотеки движка и не производятся сложные вычисления, а готовая страница отдается пользователю  

В сравнении участвуют:

  1. BOOST
  2. Page Cache
  3. Page Speed
  BOOST Page cache Page Speed
Стоимость 499р 80$ 59.99$
Скорость загрузки страниц 60-150мс 70-270мс 700-800мс
Кеш страниц с не пустой корзиной Да Нет Нет

Кеш страниц для зарегистрированных 

пользователей

Да Нет Нет
Возможность загрузки модулей через AJAX Да Нет Нет
Дополнительные настройки Да Нет Да 
но немного

 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 

sv2109

opencart-vs-prestashop.jpgВот уже несколько лет я работаю с OpenCart. За это время выучил эту систему почти идеально. В рамках своего учебного эксперимента "15 минут" решил посмотреть также и на другие системы, например PrestaShop. В этой статье речь пойдет о функционале этих 2-х систем из коробки.

 

 

 

Замечания:

  • Я достаточно хорошо знаю OpenCart в отличии от PrestaShop и весь функционал PrestaShop оцениваю по его наличию его в админке. Я не могу оценить его качество, так как  мало с ним работал. 
  • В данной статье описывается функционал, который есть в PrestaShop и нету в OpenCart. То, что есть в OpenCart и нету в PrestaShop будет описано в другой статье. 
  • Описывается функционал из коробки, без дополнительных модулей.
  • В сравнении участвует OpenCart 1.5.6.4 (версия 2.0 мало чем по функционалу отличается) и PrestaShop 1.6

 

Установка PrestaShop:

  • с одной стороны постоянно даются ссылки на документации и даже телефон! 
  • с другой стороны ощутил сложность на 2 шаге, там где нужно дать папкам права на запись, оказывается права на запись нужно дать всем подпапки этих папок, включая все подпаки папки modules, в которой несколько десятков подпапок разной степени вложенности, пришлось воспользоваться командой: 
  • find ./ -type d -exec chmod 777 {} +
  • время установки - очень долго, на локальном компьютере магазин устанавливался несколько минут! В OpenCart это занимает секунд 10.

 

Фронтенд PrestaShop:

    • быстрый просмотр товара
    • стикеры
    • намного лучше сделаны опции - смена изображения товара при смене опции, в категории видны опции и по клику происходит переход на товар с этой опцией, наличие товара каждой опции итд.
    • +/- для цены
    • поиск с подсказками в папке сайта, правда достаточно примитивный - отображается только название товара, ни картинки ни цены ни описания итд.
    • дефолтная тема лучше чем OpenCart, но это чисто субъективно, возможно мне дефолтная тема OpenCart приелась.
    • фильтр намного функциональнее
    • рассылка для гостей, в OpenCart вроде только после регистрации
    • магазины на карте, удобно, на гугл карте можно отмечать свои магазины.
    • после нажатии на Купить открывается корзина в попап окне с возможностью перейти к оформлению или продолжить покупку.
    • покупка более удобная, можно зарегистрироваться сразу при покупке


    •  

    Бэкенд Prestashop:

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

    Из минусов:

    • ОЧЕНЬ медленно работает админка по сравнения с OpenCart, в разы и даже десятки раз, иногда приходится ждать больше 10 секунд пока откроется какая-то страница.

     

    КАТЕГОРИЯ:

    Товар:

    • удобный фильтр по категории
    • изменение наличия товара 1 кликом
    • наборы товаров
    • видимость товара: в каталоге, в поиске, везде
    • товар доступный для продажи, показывать цену, онлайн-товар(?)
    • состояния товара: новый, бу
    • СЕО: автогенерация ссылки товара
    • выбор поставщика для конкретного товара
    • комбинации опций, например: цвет синий и размер S, для комбинации свои настройки: цена, вес, мин. к-во, картинки, баркод
    • заголовки для картинок мультиязычные
    • поставщики

    Категория:

    • большое изображение и маленькое для категории
    • доступ для групп пользователей, можно выбрать каким пользователям есть доступ к этой категории

    Мониторинг:

    • список товаров без атрибутов, пустых категорий, отключенных товаров итд.

    Атрибуты (в OpenCart опции):

    • можно указать свой URL для атрибута
    • мета тайтл
    • цвет или картинку
    • группу

    Свойства (атрибуты в OpenCart):

    • нету групп
    • свой URL 
    • мета тайтл
    • индексировать или нет 

    Поставщики:

    • можно указать доп. информацию для каждого: адрес, логотип, телефон итд.

    Теги: 

    • можно отдельно создать тег и присвоить его нескольким товарам 

     

    ЗАКАЗЫ:

    • более удобный просмотр заказа, с картой 
    • настройки возвращения товаров
    • печать бланков
    • статусы: картинки для статус, возможность указать различные статусы для возврата, доставки, инвойса, шаблоны писем для каждого статуса

     

    ПОЛЬЗОВАТЕЛИ:

    Группы пользователей:

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

    Корзина:

    • брошенная корзина
    • статистика прибыли с 1 посетителя за месяц, конверсия итд.

    Доставка:

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

     

    ЛОКАЛИЗАЦИЯ:

    • можно переводить интерфейс на любой язык из админки

     

    МОДУЛИ:

    • возможнось подключиться к аккаунту магазина расширений и загружать расширения из админки, есть каталог модулей в админке.
    • разделы для расширений для фильтра и быстрого поиска
    • очень много модулей из коробки
    • очень много функционала движка из коробки сделано через модули, даже корзина на сайте сделана через модуль, это значит что система модулей более развита чем в OpenCart
    • модуль можно отключить для планшета, мобильного телефона или монитора.
    • можно скинуть настройки до начальных
    • можно удалить модуль из админки, а не только отключить
    • очень! много позиций для модулей, больше 50.

     

    НАСТРОЙКИ:

    • очень много настроек по всему: товар, каталог, основные настройки, заказ итд. 
    • в темах больше всевозможных настроек
    • в SEO URL есть схемы, шаблоны для ссылок
    • есть простая CMS с категориями, только почему-то она в настройках
    • шаблоны для картинок
    • очень неплохой поиск с индексацией, можно указать слова заменители, слова, которые не учитываются в поиске, вес итд.
    • в режиме разработки можно указать IP с которого будет доступен сайт.
    • геолокация

     

    ДОП. ПАРАМЕТРЫ:

    • сжатие css, javascript, html 
    • можно отключить некоторые модули в режиме отладки, а также наследование
    • SQL менеджер в админке
    • лог активности

     

    АДМИНИСТРИРОВАНИЕ:

    • автоматическое обновление модулей
    • ссылки быстрого доступа в админке
    • права доступа намного шире, чем в оперкарте, например для атрибутов товара можно установить право на Просмотр, Добавить, Редактировать или Удалить для каждой группы пользователей. 
    • админ меню можно создавать пункты из админки
    • расширенная статистика всего: пользователи онлайн, статистика каталога, лучшие категории итд. 

    ---

    Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

     

    sv2109

    15 минут

    15.jpgВ современном мире жизненно необходимо постоянно обучаться и изучать что-то новое, иначе смерть: профессиональная, личностная, духовная и как следствие может даже  и физическая.

     

     

     

    Особенно это касается сферы информационных технологий, где постоянно появляется что-то новое:

    • новые языки программирования
    • новые фреймворки
    • новые плагины 
    • новые CMS 
    • новые модули к этим CMS
    • новые технологии
    • итд. 

     

    Плюс все выше перечисленное постоянно совершенствуется. Если вы 3 года назад неплохо освоили Drupal 6, например, то сейчас уже на подходе восьмая версия, которая почти полностью отличается от шестой. И ваши знания шестой версии уже никому не нужны и вы останетесь без работы, если не выучите что-то новое и востребованное сейчас. Тоже самое можно сказать о любых знаниях, в мире интернет технологий все очень быстро устаревает. 

     

    Как это исправить?

    Нужно постоянно изучать что-то новое. Очень важно: это обучение должно войти в привычку, которая заставит делать это регулярно каждый день. Тут как в спорте: лучше каждый день бегать по пол часа, чем 6 дней пить пиво а на седьмой пробежать 5 км и очутится в больнице. 

     

    Сколько времени тратить на обучение?

    Я предлагаю 15 минут, минимум.

     

    Не мало ли?

    Нет, не мало, потому что:

    • за 15 минут на самом деле, если делать это регулярно можно сделать достаточно много: прочитать 2-3 статьи на хабре или на каком-то тематическом блоге, составить список ресурсов с которых можно черпать информацию, установить новый движок для изучения, изучить его возможности итд. Если каждый день 15 минут изучать например JavaScript то через пару месяцев вы сможете поднять свои навыки в этом языке на совершенно новый уровень. 
    • очень важно чтобы цифра была реальная, которую можно выделять каждый день.
    • 15 минут может найти абсолютно каждый абсолютно всегда, если кто-то говорит что у него нету 15 минут то ему это просто не нужно.
    • психологически намного проще заставить себя сделать какую-то работу, которая вам возможно не очень нравиться, если понимать, что это всего на 15 минут, а не на 2 часа.
    • это минимум, если есть желание и время то можно в какой-то день выделить и пол часа и час и даже больше.

     

    С чего начать?

    Да с чего угодно, чего вы не знаете или знаете слабо. Я например в качестве эксперимента буду изучать PrestaShop, потому что OpenCart уже знаю почти идеально, а с PrestaShop вообще не знаком. Хотя движок тоже очень популярный, даже немного более популярный чем OpenCart если смотреть к-во установок. 

    ---

    Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

     

    sv2109

    Условия оказания поддержки.

    support.pngРешил написать этот пост чтобы предотвратить возможные будущие конфликты с покупателями модулей.

     

     

     

     

    В бесплатную поддержку входит:

    1. Консультации (ответы на вопросы) перед покупкой модуля. Если у вам есть какие-то вопросы по модулю - лучше задайте их ДО покупки.
    2. Консультации (ответы на вопросы) по установке и настройке модуля после его покупки.

     

    В бесплатную поддержку не входит:

    1. Исправление всевозможных конфликтов с другими сторонними модулями или не стандартной темой. 
    2. Установка модуля на сервер.
    3. Установка модуля на версию OpenCart или сборку, которая не указана в описании модуля.
    4. Бесплатная доработка функционала модуля. В модуле должен работать весь заявленный в описании функционал но не больше.

     

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

    ---

    Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

     

    sv2109

    Слепой метод печати.

    keyboard.pngРешил освоить слепой метод печати.

     

     

     

     

    Зачем?

    Думаю понятно, иногда приходится проводить за компьютером по 16 часов в сутки постоянно что-то печатая - переписка с клиентами, общение на форумах, соц. сетях, блогах итд. Слепой метод позволяет существенно увеличить скорость печати что в свою очередь существенно увеличит производительность труда и сэкономит много времени. Плюс это уменьшит нагрузку на глаза, которым не придется постоянно переключаться с монитора на клавиатуру.

    Как?

    Когда-то давно, лет 5-7 назад я уже пробовал освоить этот метод с помощью программы "Соло на клавиатуре". Но так и не прошел ее, закинув на середине. Уже точно не помню почему, помню только что там были достаточно жесткие правила и я не мог пройти так как допускал много ошибок. Плюс программа платная и у меня так и не получилось запустить ее под Линукс. Поэтому пришлось искать другой путь. Благо в интерне полно бесплатных сайтов для этого.

    Вот некоторый по которым я занимаюсь сейчас:

    • http://vse10.ru/ - интересный сайт но мало упражнений. Быстро прошел начальные уроки, дошел до цифр, которые решил пока не трогать.
    • http://www.typingstudy.com/ - очень много упражнений, занимаюсь сейчас.
    • http://klava.org - интересный сайт, кроме обычных алфавитов есть языки программирования, английский частотный словарь итд.

     

    Пару слов о схеме расположения пальцев.

    Я конечно никакой не специалист но стандартная схема где клавиша "Я" нажимается мизинцем, "Ч" безымянным, а "С" большим пальцем мне показалась крайне неудобной. И не только мне.  Поэтому я выбрал немного другую, по моему мнению более удобную схему, где "Я" нажимается безымянным, "Ч" большим, а "С" указательным пальцем. См. фото выше.

    Да, весь этот пост я набрал слепым методом, скорость пока ужасная - около 100 символов в минуту, а также огромное количество ошибок, но на клавиатуру уже можно не смотреть :)

    ---

    Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

     

    • Актуальные темы на форуме

    • Последние сообщения

      • да, второе письмо, которое и раньше шло, скудное - оно не нужно, я его удаляю. Но ещё лучше было бы, если б оно и не шло совсем. Какую строчку и на что заменить?   - это как раз оно?
      • Это делается в файле /catalog/model/checkout/order.php попробуйте перед
        // Admin Alert Mail добавить $mail->setTo($this->config->get('config_email'));
        $mail->send();

        В классе $mail содержится письмо для клиента, поидее этот код отправит такое же администратору

        Но потом по коду там отправляется письмо администратору, его лучше закомментировать, если нужно получать 2 письма об одном заказе разных
        или перед  $this->event->trigger('post.order.history.add', $order_id); заменить $mail->send();
         на //$mail->send();
              
      • В какой файл в какой строке что именно надо добавить - текст какой, чтобы письмо, сформированное для клиента, всегда высылалось и на него email, и на Kest@mail.ru? Куда это вписать? Пусть мне летит родное уведомление движка опенкарт, оно очень неинформативное, скудное, ладно. Но чтобы дубль письма клиента тоже летел мне. Может, добавочный email - это проще, чем неск. строк вписывать, расширяя то, что летит в родном уведомлении магазину?   Очень бы хотелось получать то же самое, что приходит и клиенту.