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

Существуют ли маны или книжки по написанию cms или это только для тру нинзь?

Если у кого-нибудь была такая проблема и у него есть литература, то может поделитесь а?

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

Всем спасибо.
  • Вопрос задан
  • 54585 просмотров
Пригласить эксперта
Ответы на вопрос 13
@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

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

Ну что еще. Если (в чем я сильно сомневаюсь) благодаря моему скромного совету вы все же сможете пройти этот нелегкий путь и станете успешным разработчиком, можете заплатить мне денег. Я не против.
Ответ написан
Комментировать
Sky4eg
@Sky4eg
Web разработчик
Скорее всего ваши велосипед будет с квадратными колесами, без седушки и прочее. Но практически каждому программисту на php хочется написать такое на первых парах. Маны по написанию cms встречал неоднократно, однако лучше их не читать. Познакомьтесь лучше с паттернами программирования, почитайте 37signals чтобы не ездить на бульдозере за хлебом. Обязательно поймите что такое MVC, иначе у вас будет каша в коде. Попытайтесь разобраться в коде фреймворков или готовых цмс. А еще лучше забейте на эту идею и если всетаки вас так тяянет к цмсстроению, то найдите готовую цмс, разберитесь в ней и помогайте совершенствовать ее, писать плагины и прочее.
Ответ написан
Сделайте несколько сайтов на разных популярных CMS: Joomla, MODX, Drupal,… Напишите для них по модулю/компоненту.

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

Что касается работы над CMS, я бы посоветовал взять за основу какой-нибудь фреймворк. Сейчас, я бы взял Zend, так как он написан академически правильно, но в то же время он довольно сложный для восприятия новичкам. Из попроще, вроде бы, Yii сейчас в моде.

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

Вообще, написание CMS — это для «тру» велосипедистов. Нужно смотреть правде в глаза: вряд ли у вас получится что-нибудь ценное, но это поможет вам разобраться в тонкостях проектирования модульной системы, предметной области CMS, надеюсь, ООП, паттерне MVC и шаблонизаторах, а также вы получите бесценный опыт разработки огромного и сложного проекта.

В общем, лично мой уровень после написания такого велосипеда за год взлетел с что-то могу написать с нуля, до я могу все и спокойно без опыта работы даже с Зендом и чтения мануалов пишу на Magenta, который вот совсем недавно казался китайской грамотой.
Ответ написан
Комментировать
@slookin
полезнее скачать пару-тройку готовых open source и разобраться почему они именно так написаны.
Ответ написан
Комментировать
Tsyganov_Ivan
@Tsyganov_Ivan
Конкретное руководство «Пишем CMS. Для начинающих.» вы вряд ли найдете.
Пишите различные веб-приложения. Наращивайте их функционал. Постепенно вы заметите, какие недостатки есть в ваших разработках, а какие моменты получились удачно. Просто сесть и написать хорошую CMS с нуля практически невозможно.
CMS это сложное веб-приложение. Важно задолго до начала разработки продумать архитектуру всей системы.
Решите, чего вы хотите от собственной CMS, чего вам не хватает в существующих. Сравните готовые решения. Попробуйте разрабатывать модули для существующих CMS, это позволит глубже разобраться в их архитектуре.
Ответ написан
Комментировать
igolovin
@igolovin
www.bhv.ru/books/book.php?id=8541
Вот в этой книге в качестве конечного примера, пошагово описывается, как делается CMS и форум. Все подробно, понятно. По принципу «от простого к сложному». Для начала, думаю, то, что нужно.
Ответ написан
Stdit
@Stdit
Написание CMS — это огромная работа. Ничего плохого нет в том, чтобы попробовать самому написать CMS в образовательных целях, это лучший способ изучить на практике проектирование и получить опыт, который поможет в дальнейшем понимать готовые CMS и писать на них нормальный код. Прежде чем писать CMS, нужно написать Framework для неё. Можно начать с изучения готовых решений, например Symfony2. Перед практикой обязательно изучение теории, паттернов проектирования, способов оптимизации и т.д. Не стоит рисковать применять свою CMS на боевых сайтах и серверах, потому что почти наверняка в ней будут уязвимости и архитектурные ошибки, которые в дальнейшем создадут вам или коллегам немало проблем.
Ответ написан
Для начала можно взять какие-нибудь лёгкие движки, в которых минимальный функционал, посмотреть, как реализовано, после взять ещё один, его ковырнуть, в итоге начнёшь понимать саму структуру (это, кстати, очень важный пункт). Книги по сути не нужны, с ними будет сложнее, я, когда дописывал двиг, не читал ничего, кроме описаний функций. Да, я сидел над одной функцией 2 часа, зато сейчас я прекрасно понимаю, как это работает и на реализацию у меня уйдёт не более 10 минут. Главное желание чтобы было завершить начатое)
Ответ написан
Комментировать
ajaxtelamonid
@ajaxtelamonid
Laravel
Все просто.
1. Изучить какой-нить фреймворк типа Symfony 2 (посложнее) или Kohana (попроще).
2. Дальше узнать про Nested Sets для оперирования древовидными структурами (статьи в категориях, комменты).
3. Сделать CMS.
Ответ написан
Комментировать
retran
@retran
Читайте книги по архитектуре информационных систем. Любых.

Начать с Мартина Фаулера.
Ответ написан
Комментировать
shsweb
@shsweb
В свое время, было познавательно почитать вот этот пост про написание CMS.
Ответ написан
Комментировать
@koder_1
Битрикс программист
В 2005 -2008 годах была такая занятная традиция, каждая веб-студия, даже из одного программиста, писала свою цмс.
Для этого была необходимость, потому что существовавшие тогда движки не удовлетворяли хотелки клиентов, например по seo, только появилась мода на ссылки чпу к примеру, а в джумлах и вордпрессах того времени было с этим туго.
Ну и плюс стандартный тогда набор модулей, который ставился на сайт, не был реализован в движках, разнообразные календарики, модули опросов - маст хэв на сайте 2006 года.
С учётом также повальной моды на индивидуальные сайты, слово самописная CMS тогда вызывало восторги у клиента.

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

Но для опыта и прокачки навыков штука полезная.
Ответ написан
Комментировать
koshpavel
@koshpavel
Нужно начать делать сайты для клиентов и делать их пока не появится реальная необходимость сделать CMS, понимание зачем и как. Если ты не знаешь как, зачем и для кого — лучше не делать, есть более правильные способы просвещаться
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы