Делаем cms. Создание CMS этап проектирования. Какая лучше: платная или бесплатная

Часто для создания сайта используется готовая CMS, которая становится основой для развертывания сайта. У некоторых пользователей может возникнуть вопрос: как сделать систему управления содержимым (CMS) самому?

Сразу стоит сказать, что создание собственной CMS представляет собой непростой процесс. Для разработки сколько-нибудь пригодной системы необходимо владеть на хорошем уровне технологиями разработки сайтов с нуля - то есть нужно знать один из языков веб-программирования (например PHP), знать и уметь составлять запросы к базе данных (MySQL), уметь писать скрипты на JavaScript, знать HTML и CSS. Конечно, в некоторых случаях можно отказаться от некоторых вышеназванных технологий, но зачастую без этих средств не обойтись. Рассмотрим упрощенный процесс создания.

Проектирование системы

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

Реализация системы

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

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

Задача построения системы управления содержанием (CMS) может привести в замешательство новичка разработчика PHP. Но не так страшен черт, как его малюют! В данной серии уроков мы построим простую, но полностью работоспособную систему с нуля.

В ходе процесса вы научитесь создавать базы и таблицы MySQL, работать с объектами, константами, включениями, сессиями и прочими инструментами PHP. Кроме того мы покажем, как отделять логику приложения от презентации и сделать код PHP более безопасным. А также вам откроется многое другое, полезное в деле создания собственной системы мечты.

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

Примечание: для изучения материалов уроков потребуется веб сервер Apache с установленным модулем PHP и сервер MySQL. Для работы на локальном компьютере можно воспользоваться одним из инструментов веб разработчика: XAMPP (на английском языке), Denwer , Open server или другим.

Замечание о безопасности

В реальных проектах лучше помещать config.php где-нибудь за пределами корневого каталога веб сайта, так как в файле содержатся имена и пароли. Обычно код PHP невозможно просмотреть в браузере, но иногда из-за неправильной конфигурации веб сервера код становится доступным. Вы можете использовать функцию hash() для хэширования паролей и хранить в config.php хэши, вместо текстовых паролей. Затем при регистрации пользователя можно опять воспользоваться функцией hash() для кодирования введенного пароля и сравнения результата с сохраненным в config.php хэшем.

В следующем уроке мы построим основной класс нашего приложения - Article.

Когда человек начинает программировать, он хочет написать что-то своё и начать пользоваться именно этим.

И вот он момент истины. Садишься за компьютер, открываешь нужные программы и начинаешь думать с чего начать и для чего ты вообще сел за написания очередного велосипеда, спросите:"Почему велосипеда да еще и очередного?" ответ не заставит ждать, многие программисты писали для себя да и до сих пор пишут. Зачем? Тут ответ может быть разным, многим интересно понять как работает CMS и что это такое, почему нельзя обойтись без неё.

Зачем же нужна CMS? Рассмотрим пример. У нас есть желание написать свой блог , допустим для того чтобы писать там свои мысли и(или) использовать его в качестве тетрадки чтобы не забывать как ты делал ту или иную задачу или писал модуль и т.д. Итак чтож такое CMS Content Management System а по-русски звучит просто Система Управления Содержимым или Контентом. Т.е. это инструмент для управления сайтом и его внутренностями.

Для начала разработки не стоит суетиться и браться сразу за все, попробуйте описать функционал вашей будущей CMS на бумаге. Опишите базовые функции системы, атак же подготавливайте Базу Данных, думаю MySql вам подойдёт, хотя если порыться по просторам интернет то вы сможете найти описания создания CMS использующих для хранения не базу данных, а файлы. Файлы это конечно хорошо, но зачем? Есть же специальный "инструмент" База Данных. Обращение к БД MySql намного быстрее чем обращение к файлам на сервере. Так что не думаю что вы сильно задумаетесь над тем в чем хранить данные на сайте.

Давайте попробуем описать несколько модулей для нашей системы. Пусть это будут базовые модули, пусть они не будут изначально полнофункциональные, но они будут и впоследствии их всегда можно дописать до нужного функционала. Итак начинаем раздумывать что же нам нужно в первую очередь и как это все собирать, с чего начинать, как писать и т.д. Ну начнём с простого, у нас точно должен быть файл конфигурации нашей CMS , + хорошо бы продумать структуру файловой системы.

Давайте сделаем такую:


- css (здесь будем хранить файлы css)
- scripts (для хранения скриптов JS)
- img или images или просто i кому как удобнее (хранить картинки)
- logs (будем хранить логи ошибок, пока в файлах потом можем записывать в БД)
- modules (думаю тут можно догадаться, будем модули хранить)
- includes (файлы конфигурации, языковые файлы, в общем то что может потребоваться подключить)

Итак у нас есть файловая структура нашей CMS теперь можно приступать к следующему шагу - файлу конфигурации. О нём моя следующая статья.

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

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

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

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

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

  1. Трудозатратнось. Средняя так как в конечном итоге в делаете все сами и соответственно изучать материал вам придется самостоятельно, и выполнять всю работу. Безусловным плюсом могу здесь обозначить наличие несложных инструкций, написанных изначально для людей мало разбирающихся в веб программировании и соответственно сами CMS административные панели написаны с учетом этого.
  2. Качество. Безусловно, качество остается на высшем уровне, так как сам код пишут профессионалы и соответственно они знают что делают. Но существуют такой отрицательный момент, что в итоге вы ограничиваетесь рамками возможностей конкретного CMS и не всегда есть возможность реализовать вашу задумку как вы хотите, без соответственных и достаточно хороших знаний веб программирования, но и с ними не всегда все получается.
  3. Финансовые затраты. Этот момент безусловно приятный финансовых затрат у вас ни будет ни каких, так как все бесплатно и уроки и инструкции и конечно сами CMS. Так, что ваш кошелек не пострадает.
  4. Перспективы развития. Да, безусловно они есть, но как я уже говорил они будут ограничены рамками обновления и создания плагинов к выбранному вами CMS. И если вы захотите в кардинально что-то изменить, то возможно вам придется менять весь CMS на другой, поэтому прежде чем остановить свой выбор на конкретном варианте узнайте все возможности у выбираемх вами CMS и подумайте наперед, что вы хотите увидеть на своем сайте в будущем и какие он функции должен выполнять.

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


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

  1. Обычный сайт визитка, просто подбираем нужный шаблон пишем текст и все.
  2. Достаточно качественный Блог, для реализации данной функции вам потребуется несколько дополнительных компонентов но это не проблема.
  3. Интернет-магазин практически любого объема и сложности.
  4. Сайт каталог или файловый архив.
  5. Портал - реализуется как с помощью стандартных возможностей Joomla
  6. Сайт галерея создание мощной галереи изображений или видео, для этого у Joomla достаточно расширений
  7. 7. Сайт для общения между людьми - для Joomla существует огромное количество компонентов и модулей, специально созданных для реализации общения между посетителями сайта.

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

Какие сайты вы можете сделать на основе данного CMS:

  1. Блог это безусловно первое и основное направление для которого был создан этот движок.
  2. Создание обычного статического сайта, в принципе это могут любые CMS
  3. Сайт объявлений
  4. Каталог статей
  5. Сайт фотогалерею
  6. Форум

Здравствуй мой юный кодер, сегодня МЫ с тобой начнем писать свою простенькую CMS.
Итак, с чего начнем…естественно с проектирования. Что должна уметь/иметь не крутая, простенькая CMS? Этот вопрос достаточно сложный, т.к. любая CMS, даже самая простая, пишется под конкретные нужды: электронный магазин, программерский сайт, новостной сайт, галерея(хотя, в принципе, галерея- это не совсем CMS) и т.д. В этой статье мы рассмотрим второй вариант. Что же должна уметь такая CMS? Думаю все со мной согласятся, что:

1) Админку:)
2) Возможность управления новостями, статьями, загрузками, ссылками
3) Функцию регистрации пользователей
Это тот минимум с которым должна уметь оперировать наша CMS. К дополнительным фичам я отнесу:
1) Динамически создаваемые страницы, т.е. в админке можно запросто ввести содержимое новой страницы. Например: сделать магазин uin’ов на сайте или страницу повествующую о истории вашего проекта и т.п.
2) Комментарии к новостям. Это отдельный пункт, т.к. это довольно таки опасная вещь из-за того, что нужно применять специальные фильтры и спам- детекторы, иначе если вас кто-то очень сильно не любит и у него есть мозг/деньги(или что хуже всего, когда у него есть и то и другое:)) то он, в лучшем случае, может просто забить вашу БД мусором, в худшем он получит полный контроль над сайтом…Мы еще вернемся к этому вопросу;)
3) Возможность создания динамически создаваемых менюшек, их перестановка в различные области сайта.
4) Форма обратной связи с админами(Опасность та же, что и для пункта №2).
Ну вот и все, что я планирую(пока что) тебе объяснить.

Сначала организуем структуру директорий будущего сайта:
/DocumentRoot
/AdminPanel # Корневая директория админки
/Sources # Скрипты админки
/HTML # Собственно сам хтмл админских страниц управления
/Sources # Скрипты CMS
/HTML # Хтмл
/Images # Картинки
/Downloads # Директория хранящая в себе файлы доступные для скачивания
/Config # Файлы конфигурации CMS, например содержащие логин и пароль доступа к MySQL

Теперь что касается навигации по сайту. Навигация будет производится с помощью ссылок(ога, самому смешно:)) типа you_site.com/index.php?act=art&mod=idx. Параметр art характеризует какой раздел сайта мы хотим просмотреть, а параметр mod отвечает за подраздел который мы хотим просмотреть. Вот таблица соответсвия этих параметров:
act=art&mod=idx # Просмотр категорий статей
art=art&mod=cat # Просмотр конкретной категории. Как CMS будет узнавать какую категорию мы хотим просмотреть я объясню чуть позже:)
art=art&mod=art # Просмотр конкретной статьи

Act=dwn&mod=idx # Просмотр категорий статей
art=dwn&mod=cat # Просмотр конкретной категории. Как CMS будет узнавать какую категорию мы хотим просмотреть я объясню чуть позже:)
art=dwn&mod=dwn # Просмотр конкретной статьи

Act=users # Просмотр зарегистрировавшихся пользователей
act=users&mod=profile # Просмотр профайла юзера
art=art&mod=reg # Регистрация юзера

Это пока далеко не все варианты, в дальнейшем мы научим “понимать” CMS и другие параметры. Ну а теперь перейдем непосредственно к программированию. Создадим в корневой папке файл index.php именно через этот скрипт пользователь будет путешествовать по сайту, все остальное кроме картинок должно быть запрещено для просмотра(и не только скрипты но и файлы конфигурации, ХТМЛ)

Код файла index.php:

Require_once(‘config/database.php’); // Загружаем скрипт соединяющийся с БД
require_once(‘sources/session.php’); // Скрипт управления сеансами пользователей
require_once(‘config/config.php’); // Файл конфигурации
require_once(‘sources/check.php’); // Проверяет получаемые из URL’a параметры
require_once(‘sources/links’); // Отвечает за ссылки для навигации по сайту

$act=check_act(&$debug); // Функция проверки переменной $act, находится в файле check.php
$mod=@$_GET[‘mod’]; // Получаем переменную $mod
$site_links=get_links($mysql_tables); // Получаем массив ссылок
switch ($act)
{
case ‘idx’: //если посетитель просматривает главную страницу сайта
require_once(‘sources/news.php’); // Загружаем скрипт новостей
$site_news=get_news($mysql_tables); // Получаем массив новостей
require_once(‘HTML/index.htm’);// Загружаем ХТМЛ страницы
break;
}
?>

Код файла database.php:

$mysql_login=’root’; //Логин для доступа к серверу БД
$mysql_pass=’’; // Пароль
$mysql_host=’localhost’; // Хост на котором висит MySQL
$mysql_database=’MyCMS’; // Имя БД

$mysql_tables[‘news’]=’news’; // Таблица новостей
$mysql_tables[‘articles’]=’articles’; // Таблица статей
$mysql_tables[‘art_categ’]=’art_categ’; // Таблица категорий статей
$mysql_tables[‘downloads’]=’downloads’; // Таблица загрузок
$mysql_tables[‘dwn_categ’]=’dwn_categ’; // Таблица категорий загрузок
$mysql_tables[‘links’]=’links’; // таблица ссылок
$mysql_tables[‘users’]=’users’; // Таблица пользователей
?>

Код файла session.php:

@session_start();

If(!@$_SESSION["group_id"])//Если пользователь только что зашел
{
$_SESSION["user"]="Гость";
$_SESSION["id"]=0;
$_SESSION["group_id"]=-1;
$_SESSION["last_click"]=$time;
}

If(@$_SESSION["group_id"]<>"")//если посетитель не гость
{
$_SESSION["last_click"]=$time;//в дальнейшем нам это понадобиться для учета онлайн- пользователей на сайте
}

Код файла check.php:

Function check_act(&$debug)//Функция проверки переменной act
{
$act=@$_GET["act"];
if($act<>"idx")
{
$act=$debug["indx_act"];//Задаем дефолтное значение
}
return $act;
}

Код файла config.php:

//Установки управления исправлением ошибок:
$debug["indx_act"]="idx";// Если главный скрипт получит не правильное значение переменнной act то он задаст ей это значение

Код файла links.php:

Function get_links(&$table)
{
$query="SELECT position FROM $table";
$result=mysql_query($query);
$rows=mysql_num_rows($result);
for ($i=0; $i<$rows; $i++)
{
$sort_array[$i]=mysql_result($result, $i);
}
sort($sort_array);
for ($j=0; $j<$rows; $j++)
{
$pos=$sort_array[$j];
$query="SELECT * FROM $table WHERE position="$pos"";
$result=mysql_query($query);
$tmp_arr=mysql_fetch_array($result);
$links[$j]["name"]=$tmp_arr["name"];
$links[$j]["link"]=$tmp_arr["link"];
}
$links["rows"]=$rows-1;
return $links;
}

Вот в принципе уже и мини двиган получился:) Теперь давайте разберем код некоторых файлов, чтобы я вам пояснил механизм работы. Итак для чего я проверяю переменную $act спросите вы? А представьте себе что кто-то захочет в url’e ее поменять? После этого скрипт может работать не стабильно и вполне реальна порча данных и т.п. Конечно в данном примере это играет, мягко говоря, второстепенную роль, но запомните, что нужно проверять абсолютно все что может изменить пользователь(лучше даже проверять то что он в принципе и не может изменять). Если же у переменной какое-то левое значение то мы ей присваиваем дефолтное значение и тем самым обламываем вредных киддисов:)

Теперь разберем самый сложный из этих простых скриптиков- links.php. Я думаю, что читатель этой статьи уже сталкивался с управлением каким- либо движком сайта и наверняка догадался почему этот скрипт настолько сложен(для начинающих конечно). Управление ссылками на навигационной панели сайта заключается не только в том, чтобы их добавлять и удалять, а еще, как минимум, в том чтобы изменять их позицию, т.е. вы сначала добавили ссылки на раздел статей, а потом вспомнили, что забыли добавить раздел “Главная”- ссылку на главную страницу, но ведь эта ссылка должна по традиции идти первой…вот тут- то и пригодится управление позициями. Вы просто добавляете ссылку на главную страницу, а потом нажимаете на что-то похожее на “Вверх” или “Поднять” и т.п. Но мы пока не будем в этой части касаться админки, а пока рассмотрим скрипт- клиент. Сначала мы просто выбираем все записи из таблицы и заносим значения поля ‘position’ каждой записи в массив. Затем мы сортируем их по возрастающей, то есть: 0, 1, 2 и т.д. Это позволяет нам потом выполнять в цикле SQL запросы типа: $query="SELECT * FROM $table WHERE position="$pos""; Таким образом мы выбираем из таблицы записи у которых поле ’position’ равно значению переменной $pos, что и дает нам возможность управления позициями ссылок. Здесь мы в цикле, начиная с ключа со значением 0 присваивать имя ссылки и, собственно, саму ссылку. Все что нам потом понадобится чтобы вывести ссылки на свет юзеровский- это написать в хтмл файле index.htm такой скрипт:

For(i=0;$i<$site_links[‘size’];$i++)
{
echo "{$site_links[$i]["name"]}";
}

Вот собственно и все. Кстати, некоторые люди которые читают сейчас эту статью, наверное, возмутяться: “А почему в запросе не использовать конструкцию ORDER BY и не использовать связанные таблицы? Ведь это упростит задачу!”. Дело в том, что стиль написания моих скриптов заключается в том чтобы максимально увеличить их переносимость, т.е. я никогда не использую сложные запросы, связанные таблицы и т.д. Конечно, все это плохо сказывается на скорости работы скриптов и их сопровождении(слишком не понятный код), и если нужно добиться максимальной производительности в ущерб переносимости, то я использую все эти средства, но зато еще ни один мой скрипт при переезде не просто с одной версии MySQL на другую, а с одной платформы и/или типа веб серверов и серверов БД не выдал ни одной ошибки или предупреждения:) Каждый волен делать так как он хочет, ведь на то оно и программирование: возможных решений задачи, столько же сколько и людей пытающихся ее решить;)

P.S. Если что-то не понятно или ты нашел(а) неточности/ошибки в статье- меня всегда можно найти на нашем