Архитектура простейшей 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


Prostoy-Site | Все права защищены © 2018 | Карта сайта