Опыт написания своей CMS — общие рекомендации и советы начинающим

Введение.

В этой статье я хочу рассказать о том, как и почему я всё-таки пришел к тому, чтобы написать свою CMS/CMF, несмотря на огромное количество доступных и бесплатных систем управления и фреймворков. Итак, конечно же, прежде чем я решил написать действительно что-то стоящее и подходящее мне в большинстве случаев для разработки всяческих сайтов и интернет-проектов, мною было «поюзано» несколько готовых CMS, были взвешены все плюсы и минусы: удобство привязки шаблонов, сложность дописания к CMS необходимой функциональности конечного проекта (если она не была уже реализована и доступна в паблике), итд. Также стоит отметить, что в не очень далеком прошлом (2006 году) я написал первое отдаленное подобие системы управления содержимым сайта и моё представление о подобных системах только начинало формироваться. Это «первое решение» даже прослужило в нескольких первых, так сказать, «тестовых» проектах, но вскоре было осознана вся ущербность данной CMS и её совсем немалые минусы.

Обдумав основные неудобства готовых CMS лично для меня, я составил такой вот список:
  1. В большинстве систем управления малоудобная реализация привязки конечной верстки к самой CMS (например в некоторых каша из PHP и HTML кода, в других приходится очень дохрена редактировать мелких шаблонов и перепрописывать множество переменных, итд.)
  2. Несмотря на то, что я конечно же знаком с базовыми принципами взлома сайтов, тот факт, что система общедоступна и каждый потенциальный хаккиръ вася пупкин может скачать её и тестить на бажность до потери пульса, немного смущает (потому, что этот продукт писал не я лично и также не я могу гарантировать его стабильность и не дырявость)
  3. Лично я не люблю когда система имеет необъятные габарариты, никому ненужный функционал для большинства случаев (привет Zend Framework), на неё навешивают всякие «новомодные плюшки», которые тормозят админку как минимум. (хотя есть мнение, что подобную CMS всего-навсего писали криворукие уебаны из деревни дилетанты)
  4. Минимализм и желание знать где, что и для чего у тебя находится в той CMS, с которой ты работаешь, склоняло меня большим грузом к тому, чтобы взять и сделать именно так, как мне хотелось, чтобы это было реализовано и как работало.
  5. Дальнейший рост проекта более затруднителен при использовании сторонних систем, т.к для того чтобы написать новый необходимый дополнительный модуль, раздел админки, итд. в самой CMS будет необходимо перелопатить весь доступный мануал по этой CMS и еще долго познавать детали и её «недокументированные возможности»
Вот эти основные минусы при использовании готовых продуктов и склонили меня окончательно к разработке своей CMS (кстати отмечу, из основных бесплатных кандидатов больше всего я смотрел в сторону WordPress и ModX, откуда я также и подчерпнул некоторые идеи для своей CMS).

Итоги

Какие сроки были поставлены?
– 3 месяца

Что было сделано в итоге?
– Нарисован несложный удобный юзабельный дизайн всех страниц админки с одновременным «продумыванием» необходимой и достаточной функциональности CMS (1-2 недели)
– Дальнейшая верстка страниц и написание меньшей части JS/AJAX составляющей (также заняло 1-2)
– Третий основной этап разработки, который включал в себя создание необходимой структуры таблиц базы (MySQL), написание каркаса (ядра) и всех классов (PHP/JS), модулей, сниппетов, итд.

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

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

Рекомендации

Если вы такой же «велосипедист» как я также склонились к тому, чтобы написать свою CMS, то ниже я привожу несколько советов для создания успешного проекта по моему мнению:
  1. Убедитесь в том, что у вас достаточно свободный график и много времени, чтобы ежедневно уделять по 1-7 часов на работу над проектом спешите. Запаситесь достаточным количество терпения, хорошей музыки, литрами кофе и килограммами конфет :) Спешка как известно, нужна при ловле блох.
  2. Прежде чем начать писать первые строчки, достаточно плотно подойдите к теоретической части (сюда входит ознакомление с мануалами библиотек, стандартами кодирования и деталями языка программирования (PHP/JS), базой данных (MySQL) и языка её запросов (SQL), с которыми мы будем работать, итд.)
  3. Старайтесь разрабатывать максимально расширяемый и сопровождаемый код, уделяйте время на поиск лучших решений, а не применение первого рабочего варианта, который пришел в голову.
  4. В свободное от работы время полезно задумываться о дальнейшем небольшом этапе написания кода, поиска каких-то новых идей, «дошлифовки» уже готовой части (у меня, например, перед сном приходило много новых идей)
  5. И последний пункт, никогда не останавливайтесь на достигнутом. Нет предела совершенству, как и пути назад.

Советы

  1. Если вы считаете, что не в состоянии осилить подобный проект в одиночку, берите себе в команду не больше 1-2 человек
  2. Применяйте последние расширения и библиотеки того языка, на котором пишете CMS (я использовал PHP 5.1+ и либы PDO, Multibyte String, Simple XML, Zip File Functions и GD)
  3. Что мне очень пригодилось и понравилось при написании кода, так это то, что я всё разрабатывал в едином ключе, на классах, с применением принципов MVC (до этого моя первая CMS была очень далека от этого) — всё это дает большие плюсы при дальнейшей доработке и сопровождении проекта.
  4. Не стоит навешивать на проект слишком большое количество яваскрипта и аякса, это совсем не удобно и не модно (во всём нужен балланс)
  5. Перед началом работы над проектом обязательно установите выполнимые сроки, составьте схему, этапы работы, начинайте собирать идеи и их реализации, которые потом могут пригодиться в процессе работы.
Вот и всё. Если у кого-то возникли дополнительные вопросы или пожелания, прошу в комменты.
10.01.2010 / php, cms, кодинг
Понравилась статья?
Подпишись на рассылку через RSS или следуй за нами в Twitter!
Похожие статьи:
Оценка статьи: проголосовало - 18, средняя оценка - 4,33
Комментарии к статье (18):
[ 25.01.2010 - 11:53 ] - Я
Дорогая редакция, вот уже 20 лет я ношу во рту за щекой педальку от велосипеда "Орленок". Смысла в этом давно уже не вижу, и не видел с самого начала. Положил ее туда 20 лет назад - не из противоречия и солидарности, не для кайфа и удовольствия, а просто так. Отвинтил - и положил. Я знаю, что педалька за щекой выглядит не очень красиво. Я знаю, что это вредно для здоровья: педалька мешает тщательно пережевывать пищу, внятно произносить слова, целоваться с женой и пломбировать зубы. А от машинного масла первые годы першило в горле. Но что в наше время не вредно? Так что не вижу ничего плохого в своем хобби.
(ц) Дима
[ 11.10.2010 - 19:20 ] - hurt
я пришел к выводу что во время написания cms вы дорабатывали изначальную идею и вот здесь есть противоречие если вы хотели сделать cms в которй не будет дофига прибамбасов то изначально планировался сжатый код, прошу прощения вечером голова плохо работает я просто хотел сказать что до фига прибамбасов поялвялется потом и если их вешать приходится писать расширяемый код а это подразумевает сложность в самом начале. По поводу расширений это все врено но всталкунлся спроблемой не на всех хостах они стоят можно написать потом маятся. мне вот интересно узнать вы паттерны проектирования использовали, где объявляли глобальные перменные и каким образом осуществляли подключение плюшек и модулей если не секрет конечно

и кстати как то стаья пустовата как бы не окончена показал пряник и убрал вы хоть раскажи те о cms опишите ее функционал какие задачи ставились до , по ходу работы и что получилось создать, способы взаимодействия ситем mvc. и вот еще что я так понимаю у вас насколько я помню пакет пирара для проверки орфографии работает уберите его пожалуйста он тянет лишь англ слова а так все красное , а вот фишка с квадратными смайлами прикольная, а вот еще что забыл каким образом вы отошли от перклички в шаблоне кусков php через объекты как в шаблонизаторе смарти? надеюсь не покзалася слишком грубым и навязчиввымывым.

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

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

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

на счет текстареи, правда скачет, убрал нафик))
на счет проверки орфографии не понял, ничего у меня не работает тут по этому поводу.
[ 12.10.2010 - 20:28 ] - hurt
хм а какой фраемворк посоветуете ?

XSLT имеете вв иджу что в него должны предаваться готовые xml ?
на счет проверки это я стормозил открыл сайтв опрере у нее такая глупотсть
а что за вызовы снипетов в html?
mint.cms ваше творение?
кстати заметитл при выделении всей странцы разные участки по разному выделяются еще раз респект за внимание к мелочи
на счет фрейморка ничего не могу посоветовать, потому как последнее время я занимался больше клиентскими технологиями (xml, xslt, js, css, итд.)

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

mint.cms да, именно об ней и идет речь в статье

сниппеты - (взял частично пример с modx), куски кода (пхп, хтмл, что угодно т.к они создаются в отдельных файлах) и вставляются уже в шаблон с версткой вот так {+snippet-name+} и парсятся вроде через preg_replace c флагом "e", точно уже не помню деталей :)
[ 13.10.2010 - 10:31 ] - hurt
ваша точка зрения понятна, должен сказать что на статью попал не случайно сам разрабатываю cms смотрю как другие делают толкового мало, если честно.Но в целом и у меня все то же mvc, но хочу ее части разбить на паттерны проектирования. v- xml xstl видимо это уже стандарт да и удобно это вопрос только с производительностью. Вот думаю создать сайт на котором подробно буду описывать как что работает. Боюсь что обхаивать будут, за то здравая критика здорово поможет, если начну работу над сайтом может дать ссылку?, думаю вы сможете откритиковать правильно, а мнение понимающего человека всегда важно. Что до вашей cms ? одно смущает bdo и прочие добавки к апачу, дело в том что хостеры любят эти фишки за доп плату ставить что увеличивает цену проектов, по этому не знаю работать с ними или на чистом апаче. Кстати давно ищу ответ на вопрос что же такое много пользовательские системы выдерживающие большую нагрузку))) может подскажете куда копать?

p.s. все время забываю спросить автолоад используете или его аналог?
если на хостинге установлен PHP5 (что в наше время на большинстве хостингов), то всякие PDO и большинство либ всегда будут скомпилены в PHP (и цену за это никто обычно не повышает)

давайте ссылку на свой проект, гляну)

про многопользовательские незнаю что подсказать, копать наверное в сторону оптимизации (как кода, так и тянущихся файлов css,js,итд.) и кэширования (nginx)

автолоад юзал в одном месте, да.
[ 13.10.2010 - 12:56 ] - hurt
мда видимо отстал от жизни, но вот здесь посмотрите к примеру сразу приношу извинения если ошибаюсь http://jino.ru/services/description/php.html или PDO + PDO идет от mysql &
ссылку на проект с удовольствием дам, пока материал готовлю
ну дык я как раз на джино и хостюсь) тормознутый честно говоря, перешел бы на другой (например sweb.ru) но пока влом.

дополнительная оплата идет за использование MySQL, а через какой интерфейс с ней работать уже дело разработчика..
[ 13.10.2010 - 16:13 ] - hurt
хм прикол я то же джино использую тоже тормозит тоже в лом) но прикол в другом я думал что pod это спец библиотека от пиара а здесь она вообще не указана , значит получается стоит по умолчанию тогда почему не указали пфффф хм вот тупость блин)))))
смотри всегда phpinfo на хостинге, и можно еще get_loaded_extensions и apache_get_modules
[ 13.10.2010 - 17:21 ] - hurt
да стормозил
[ 08.11.2010 - 13:06 ] - Королев Сергей
Здравствуйте, собираюсь писать свою cms. пока не очень силен в php, вот буду набираться опыта и "набивать синяки"... Ваша статья помгла проникнуться духом...=) Спасибо.
пожалуйста :)
[ 13.11.2010 - 15:01 ] - Ваня
Я написал свою cms не без помощи всяких видео уроков, книжек, помощи друзей! Писал писал не отрываясь проверяя на всякие косяки, в итоге написал сайт с админкой, получилось что то вроде новостной ленты, потом подобавлял уже готовые скрипты, гостевая, обратная связь! Я писал сайт и учился одновременно, я научился читать и понимать код! В последствии я начал модифицировать сайт, сделал менюшку в админке включить отключить модуль! Вывод из базы случайных статей, ну и так по мелочи развивал сайт! Я работаю программистом веб сайтов, и работаю с joomla открытый код огромнейшая популярность, и грамотный код. В Итоге я захотел напистаь под неё компонент, да я знал joomla? но вот архитектуру нет, как и что под неё писать, какие там зарезервированные функции переменные классы. Если бы не мой товарищь по работе я бы недели 2 только разбирался как написать и тупо вывести echo но за три дня я врубился в архитектуру, я понял её хоть она и сложная в понимании, но зато даёт огромнейшие возможности. И тут я осознал на сколько дырява и ничтожна моя cms ну да я знаю где и что как написано куда лезть что бы исправить код! Но в joomla то уже всё продуманно! И поэтому свою cms я просто как тренинг использую. А профессиональный продукт для серьёзных целей! Так что моё мнение такое своя cms это всего лишь как практика. Да и если вы что то серьёзное пишите то вам уже не php нужен а питон!
[ 14.12.2010 - 03:05 ] - Жека
python?? А почему не perl??
о чем это ты, приятель?
[ 29.12.2010 - 20:08 ] - psy
Отличная статья, очень похожие "плюсы" и "минусы" возникли у меня. Иногда нужна система в которой знаешь все ОТ и ДО. Самописная вполне подойдет под личное портфолио или сайт визитку) Что касается новостного портала, который планируется продвигать и наполнять - я бы предпочел как уже написано выше - профессиональный продукт. Думаю с моим мнением многие согласятся ;)
[ 09.01.2011 - 18:51 ] - Александр
Приятно читать хорошие отзывы о CMS Joomla. Я ее использую для своего сайта.
Пока что только учусь дизайну, как оптимизировать. Самая большая проблема- это наполнение сайта. Хочется чтобы и в поисковиках отражался и трафик был, но не хочется тупо копировать другие сайты, поэтому дело движется медленно
[ 24.02.2011 - 00:16 ] - Георгий
Хорошая статья. Укрепила мои доводы в пользу своей cms - устал рыть все эти готовые решения.
[ 10.07.2011 - 05:26 ] - Дизайн студия ProGrafika
Своя cms лучше еще тем что ты не привязываешься к платформе но хуже то, что при работе в дизайн студии все равно просят чужую, так как ты не один програмер и должен посветить в проделанную работу и других. Статья хорошая.
ну если писать свою более менее грамотную цмс, то там без документации не обойтись, ессесно
[ 10.07.2011 - 05:31 ] - Дизайн студия ProGrafika
Попробуйте поюзать Kohana, я вот попробовал и теперь не перестаю кипятком писать от ее плюсов.
+ Быстрота
+ защита
+ простота
- русская документация отсутствует
[ 14.08.2011 - 16:28 ] - Xstroy
Уже не первый раз слышу про Kohana.
Можно простым языком пояснить что это? Библиотека готовых решений?
Будущий сайт работает на основе компоновки готовых сборок? Правильно понимаю или ...
[ 01.11.2011 - 00:27 ] - BATAZOR
Как только изучу и разберусь с опп, тоже попробую написать свой двиг, спасибо за статью
[ 12.11.2011 - 19:07 ] - Александр Назаров
sweb - ужасный хостинг! фтп мертвое, тормозит, косяков куча. Скорость малая.
ПОльзуюсь Наунет - хостингом, он дешевле и лучше.
Добавить комментарий
АНТИСПАМ: Выберите улыбающийся смайл: yep! nope! nope!
Оформление заявки
Файл>>