Проектирование cms. От теории до собственной CMS интернет-магазина

(наведите курсор мыши на урок, чтобы смотреть детально)

Часть 1

{ Написание собственного фреймворка }

Длительность: более 4 часов
Список уроков первой части:

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

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

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

4. Класс Реестр
В этом уроке пишется полезный класс, который предоставит глобальный объект. Используя данный объект, можно будет записать в него любые данные, которые будут доступны из любой точки нашего приложения.

5. Класс обработки ошибок
Еще один полезный класс, который необходим в любом веб-приложении, это класс для работы с ошибками. Этот класс позволит логгировать возникающие ошибки, а также не показывать их на экране в режиме production.

6-7. Класс Маршрутизатор
Следующая пара уроков будет отведена под написание ключевого класса практически любого веб-приложения, реализующего паттерн MVC.

Речь идет о классе Маршрутизаторе (Router). С помощью данного класса будем понимать, какую именно страницу запросил пользователь и перенаправим запрос на соответствующие контроллер и экшен.

8. Базовый контроллер
В этом уроке создается еще один ключевой класс ядра фреймворка – класс Контроллер.

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

9-10. Класс View
Еще одним компонентом архитектуры MVC является вид (представление). Этот урок посвящен написанию базового класса View, задача которого – отрисовать для пользователя запрошенную страничку. В уроке рассматрвиается, как отделить вид от шаблона, а также в чем разница между ними.

11. Класс Модель
Последним ключевым компонентом архитектурного паттерна MVC – является Модель (Model). Задача модели – непосредственная работа с данными, в частности, предоставлением нужного набора данных по запросу контроллера.

12. ORM RedBeanPHP
Работа модели часто предполагает работу с БД. Соответственно, приходится писать SQL-запросы или же нужно позаботиться о наличии соответствующего класса-билдера, который будет писать такие запросы за нас. В уроке рассматривается второй вариант и подключается замечательная библиотека RedBeanPHP, с помощью которой значительно упрощается дальнейшая работа.

Цели и задачи данного раздела

Первая часть курса посвящена написанию фреймворка с нуля.

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

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

Часть 2

{ Написание пользовательской части CMS интернет-магазина }

Длительность: более 13 часов
Список уроков второй части:

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

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

3. Вывод брендов
С этого урока непосредственно начинается работа с кодом CMS и реализуется одна из простейших задач – вывод брендов.

4. Популярные товары
Классическим функционалом любого современного интернет-магазина является вывод различных акционных категорий товара. Это могут быть популярные товары, новинки, распродажа и т.п. В этом уроке реализуется вывод популярных товаров на главную страницу сайта.

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

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

8-10. Виджет категорий
Следующие три урока выделины для написания еще одного виджета – виджета категорий. Данный виджет реализуется достаточно универсальным, с тем, чтобы использовать его не только в пользовательской части сайта, но и в будущей админке. Созданный виджет будет строить и выводить меню категорий по заданному шаблону. При этом данное меню будет поддерживать неограниченный уровень вложенности категорий.

11-17. Карточка товара
Одна из наиболее важных и объемных частей курса – карточка товара.

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

Функционала достаточно много и его реализация показывается сразу в семи уроках.

18-22. Корзина
Неотъемлемым атрибутом любого интернет-магазина является корзина. Собственно, без корзины сайт просто перестает быть интернет-магазином и превратиться в обычный каталог товаров.

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

23-24. Поиск
В уроках 23 и 24 показана реализация поиска по товарам. Это также важный функционал для любого сайта, особенно интернет-магазина.

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

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

26. Класс Pagination
В одной категории в магазине могут находиться сотни и тысячи товаров. Конечно же, выбирать их все для показа на одной странице – не очень хорошая идея. В этом случае принято выводить товары порционно, разбивая их по страницам. Для этого в данном уроке будет написан класс постраничной навигации.

27-31. Регистрация
Еще один достаточно объемный функционал, который реализуется, - регистрация пользователей.

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

32-35. Оформление заказа
Еще четыре урока посвящены вопросам оформления заказа. Здесь не только будет реализован функционал сохранения заказа и его данных в БД, но и будет реализован функционал отправки уведомления о новом заказе менеджеру сайта, а также будет отправляться письмо с деталями заказа самому покупателю. Для этого будет использоваться уже готовый популярный класс Swift Mailer.

36-40. Фильтры
Последняя объемная и достаточно интересная тема – фильтры. Этому вопросу отведено сразу пять относительно больших урока. Фильтры – очень удобны для пользователя и помогают покупателю в поиске нужных товаров на сайте.

Это будут последние уроки пользовательской части сайта.

Цели и задачи данного раздела

Итак, в первой части показано написание собственного фреймворка – это ядро, на базе которого будет создаваться система управления контентом (CMS) для нашего интернет-магазина.

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

Часть 3

{ Написание администраторской части CMS интернет-магазина }

Длительность: более 11 часов
Список уроков третьей части:

1. Шаблон AdminLTE
Первый урок третьей части посвящен основам работы с популярным шаблоном для бэкенда – AdminLTE. В данном уроке скачивается и установливается этот шаблон, а также создается необходимая структура для работы администраторской части CMS.

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

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

3. Виджеты главной страницы
Шаблон AdminLTE из коробки предлагает много замечательных компонентов, расширяющих возможности CSS фреймворка Bootstrap. Одним из таких компонентов являются небольшие симпатичные блоки-виджеты, которые идеально вписываются в главную страницу админки.

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

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

5-6. Обработка заказа
В следующей паре уроков добавляется возможность детального просмотра заказа и изменения его статуса. В деталях заказа менеджер сможет увидеть, как основную информацию по заказу и покупателю, так и расширенную.

7-11. Управление категориями
Пять уроков, с седьмого по одиннадцатый, отведено под реализацию функционала управления категориями. Реализуется функционал, предоставляющий менеджеру возможность создания новых категорий, редактирования существующих, а также их удаления. Кроме этого, добавляется обязательная проверка наличия в категории товаров или вложенных категорий, с тем чтобы избежать случайного удаления не пустой категории.

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

13-16. Управление пользователями
Четыре урока работы с админской частью сайта отведено под работу с пользователями. Показана реализация стандартного функционала управления пользователями: редактирование профиля и создание новых пользователей. При этом менеджер может создавать как обычного пользователя, так и нового администратора.

17-27. Управление товарами
Основной и наиболее объемный функционал администраторской части – это, конечно же, управление товарами. Именно поэтому на реализацию этого функционала отведено больше всего уроков – одиннадцать уроков.

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

28-30. Управление фильтрами
В следующих трех уроках показана реализация функционала управления фильтрами. Добавляется возможность управления группами фильтров и непосредственно самими атрибутами, которые в последующем можно будет присваивать товарам.

31-32. Управление валютами
В последних двух уроках реализуется механизм управления валютами. Администратор сможет создавать новые валюты и редактировать существующие. Также администратор сможет назначать базовую валюту магазина.

Цели и задачи данного раздела

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

Именно разработка администраторской часть CMS и показана в финальной части данного курса.

11 декабря 2018

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

Зачем нужны движки CMS?

CMS, или как их еще называют, системы управления контентом/содержимым, отлично подходят для создания MVP (минимальной версии продукта). С CMS вам не обязательно знать программирование и дизайн, чтобы создать сайт, вы можете использовать заранее созданную программу и собрать ваше MVP, как конструктор. Те времена, когда нужно было знать 5 языков программирования, чтобы собрать простенький сайт, прошли! CMS позволяют:

    Сделать MPV без знаний программирования;

    Сделать сайт значительно быстрее, чем создавая код и дизайн с нуля;

    Сэкономить деньги - сайт можно сделать самому, а можно нанять начинающего специалиста.

Что такое система управления контентом?

CMS , от английского Content Management System (система управления контентом ) - это программа, которая дает пользователям возможность создавать сайты с помощью простых инструментов, не притрагиваясь к коду.

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

Для кого существуют системы управления контентом?

“Мы были блогерами и работали в программном обеспечении b2. Нас не устраивало, что программу было сложно настроить, сложно запустить, приходилось руками перемещать код. Мы хотели простоты. Так появился WordPress.”

Мэтт Мулленвег, один из создателей WordPress.

В цитате Мэтт говорит про блог на WordPress, но его цитату можно применить к любому сайту на CMS. Эти программы подходят для создания MPV для проверки гипотез без крупных денежных и временных затрат и их отличает простота. Обычно написание сайта с нуля занимает месяцы и стоит сотни тысяч рублей, а создание сайта на CMS при наличии опыта - дни или недели, и может быть бесплатно

Наиболее популярны следующие системы управления контентом:

    Wordpress - на этой CMS работает 32% всех сайтов в интернете. Подходит для:

    • Блогов;

      Интернет-магазинов с маленьким ассортиментом;

      Информационных сайтов;

      Личных сайтов;

    Joomla - немного более сложный в освоении и “тяжелый”. Подходит для:

    • Сайтов знакомств;

      Форумов;

    Битрикс . Это платная, но полнофункциональная CMS. Подходит для:

    • Интернет-магазинов с большим ассортиментом;

      Корпоративных порталов;

      Информационных сайтов;

      Форумов;

    Tamaranga . Платная CMS заточенная под:

    • Доски объявлений;

      Городские порталы;

      Сайты недвижимости;

      Биржи услуг.

Когда начинать использовать CMS?

CMS стоит использовать, когда у вас уже есть идея бизнеса, вы проверили спрос на продукт более простыми способами и вам нужно создать функциональное MVP или интернет-магазин. Прежде чем думать о CMS, ответьте на вопрос, не достаточно ли для ваших нужд конструктора сайтов, такого как Tilda? Кстати, у нас есть урок как создать MVP на .

Как пользоваться CMS?

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

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

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

Рассмотрим разные варианты более подробно:

Wordpress

Это наиболее гибкая и простая в освоении CMS. Она подойдет для создания блога или сайта с онлайн продажами, маленького интернет-магазина. Однако, на этом ее возможности не заканчиваются. C должной смекалкой на Wordpress можно создать даже web-приложение.

    Официальный сайт wordpress: https://ru.wordpress.org/

    Где скачать: https://ru.wordpress.org/download/

    Инструкции: https://codex.wordpress.org/ru:Main_Page

    Цена: Бесплатно, но премиальные темы и плагины могут стоить тысячи рублей.

Joomla

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

    Официальный сайт Joomla: https://www.joomla.org/

    Joomla на русском языке: http://joomla.ru/

    Где скачать: https://downloads.joomla.org/

    Инструкции: https://docs.joomla.org/Main_Page/ru

    Цена: Бесплатно, но цена JomSocial от $99, премиальные расширения также платные.

1С Битрикс

CMS, на который созданы многие из крупных российских интернет-магазинов, таких, как сайт Леруа Мерлен и Эльдорадо. Одно из преимуществ 1С перед конкурентами - это простая интеграция с сервисами бухгалтерии. Битрикс предлагает множество функций, от шаблонов для создания сайтов до инструментов глубокой аналитики и оптимизации. Однако, стоимость начинается от 5400 руб. Tamaranga

В некотором роде Tamaranga это целых 4 CMS, нацеленных на конкретные типы сайтов: городские порталы, доски объявлений, биржи услуг или сайты недвижимости. Внутри своих ниш Tamaranga правит балом, но платой за это является отсутствие универсальности и высокая цена. Если приобрести прошлую версию, придется отдать разработчикам от 500 $, а за полный комплект расширений заплатить от $2000.

    Официальный сайт Tamaranga: https://tamaranga.com/

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

    Инструкции: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=34&INDEX=Y

    Цена: от 500 $.

Сколько стоит использование CMS?

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

Для того, чтобы работать с CMS, вам понадобятся хостинг и домен. Домен стоит от 100 руб, а хостинг примерно от 200 руб. в месяц.

Приветствует тебя и рад что ты заглянул. Сегодня я хочу начать новый цикл статей — разработка собственной CMS (Content management system) или, проще говоря — разработка собственного движка сайта. Интересно? Ну тогда вперед под кат)

Пара избитых фраз

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

Так, я когда-то писал аудиоплеер, который не требовал сторонних кодеков, имел шаблоны и читал всевозможные форматы, какие позволяла, на тот момент, библиотека bass, имел 18 полос эквалайзера и стандартный набор эффектов (эхо, реверб и пр.). Так вот, каждый задумывается, но не все реализовывают или доводят дело до конца. Мой плеер так и не вышел из стадии беты и был, к сожалению, заброшен. Я переместил свой интерес на веб-разработку: сменил delphi и c++ на PHP и JavaScript. Помню в том году как раз вышел релиз PHP 5.3. Немного ушел от темы, возвращаюсь 😛

У любого разработчика есть целая библиотека исходников, которые кочуют из проекта в проект — и веб-разработка не исключение. В какой-то момент понимаешь, что из всей этой кучи не связанных скриптов и классов уже можно что-то слепить. Что-либо «лепить» мы с вами не будем, а вот систему управления (CMS) или движок сайта с нуля разработать попробуем.

Для чего и зачем мне это

Кто-то скажет: «зачем изобретать велосипед и ко-ко-ко…» — тогда возникает вопрос: как такие люди сюда попали и что забыли? Да велосипед, да простенький, да в магазине велосипеды больше блестят, да-да-да.. Но зато это мой велосипед, который собран с душой и разбираюсь в нем я куда лучше чем в тех, что предлагают в магазине. К тому же, нет лучшего изучения материала чем изучение его на практике. Заменим слово «велосипед» на PHP и продолжим уже в нашей стезе.

Разработка своего движка — это отличный способ изучить язык PHP и научиться ООП (Объектно ориентированное программирование) на примере. Не знаю как остальные, а я испытываю эйфорию, когда моя CMS оживает и еще больше когда она окажется кому-то нужна. Вот так, сложив все составляющие в единое целое можно сделать вывод зачем все это мне: вам полезно, а я покайфую что пригодился:D Сразу оговорюсь: я не гуру PHP и все что я буду показывать не есть правильное решение на 100%. К тому же, не так давно мой хостер стал поддерживать PHP 7, а это зверь относительно новый… Так что будем вместе изучать его фишки.

Что такое CMS

При возникновении любых вопросов я всегда обращаюсь к гуглу и википедии. И вот что они говорят на этот счет:

Систе́ма управле́ния содержи́мым (конте́нтом) (англ.Content management system , CMS ) - информационная система или компьютерная программа, используемая для обеспечения и организации совместного процесса создания, редактирования и управления контентом (то есть содержимым).

*Есть разделение на прикладные CMS и Web CMS (WCMS). Так, как прикладные мы не рассматриваем, то говоря CMS я буду иметь именно WCMS.

Из этого определения можно сделать вывод, то CMS состоит из двух основных частей:

  • Административная — инструмент настройки, редактирования материала и пр.
  • Пользовательская — все то, что должен видеть обычный пользователь, зайдя к вам на сайт

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

Что должна уметь CMS

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

Начнем мы с того, что разделим весь функционал нашего движка на две части: внутренний и внешний.

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

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

Их еще можно назвать «функции ядра». То есть это тот функционал, который обеспечивает основную работу всей системы и внешнего функционала.

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

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

Эти функции можно еще назвать «пользовательскими», то есть такие, которыми пользуется простой пользователь или админ для достижения какой либо цели.

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

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

  • Добавление, редактирование и удаление статей и страниц сайта
  • Реализация подключаемых модулей и плагинов
  • визуальный редактор материалов
  • работа с шаблонами и их редактирование из самой системы
  • ЧПУ — так называемые «ЧеловекоПонятные УРЛы» или ссылки, которые вы можете наблюдать у меня в блоге.
  • защита от взлома и SQL-инъекций
  • возможность регистрации новых пользователей и распределение их прав доступа к разделам сайта

Здравствуй мой юный кодер, сегодня МЫ с тобой начнем писать свою простенькую 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. Если что-то не понятно или ты нашел(а) неточности/ошибки в статье- меня всегда можно найти на нашем

Один из самых простых при этом достаточно эффективный способ создания сайта, это создание сайта на готовом 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. Форум
Вверх