• CMS своими руками

    @egorinsk
    Автор, а что гуглить. Есть минимум 3 способа: расковырять простую Open-Source CMS (проблема: найти CMS с хорошей архитектурой и аккуратным кодом), устроиться в компанию, у которой есть своя CMS (а она есть почти у каждой студии), и наконец, написать самому правильно.

    Маны нужны не по написанию CMS, а по используемым продуктам и технологиям.

    Сначала надо определиться с задачей. Установите и попользуйтесь несколькими CMS, просто чтобы увидеть особенности их работы. (если вы не можете это сделать — вам надо изучать основы установки и настройки apache/mysql/whatever, а не CMS писать. Уходите практиковать эти навыки). Также, есть хороший сайт, где установлены демки десятков CMS и можно их посмотреть, не устанавливая.

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

    CMS обычно состоит из 2 частей — т.н. «админки» (запароленный раздел, где меняется конфигурация сайта, добавляются материалы) и публичной части сайта, которую видят пользователи.

    Если вы еще не бросили эту затею, перейдем к следующему пункту. Проектирование архитектуры и написание CMS. Чтобы хорошо писать сложную CMS, нужен опыт и понимание того, как вообще писать сложные программы. Нужно глубокое знание HTTP/HTML/CSS/JS/SQL. А именно:

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

    Что еще надо знать. Во-первых, надо иметь представление что значит MVC или 3-звенная архитектура.

    M в MVC — это Model. CMS скорее всего будет хранить данные в БД — надо знать, что такое и как пишется DBAL (гуглите: PDO), плейсхолдеры в запросах, возможно, Table Gateway, ознакомиться с тем, что такое ORM, и почему PHP-ные ORM так тормозят. Если будете делать модельки, не храните значения полей в публичных свойствах — это неудобно и нарушает инкапсуляцию. Храните их в приватном массиве $attributes.

    V is for View. Надо знать, что такое шаблонизаторы (прочтите мануал по Smarty, Django Templates, HAML и XSLT, чтобы иметь общее представление, какие они бывают). Для PHP хорошие варианты — использовать чистый PHP или XSLT, если осилите. Smarty — устаревший тормозной хлам, Twig тоже имеет недостатки. И не стоит ставить шаблонизатор, только, чтобы писать {$a} вместо [?= $a =].

    Не смешивайте логику (сложные вычисления, обращение к БД) и шаблонизацию. Лучше сделайте 2 файла: один с кодом, другой с шаблоном. В идеале, шаблонизатор получает от контроллера значения переменных и, кроме хелперов, никакого другого кода не вызывает.

    C — контроллеры. Но это самая простая часть, контроллер — это просто класс с методами типа viewAction(), editAction() и роутер, который смотрит на УРЛ и вызывает нужный контроллер. Посмотрите, как устроен Zend_Controller и Zend_Front_Contriller, и сделайте так же, но попроще. выкинув 90% функционала — он вам не понадобится.

    Нужно как-то сделать систему компонентной без сильных связей: чтобы ядро могло работать и без модулей, а добавление модуля не требовало дописывания кода в ядро. Почитайте про Dependency Injection, а также Observer (observer — это когда мы делаем функцию addEventListener()).

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

    Что еще. Освоив все эти понятия, у вас в принципе не будет сложностей написать CMS, но почитайте еще мои советы по тому, как писать правильный код с исп. ООП: habrahabr.ru/qa/17158/#answer_70869

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

    Ну что еще. Если (в чем я сильно сомневаюсь) благодаря моему скромного совету вы все же сможете пройти этот нелегкий путь и станете успешным разработчиком, можете заплатить мне денег. Я не против.
    Ответ написан
    Комментировать
  • Выбор движка для простого интернет-магазина?

    Begetan
    @Begetan
    По вашим требованиям пойдет все что угодно

    За хорошим дизайном в Prestashop ( куча готовых шаблонов), за удобством допиливания в OpenCar, это две самые динамичные сейчас разработки.

    В Престе шаблонизатор смарти, в OC — тупо PHP. На мой взгляд стоит начать с OC для его установки потребуется примерно минут 5 с нуля ( не считая настройки MySQL)

    От Джумлов, Друпалов сразу отговорю — уйдет ваше внимание от основной задачи. В специализированных скриптах автор уже удалил из камня «все что не есть лицо», а тут придется все самому.
    Ответ написан
    Комментировать
  • Выбор движка для простого интернет-магазина?

    DEViANCE
    @DEViANCE
    Еще неплох Opencart
    Ответ написан
    Комментировать
  • Выбор движка для простого интернет-магазина?

    polevsl
    @polevsl
    А мне в этом плане, если быстро надо онлайн-шоп запустить, из бесплатных нравится prestashop.
    www.prestashop.com/
    А вот русский: prestadev.ru/

    Нравится потому, что ставится просто и быстро, все основное есть внутри и бесплатно. А модули платные и их много. В частности, не нужно ничего дописывать для подключения платежных систем и т.д.
    Ответ написан
    3 комментария
  • Бизнес-логика в конроллере или модели?

    Не знаю как правильно, но я размещаю так:
    — логика приложения (она же системная): роутинг, логи, проверка параметров, прав, сохранение и получение данных (вызов всяких load и save), обработка форм, выбор способа отображения (html, xml, json, редиректы, ...), кэширование и т. п. — контроллеры (включая фронтконтроллер)
    — логика модели (она же бизнес-логика): действия с данными без учёта их способа хранения (выставить или оплатить счёт, атаковать кого-то или построить здание) — как не странно, модели
    — логика отображения: вывести сообщения системы (если они есть, формируются в контроллерах) раскрасить по разному чётные и не чётные строки таблицы, вывести дополнительные блоки (как правило для сайд-баров через вызов других контроллеров) — отображения (шаблоны)

    То есть получается, что в модели сосредоточен код, который ничего не знает ни о http-запросах и ответах, ни о БД (или другом способе хранения). Контроллеры просто создают объекты модели, заполняют их, если нужно, данными из хранилища/запроса, вызывает, если требуется, методы модели, и если состояние объектов модели изменилось сохраняет их, после чего передаёт объекты в нужное отображение. Если приложение простое (только CRUD действия), то в модели вообще нет методов, кроме геттеров/сеттеров/делетеров (а иногда и их нет, только данные)
    Ответ написан
    Комментировать
  • Бизнес-логика в конроллере или модели?

    helios
    @helios
    Как и в любом религиозном споре, тут нет одного правильного ответа. Существует два подхода к этому вопросу: толстые контроллеры и тонкие модели, и наоборот. В первом случае, как нетрудно догадаться, бизнес-логика располагается в контроллерах, во втором — в моделях.

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

    На мой взгляд — оба подхода имеют право на жизнь, но главное не мешать их в одном приложении: выбрать для него какой-то один стандарт и ему соответствовать.
    Ответ написан
    1 комментарий
  • Бизнес-логика в конроллере или модели?

    markeev
    @markeev
    «логику приложения» — это, скорей всего, конроллер. Не принято называть «логикой», хоть она таковой и является, логику хранения и отображения (паттерн MVC). Так что мой ответ в конроллере, а прочее не логика.
    Ответ написан
    1 комментарий