Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%

<<< Tortoise HG — клиент для Mercurial || Формат YAML и его parser на PHP >>>

Moguta.CMS – вторая версия

06.11.2012
Moguta.CMS – вторая версияи

Здравствуйте, уважаемые читатели блога LifeExample, хочу поделиться известием, радостным для меня и некоторой группы читателей. Прошло много времени с публикации последней статьи посвященной разработке собственного движка для интернет магазина, вероятно, многие уже и не надеялись увидеть продолжение, но спешу сообщить: "Выпущена вторая версия Moguta.CMS"

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

Скачать новую версию ( Скачали: 2028 чел. ) 

История о командном составе разрабочиков

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

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

Хочу выразить большую благодарность программисту Дмитрию и дизайнеру Игорю, за их труды.

На протяжении всего сентября мы отлаживали процессы совместной разработки проекта.

  1. Разрабатывали единый стандарт форматирования кода;
  2. Тестировали системы контроля версий SVN и Mercirial, остановив свой выбор на последней.
  3. Пытались организовать планирование задач с помощью такс менеджера Сollabtive, в итоге отказавшись от подобной системы контроля работ.
  4. Вселили жизнь в форум проекта. Правда пока ее активность наблюдается только в скрытом разделе разработчиков.

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

Что нового в Moguta.CMS

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

Вот список запланированных изменений:

  1. Переписать движок системы (улучшить систему защиты, навести порядок в файловой структуре и логике работы движка).
  2. Разработать инсталлятор системы, позволяющий в автоматическом режиме настраивать параметры доступа к БД, и пароль администратора.
  3. Добавить механизм обновления версий системы, из панели администрирования.
  4. Переписать механизм добавления и подключения плагинов.
  5. Исправить баги описанные пользователями MOGUTA.CMS [v.1.0.0 ].
  6. Составлен мануал по использованию системы.

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

А еще, был реализован новый внешний вид шаблона, для сайта.

дефолтный шаблон moguta.cms

Теперь при использовании CMS вам нет необходимости лезть в файлы системы и редактировать параметры для подключения к базе. Также не надо заморачиваться с импортом дампа базы.

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

инсталятор могута.jpg

Результатом своей работы, инсталлятор создаст конфигурационный файл config.ini в корне сайта, и учетную запись администратора для доступа в администраторский раздел управления сайтом.

Попасть в административный раздел по-прежнему можно двумя путями, введя в адресной строке http://[имя сайта]/mg-admin, или авторизовавшись в разделе http://[имя сайта]/enter. Кстати теперь по многочисленным просьбам, реализована регистрация пользователей, и вход в личный кабинет.

Сам кабинет пока не функционирует, но обязательно будет доделан в следующей версии.

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

  • Обновиться до последней версии CMS;
  • Приостановить работу сайта для посетителей.
Обновление Moguta.CMS.jpg

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

Изменения в логике работы движка Moguta.CMS

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

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

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

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

Много времени было потрачено на разработку защиты системы от таких способов атак как:

  1. Прямой доступ к системным файлам панели администрирования;
  2. Защита аяксовых спиртов от несанкционированных обращений;
  3. Скрытие показа содержимого директории при обращении через адресную строку, запретом в .htaccess;
  4. Защита от XSS атак.

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

Собственно, исходя из целей защиты, пришлось переписать большинство компонентов движка. Список серьезных изменений:

  • Во-первых, все скрипты теперь обернуты классами, что исключает вред системе при прямом обращении к ним;
  • Во вторых админка теперь не является обособленным элементом, как это было раньше, ломая всю MVC логику;
  • Маршрутизатор контролеров оптимизирован, и больше не является свалкой тяжело читаемого кода, разнесённого по разным файлам, вся маршрутизация разбита на несколько функций и вполне понятна;
  • Автолоадер классов облегчен, и избавлен от обязанностей маршрутизатора;
  • Созданы основополагающие статичные библиотеки доступные из любой точки системы: MG, DB, USER, URL.

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

DB – этот класс был введен еще в предыдущих версиях, и предназначен для работы с БД, в нем реализована защита от SQL инъекций. Пока он не был изменен, но в планах есть перевод его работы на PDO.

URL – работает с ссылками, а именно предоставляет удобные функции для работы маршрутизатора, также хранит в своем реестре все полученные пользовательские данные пропущенные через XSS фильтр. Обращаться к POST и GET параметрам рекомендуется через функцию URL::post(‘nameParam’) и URL::get(‘nameParam’), соответственно.

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

  • Также в целях защиты, был модернизирован файл .htaccess, теперь абсолютно все запросы пользователей, включая направленные на несуществующие файлы, перенаправляются на index.php, который в свою очередь отдает их на обработку маршрутизатора.

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

Схема работы движка для интернет магазина на php

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

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

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

Всем, кто хочет присоединиться к команде разработчиков, просьба писать об этом на мой email, указанный в разделе "Контакты".

Скачать новую версию можно на сайте moguta.ru

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Нравится

Комментарии

  • Воланд

    При отправке заказа из корзины: Parse error: syntax error, unexpected ‘.’ in /home/user/data/www/mainsite.com.ua/mg-core/models/order.php on line 185

  • Воланд

    При создании в админке товаров с одинаковым названием формируется идентичный ЧПУ урл, что есть не правильно. Должна быть проверка на существование URL, возможность его ручного исправления, либо при формировании урла автоматического добавления, напрмер id товара суффиксом к свормированному урлу.

  • Спасибо за замечания. Исправил баг, и сделал проверку на дублирование url, теперь при дублировании будет подставляться _id товара.

  • Перезалил архив.

  • Воланд

    В .htaccess нужно заменить

    1
    RewriteCond %{REQUEST_URI} \.(inc|php)$

    на

    1
    RewriteCond %{REQUEST_URI} \.(ini|php)$
    • Отличное замечание. Спасибо.
      Поправил, обновил архив.

  • Дима

    Очень классно!!!
    Большое спасибо..

    Можно ли от вас в скайпе получить пару хороших советов?

    • Здравствуйте, спасибо. Советы получить можно, только не по скайпу а по e-mail.

  • valera

    При заливки своей базы(не всей), и при входе в меню «Каталог», кол-во страниц стало 260, номера страниц ушли далеко вправо. Надо будет пользователю крутить долго и упорно скролинг вправо.
    _http://belmobilines.by/cart/mag.htm

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

    • Да, действительно пока сворачивание промежуточных страниц в навигации не сделано. Как руки дойдут сделаем.
      Фильтры убрали т.к. этот модуль был сырым и не продуманным. Тоже со временем допишем.
      Пока в приоритетных задачах, разработка системы плагинов. В последствии вероятнее всего многие компоненты, такие как навигация, фильтры, поиск и тд. Будут реализованы плагинами.

  • valera

    Ок. Для пользователя без поиска никак 🙂

  • Леша

    Почитал ваш курс уроков по интернет магазину, очень интересно, спасибо за старания =) скачал последнюю версию, первое что бросилось в глаза невозможность запуска из подкаталога, например есть сайт test.ru и хочется что б магазин запускался из test.ru/shop а второе в редакторе каталогов нет защиты от дурака, можно родителем сделать тот же самый раздел, который хочется отредактировать и раздел категории пропадает и в разделе Система пишет Текущая версия системы v1.2.0 предлагает до 2ой версии обновиться, но я вроде скачал последнюю =)

    • >Текущая версия системы v1.2.0
      баг, на самом деле версия последняя.
      >можно родителем сделать тот же самый раздел, который хочется отредактировать
      баг
      >что б магазин запускался из test.ru/shop
      Такого не планируется

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

  • Яков

    Почему-то когда меняю «Количество выводимых продуктов на странице каталога» на больше 1го, ничего не меняется, на страницах так и остается по одному товару на каждой странице.
    А баг с подкатегориями не исправили?

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

      Продолжайте тестировать и выкладывать замеченные недочеты. В течении пары недель мелочи будут исправлены и выпущена версия v 2.1.0

  • Яков

    После обновления версии перестал заходить под админом

  • Яков

    При оформлении заказа на мыло заказчика приходит письмо от мыла на который зарегистрирован хостинг (он уже давно не используется…) Кроме того вот что приходит на мыло заказчику http://athletics-shop.ru/123.jpg

  • Александр

    При попытке установить на WAMP

    Warning: require_once(mg-start.php) [function.require-once]: failed to open stream: No such file or directory in D:\wamp\www\moguta\index.php on line 35

    Fatal error: require_once() [function.require]: Failed opening required ‘mg-start.php’ (include_path=’.;D:/wamp/www//mg-core/;D:/wamp/www//mg-core/lib/’) in D:\wamp\www\moguta\index.php on line 35

    • Попробуйте использовать denwer

  • Омар

    Марк, и на денвере также ошибка что и у Александра.. что делать??

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

  • Версия v2.0.1 — исправлены многочисленные баги.

    Скачать можно на сайте moguta.ru

    Скачать обновление на рабочую систему можно прямо из панели администрирования CMS.

    Список изменений:

    1. Исправлен файл контролера заказов;
    2. Исключено дублирование URL адресов для товаров;
    3. Закрыт доступ к файлу config.ini;
    4. Поправлен вывод информация о текущей версии;
    5. Вложенную категорию теперь нельзя назначить родительской, для одной из категорий верхнего уровня, а также для самой себя;
    6. Корзина интернет магазина теперь не пытается выводить удаленные товары;
    7. При удалении родительской категории, также удаляются и все вложенные в нее;
    8. Поправлен вывод заданного количества товаров ;
    9. При смене пользователя корзина обнуляется;
    10. При установке системы теперь создается валидная таблица user;
    11. Исправлен баг с отображением вложенных категорий, из меню сайдбара;
    12. Активирована система пользовательских шаблонов.

    На официальном сайте теперь можно посмотреть историю версий.

  • valera

    Установим, проверим. Спасибо.

  • Александр

    «Странная у вас с Александром ситуация. Не должно возникать таких проблем при корректной установке, вероятнее всего не правильно настроен сервер.»

    При чем тут сервер?
    Первая ошибка отсутствует подключаемый файл — mg-start.php
    Так и есть — не правильно указан путь.
    Файл находится не в корне сайта, а в каталоге — mg-core.

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

    Новую версию протестирую отпишусь.

    • >При чем тут сервер?

      А что тогда причем?

      Где неправильно путь указан?

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

      >сложно проверить?
      На данный момент не было времени, но если установка данной версии не запустилась и на денвере, я проверю в чем может быть дело. Хотя опять же повторюсь — странно это. Не вы один тестируете работу системы, пока только два человека у кого возникла подобная ситуация. Сегодня вечером выделю время и потестирую на другом WAMP.

  • Александр

    Проверил новый вариант.
    Тоже самое.
    Теперь не находит два файла — mg-start.php (mg-core), mg.php (mg-core/lib).
    Исправление путей не помогает.
    При копировании в корень сайта — «ВНИМАНИЕ!! Файл конфигурации недоступен!! Повторите процедуру инсталляции
    ???

    Поставьте WAMP (www.wampserver.com/ru/) — ‘nj более соответствует реальному рабочему серверу, плюс отображение ВСЕХ ошибок. DENWER — ДАЖЕ с установленными расширения весьма далек от реальности.

    • Приму на заметку, сегодня займусь тестированием.

  • valer

    После небольших доработок, примерно так получилось.
    http://belmobilines.by/mag.htm (фото скрин)

    Для личного кабинета — таблицы ORDER и USER пришлось связывать по e-mail, это конечно не совсем правильно по логике. Правильней было бы добавить в таблицу ORDER поле id и связать с таблицей USER для просмотра заказов пользователя. Если конечно ваш пользователь хочет видеть свои старые заказы.
    Поле date в таблицу ORDER заносит неправильно, вот так: 1352801961

    • Личный кабинет пока не прорабатывался. Конечно таблицы будут связаны иным образом.

  • Valera

    9 — При смене пользователя корзина обнуляется;
    Не совсем корректно работает.
    Если не входить под логином, набросать в корзину товаров и потом зайти под своим логином и набросать еще товаров в корзину, все товары попадут в корзину. Корзина работает правильно, если зашли под своим логином, потом вышли из своего логина, зашли под другим логином.

  • Ничего не понятно 🙂

  • Александр

    «>При чем тут сервер?
    А что тогда причем?»
    Сервер лишь исполняет код.

    «Где неправильно путь указан?»
    Warning: require_once(mg-start.php) [function.require-once]: failed to open stream: No such file or directory in D:\wamp\www\moguta\index.php on line 35
    Файл — index.php, строка 35
    Это первая ошибка.

    «Если нашли ошибку постарайтесь самостоятельно найти к ней решение, и выложить ответ.»
    Занятно.
    Обычно в проектах GPL в версиях ниже первой уже работает базовый функционал. А тут вторая с ошибками с первого файла.

    Вариант почему может быть такая ситуация — PHP 5.3.
    В нем много чего запрещено из старого. Именно под ним происходило тестирование.

    P.S. Поправите клювики для главной — неправильная раскладка в некоторых словах.

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

    • Воланд

      >-Вариант почему может быть такая ситуация – PHP 5.3.-<

      Я тестирую систему на рабочем сервере под управлением FreeBSD. Версия PHP 5.4.7 — всё работает на ура.

  • Дiмка

    Система тестировалась не только на Денвере, но и на OpenServer под Windows, а так же на установленном веб-сервере Apache на Ubuntu. Везде работа система стабильна! Так что может все же дело в http://www.wampserver.com???

  • Омар

    Моя кстати ошибка только на денвере.. а на серваке все норм. Точнее не норма, было бы супер если бы вы продолжали статьи как писать магазин самому а не создали очарядную CMS которых итак много.. едь каждый хочет сделать все под свои нужды, а не юзать кмс.. например многое в движке мне не понятно, а если бы вы писали также как и первые статьи, то давно бы все вебмастеры лицезрели новый сервис, который бы всем ооооочень облегчил продвижение сайтов.. вот так. ИМХО, зря вы кмс без объяснений делаете.. Буду дальше юзать таких как вы, только которые не перешли на создание своей кмс а также дальше доступно все объясняют по пунктам.

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

  • Итак. Уважаемый, Александр!
    Я специально не поленился, и потратил время на тестирование сей версии на используемом вами Wampserver.

    Не поверите… Все работает, подобными ошибками и не пахнет.

    Вот вам ссылка на мануал по настройке Wampserver

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

    Единственный замеченый баг, это не верно указанный путь к css файлу админки. Для его исправления нужно заменить в файле mg-core/view/mgadmin.php первую строку на вот такую запись:

    1
    <link rel="stylesheet" href="/mg-admin/design/style.css" type="text/css" />

    Данный баг будет исправлен в следующей версии, которая выйдет 2 декабря.

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

    • Воланд

      Уважаемый Mark. Вы могли бы как-то централизовать сбор багов? Например, я нашел баг и куда мне о нем написать, на Ваш блог или на форум? Рекомендую всю информацию о ошибках, которая выкладывается в блоге или приходит к Вам на почту — дублировать на форуме. Так можно будет оперативно закрывать дыры на своих сайтах. С Уважением, medium63.

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

    • Воланд

      P.S. Не нашел такого файла «mg-core/view.php». Ничего не перепутали?

    • Да, опечатался, поправил.
      mg-core/view/mgadmin.php

    • Александр

      Уважаемый, Марк.

      Как настраивать виртуальные хосты я в курсе.
      В WAMP — это проще всего сделать так — меню WAMP — Apachе — Папка псевдонимов.

      Просто до этого не сталкивался с системой не умеющей работать с относительным путем.
      Все же работать с локальными сайтами расположенными по адресу localhost/site-name гораздо удобнее.
      Особенно когда они являются дублями реальных доменных адресов (при тестировании обновления работающего сайта).

      Систему посмотрел.
      В целом использовать для простого магазина уже можно.
      Но наиболее интересным для меня вариантом на сегодняшний день является Axis.

      Удачи в разработке!

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

      Будьте добры, расскажите мне, что же такое относительные пути? Только давайте без стёба, если есть такая проблема, я бы хотел ее поправить, но искрене пока не понимаю в чем она заключается.

      И еще вопрос: что такое Axis?

  • Дiмка

    Марк, я так понимаю речь идет о том, что для Могуты необходимо создавать на локальном сервере отдельный домен, а большинство пытается использовать домен localhost вида: localhost/moguta.cms
    и следовательно все пути не работают. Наверно это минус нашей системы, для не особо продвинутых пользователей (на которых на сколько я помню ты особо уделял внимание) не совсем удобно пользоваться нашей системой на локальном сервере.
    axis я так понимаю

  • Сергей

    Марк почему не так???
    /**
    * Устанавливает физический путь до корневой директории скрипта
    */
    define(‘ROOT’, str_replace(‘\\’, ‘/’, dirname(__FILE__)));

    /**
    * Устанавливает путь до корневой директории скрипта
    * по протоколу HTTP
    */
    define(‘HOST’, ‘http://’. $_SERVER[‘HTTP_HOST’] .’/’);
    А то никак не подключается на локалке нормально … все время чегото хочет 🙂

    • Пока не могу ответить на этот вопрос. Нужно изучать.

  • Алексей

    Привет, ответьте мне.Можно ли использовать ваш скрипт интернет магазина для работы с Webmoney без персонального аттестата?

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

  • Виктор

    У меня возник вот какой вопрос при пользовании интернет магазином на вашем движке — у меня магазин одежды и там кроме самого товара необходимо указывать размер, у вас пока нет такой функции? Если нет то возможно рассказать как это можно добавить или при заказе сделать окно пожелания или коментарии. Заранее благодарен.

    • В новой версии, есть такая возможность.

  • Слава

    А продолжение уроков будет ?
    Мне интересно узнавать как и что происходит внктри вашей cms

    • Увы, скорее всего не будет, т.к. подготовка статей занимает много времени.

  • Виктор

    Не могли бы вы сделать уроки основываясь на новой версии вашего магазина ? Просмотрев код я заметил кардинальные изменения в подходе. Было бы очень интересно почитать от Вас описание разработки , в виде уроков. За такие уроки я готов заплатить. Спасибо.

  • Андрей

    Если не хотите писать статьи. Запишите видео уроки.

  • Оставить комментарий

    Подписаться на комментарии к этой статье по RSS

    Яндекс.Метрика