Архитектура простейшей CMS на PHP+MySQL. Cms на php инклудах
Архитектура простейшей CMS на PHP+MySQL / Программирование / it-гики
Предисловие
Очень лёгкая CMS может понадобиться в разных случаях. Например, если слабый сервер или нужно разместить очень много сайтов на одну железку с ограниченными ресурсами. К примеру, возьмём VDS начальной ценовой категории в $10/месяц. Можно туда поместить 100 сайтов на WordPress? Вряд ли! А можно поместить 100 сайтов на какой-нибудь лёгкой CMS'ке? Можно и даже больше! Данный пример ближе всего SEO'шникам.Теория
Что нужно получить в итоге: 1. CMS должна работать с одной БД для нескольких сайтов. 2. CMS должна потреблять минимум оперативной памяти. 3. Админка: — Список контента (редактирование, удаление). — Операции с категориями (добавление, редактирование, удаление). 4. Лёгкая встраиваемость в любые шаблоны.1. Одна БД для нескольких сайтов
Решается просто. При инсталляции все таблицы будут иметь свой префик. Например: site1_content site1_categories site2_content site2_categories Таким образом, одна БД на слабом VDS может спокойно обслуживать несколько десятков сайтов, а то и более, в зависимости от количества контента.
2. Минимум потребления памяти
Всё очень просто. В CMS не будет никаких наворотов, только то, что нужно для работы. И так как основной контент — это текст, тяжести никакой не должно быть.Админка
В админке никаких логинов, только пароль админа для аутентификации. Страница входа, страница со списком статей (справа от названия статей ссылки на редактирование и удаление), страница для работы с категориями (тот же принцип: добавить новую, отредактировать старую, а вот удаления не будет, об этом позже), страница добавления контента и ссылка «Выход».Почему нельзя удалить категорию? Потому что в БД в таблице site1_content у каждой статьи есть поле category. Статьи из базы никуда не денутся, просто не будет отображаться категория со статьями и придётся редактировать статьи, меняя категорию.
Лёгкая встаиваемость в шаблоны
Достигается просто includ'ами. В данном примере инклуды файлов header.php, content.php, menu.php. Просто нужно вставить инклуд в нужно место. Header.php вверху, content и menu в соответствующие места. Вот и вся работа с шаблонами!
Файлы
Следующие файлы будут в поставке:
/site1/index.php
/site1/login.php
/site1/conf.php
/site1/.htaccess
/site1/header.php
/site1/content.php
/site1/menu.php
/site1/admin.php
/site1/admin-edit.php
/site1/admin-cat.php БД
Для начала в конфиге указываем данные для БД: user, base, host, pass, prefix (!) Важно для каждой новой установки указывать уникальный префикс, иначе при новой инсталляции в одну базу данных могут пострадать уже существующие. Можно конечно написать проверку есть ли уже такие таблицы, но мы же ленивые.Скрипт установки таблиц в БД сначала читает конфиг, а потом создаёт таблицы с префиксами:
$content=$prefix."content"; $categories=$prefix."categories";Струтура таблиц примерно такая:
site1_content -> `id` INT(7) NOT NULL AUTO_INCREMENT PRIMARY KEY, `category` INT(3) NOT NULL, `title` VARCHAR(250) NOT NULL, `text` TEXT NOT NULL, `keywords` VARCHAR(250) NOT NULL, `date` VARCHAR(20) NOT NULL, `link` VARCHAR(250) NOT NULL)
link — это ссылка на источник контента. Мы ведь уважаем труд авторов статей?
site1_categories -> `id` INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(250) NOT NULL
Алгоритм CMS'ки
Header.php получает запрос (через GET переменные) и в зависимости от того, какая страница запрошена делает соответствующий запрос к БД + 1 запрос для меню. Далее данные сохраняются в переменных.Menu.php циклом выводит меню.
Content.php циклом (если это index или category) выводит список статей (анонсами) или саму статью (если это content).
К слову о GET запросе. Это может выглядеть так: site1.tld/category.php?id=5 или так: site1.tld/category5/. Всё зависит от фантазии и .htaccess
Послесловие
Естественно не имеет смысла разбирать все аспекты до мелочей. Всё описанное не просто теория. У меня есть рабочая версия, которую я использую для SEO раскрутки своих СДЛ (сайтов для людей).Практика показала, что потребление памяти всего 256Кб на скрипт. Одна база спокойно выдерживает на слабом VDS около 50 установок, в каждой из которых около 200 статей. Может быть может и больше, не тестировал отказоустойчивоть VDS'ки.
Спасибо за внимание!
P.S: мне нравится изобретать велосипед
it-giki.com
Архитектура простейшей CMS на PHP+MySQL / Песочница / Хабр
Предисловие
Очень лёгкая CMS может понадобиться в разных случаях. Например, если слабый сервер или нужно разместить очень много сайтов на одну железку с ограниченными ресурсами. К примеру, возьмём VDS начальной ценовой категории в $10/месяц. Можно туда поместить 100 сайтов на WordPress? Вряд ли! А можно поместить 100 сайтов на какой-нибудь лёгкой CMS'ке? Можно и даже больше! Данный пример ближе всего SEO'шникам.
Теория
Что нужно получить в итоге: 1. CMS должна работать с одной БД для нескольких сайтов. 2. CMS должна потреблять минимум оперативной памяти. 3. Админка: — Список контента (редактирование, удаление). — Операции с категориями (добавление, редактирование, удаление). 4. Лёгкая встраиваемость в любые шаблоны.1. Одна БД для нескольких сайтов
Решается просто. При инсталляции все таблицы будут иметь свой префик. Например: site1_content site1_categories site2_content site2_categories Таким образом, одна БД на слабом VDS может спокойно обслуживать несколько десятков сайтов, а то и более, в зависимости от количества контента.2. Минимум потребления памяти
Всё очень просто. В CMS не будет никаких наворотов, только то, что нужно для работы. И так как основной контент — это текст, тяжести никакой не должно быть.
Админка
В админке никаких логинов, только пароль админа для аутентификации. Страница входа, страница со списком статей (справа от названия статей ссылки на редактирование и удаление), страница для работы с категориями (тот же принцип: добавить новую, отредактировать старую, а вот удаления не будет, об этом позже), страница добавления контента и ссылка «Выход».Почему нельзя удалить категорию? Потому что в БД в таблице site1_content у каждой статьи есть поле category. Статьи из базы никуда не денутся, просто не будет отображаться категория со статьями и придётся редактировать статьи, меняя категорию.
Лёгкая встаиваемость в шаблоны
Достигается просто includ'ами. В данном примере инклуды файлов header.php, content.php, menu.php. Просто нужно вставить инклуд в нужно место. Header.php вверху, content и menu в соответствующие места. Вот и вся работа с шаблонами!Файлы
Следующие файлы будут в поставке: /site1/index.php /site1/login.php /site1/conf.php /site1/.htaccess /site1/header.php /site1/content.php /site1/menu.php /site1/admin.php /site1/admin-edit.php /site1/admin-cat.php
БД
Для начала в конфиге указываем данные для БД: user, base, host, pass, prefix (!) Важно для каждой новой установки указывать уникальный префикс, иначе при новой инсталляции в одну базу данных могут пострадать уже существующие. Можно конечно написать проверку есть ли уже такие таблицы, но мы же ленивые.Скрипт установки таблиц в БД сначала читает конфиг, а потом создаёт таблицы с префиксами:
$content=$prefix."content"; $categories=$prefix."categories";
Струтура таблиц примерно такая:
site1_content -> `id` INT(7) NOT NULL AUTO_INCREMENT PRIMARY KEY, `category` INT(3) NOT NULL, `title` VARCHAR(250) NOT NULL, `text` TEXT NOT NULL, `keywords` VARCHAR(250) NOT NULL, `date` VARCHAR(20) NOT NULL, `link` VARCHAR(250) NOT NULL)
link — это ссылка на источник контента. Мы ведь уважаем труд авторов статей?
site1_categories -> `id` INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(250) NOT NULL
Алгоритм CMS'ки
Header.php получает запрос (через GET переменные) и в зависимости от того, какая страница запрошена делает соответствующий запрос к БД + 1 запрос для меню. Далее данные сохраняются в переменных.
Menu.php циклом выводит меню.
Content.php циклом (если это index или category) выводит список статей (анонсами) или саму статью (если это content).
К слову о GET запросе. Это может выглядеть так: site1.tld/category.php?id=5 или так: site1.tld/category5/. Всё зависит от фантазии и .htaccess
Послесловие
Естественно не имеет смысла разбирать все аспекты до мелочей. Всё описанное не просто теория. У меня есть рабочая версия, которую я использую для SEO раскрутки своих СДЛ (сайтов для людей).Практика показала, что потребление памяти всего 256Кб на скрипт. Одна база спокойно выдерживает на слабом VDS около 50 установок, в каждой из которых около 200 статей. Может быть может и больше, не тестировал отказоустойчивоть VDS'ки.
Спасибо за внимание!
P.S: мне нравится изобретать велосипед
habr.com
Строим свою CMS на PHP и MySQL. Часть 4
В предыдущих уроках серии мы сделали базу данных и логику приложения для нашей CMS. Теперь разберемся с визуальным представлением. Создадим шаблоны для клиентской части. 1. Клиентская частьСоздаем папку с именем templates в папке cms нашего проекта. Затем создаем папку с именем include в папке templates. В последней папке мы поместим разметку для заголовка и нижнего колонтитула, которые будут одинаковы для всех страниц сайта. Поэтому их можно включать в каждый шаблон нашего проекта.
Создаем файл с именем header.php в папке include и копируем в него следующий код:
Code
<!DOCTYPE html> <html lang="en"> <head> <title></title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div> <a href="."><img src="images/logo.jpg" alt="Widget News" /></a>
Данный код просто выводит разметку начала страницы HTML. Здесь используется переменная $results['pageTitle'], передаваемая из основного скрипта (index.php или admin.php), для установки элемента title, а также присоединяется таблица стилей style.css (мы создадим ее чуть позже).
Обратите внимание, что значение переменной $results['pageTitle'] передается через функцию htmlspecialchars(). Данная функция кодирует любые специальные символы HTML (такие как <, > или &) в эквиваленты (<, > и & соответственно). Вместе с фильтрацией ввода, которую мы разбиради в предыдущих уроках серии при создании конструктора класса Article кодирование вывода является хорошей привычкой для повышения безопасности сайта. Мы будем кодировать практически все данные в нашем шаблоне подобным образом.
Теперь создаем файл с именем footer.php в той же папке:
Code
<div> Widget News © 2011. All rights reserved. <a href="admin.php">Site Admin</a> </div> </div> </body> </html>
Данная разметка завершает каждую HTML страницу в нашей системе.
homepage.php
Вернемся в папку templates и создадим в ней файл homepage.php, в который копируем следующий код:
Code
<ul> <li> <h3> <span> </ul> <p><a href="./?action=archive">Article Archive</a></p>
Данный шаблон выводит заголовки статей на главной странице в виде неупорядоченного списка. Скрипт проходит циклом по массиву объектов Article, который хранится в $results['articles'], и выводит для каждой статьи дату публикации, название и резюме. Название ссылается на '.' (index.php), передавая параметр action=viewArticle вместе с ID статьи в URL. Таким образом, пользователь может прочитать статью, нажав на ссылку названия.
Также шаблон включает ссылку на архив статей ("./?action=archive").
Обратите внимание, что данный шаблон, как и последующие, использует директиву PHP include для включения начала страницы и нижнего колонтитула.
archive.php
Теперь создаем файл archive.php в каталоге templates и помещаем в него код:
Code
<h2>Article Archive</h2> <ul> <li> <h3> <span> </ul> <p> article in total.</p> <p><a href="./">Return to Homepage</a></p>
Данный шаблон выводит архив всех статей, которые имеются в нашей CMS. Код практически идентичен homepage.php. Здесь добавляется класс CSS archive для неупорядоченного списка, чтобы мы могли формировать пункты списка отличными от главной страницы. Также добавляем год в дату публикации, так как архив может содержать данные за несколько лет.
На странице также выводится общее число статей в базе данных, которое мы получаем с помощью $results['totalRows']. А вместо ссылки на архив выводится ссылка на главную страницу "Return to Homepage".
viewArticle.php
Последний шаблон для клиентской части выводится статью для пользователя. Создаем файл с именем viewArticle.php в папке templates folder и копируем в него следующий код:
Code
<h2>content?></div> <p>Published on
Данный шаблон имеет достаточно простой код. Здесь выводится для выбранной статьи название, резюме, содержание и дата публикации. Кроме того на страницее размещается ссылка для возвращения на главную.
Шаблон для клиентской части готов. В следующем уроке мы сделаем шаблон для серверной части нашей CMS.
get-element.3dn.ru