Cms на php инклудах: Архитектура простейшей CMS на PHP+MySQL / Habr

Содержание

Архитектура простейшей CMS на PHP+MySQL / Habr

Предисловие

Очень лёгкая 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 < — единственный файл с дизайном, хорошо подходят css шаблоны, в него и нужно добавить инклуды

/site1/login.php < — страница ввода пароля админа

/site1/conf.php < — конфигурация, данные БД, md5 хэш пароля админа, данные сайта: title, description, keywords.

/site1/.htaccess < — если нужна своя особая структура ссылок

/site1/header.php < — здесь происходят все действия с БД

/site1/content. php < — вывод контента: если это страница, то выводим статью, если категория, то выводим список статей в этой категории, если главная страница, то выводим последние XX статей по дате или id

/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: мне нравится изобретать велосипед

Сайт о программировании в Pawn

Pawn.Wiki — Сайт о программировании в Pawn

Перейти к содержимому




Типичный Скриптер SAMP — паблик, посвящённый скриптингу и всему, что с ним связано.

По всем вопросам, касающимся размещения рекламы на сайте обращайтесь в Telegram: ссылка

Список форумов

Школа скриптинга

Уроки, готовые решение и прочее.

Подфорумы:
  1. Уроки
  2. Готовые решения
  3. Стандартные и полезные функции
  4. Интересные команды
  5. ID’S
  • Тема: Работа с CEF
  • Посл. сообщение:

    Nikiyp 

    Вчера, 22:09

Первая помощь

Помощь в pawn скриптинге.

Подфорумы:
  1. Вопросы по скриптингу
  2. Проблемы с компилированием
  3. Помогите найти
  • Тема: Array index out of bounds
  • Посл. сообщение:

    Pa4enka 

    Сегодня, 04:12

Загрузки

Моды, скрипты, маппинг и прочее загрузки.

Подфорумы:
  1. Моды
  2. Скрипты
  3. Маппинг
  4. Текстдравы
  5. Инклуды
  6. Плагины
  7. Программы
  8. Разное
  • Тема: Addhousemenu для мода Arizo…
  • Посл. сообщение:

    Dubrovski 

    02 января 2023 — 22:36

Другое

Другие темы которые относятся к тематике pawn.

Подфорумы:
  1. Разработки
  • Тема: Не рендериться Батырево
  • Посл. сообщение:

    4eburek 

    27 декабря 2022 — 14:11

Новости

Последние новости мультиплеера и их обсуждения.

  • Тема: SA-MP 0. 3.7-R5-1 клиент
  • Посл. сообщение:

    Romzes 

    01 декабря 2022 — 23:36

Хостинги

Хостинги для SAMP серверов.

Подфорумы:
  1. Проверенные
  2. Пользовательские
  • Тема: React Labs — игровой хостин…
  • Посл. сообщение:

    DieSeL 

    01 января 2023 — 03:45

Сервера

Игровые сервера SAMP.

Подфорумы:
  1. Обзоры
  2. Анонсы
  • Тема: Stories RP Скоро открытие
  • Посл. сообщение:

    TuathaDe 

    26 ноября 2022 — 18:31

Модификации

Модификации для SAMP и GTA SA.

Подфорумы:
  1. Транспорт
  2. Скины
  3. Оружие
  4. Модели
  5. Программы
  6. Разное
  • Тема: Проблемы с экспортом модели…
  • Посл. сообщение:

    zzzzzzz 

    23 декабря 2022 — 16:00

Торговая площадка

Здесь можно купить или продать товар.

Подфорумы:
  1. Стол заказов
  2. Услуги
  3. Вакансии
  4. Продажа
  5. Покупка
  • Тема: Необходимо преобразовать in…
  • Посл. сообщение:

    shaony 

    Вчера, 10:10

Графика

Обсуждения связанные с графикой.

  • Тема: [Видео урок] Аватарка для п…
  • Посл. сообщение:

    KakTyC7153 

    04 сентября 2020 — 11:47

Движки сайтов

IPB, vBulletin, phpBB, DLE и другое.

  • Тема: Стиль для форума
  • Посл. сообщение:

    Max_Ptaschnick 

    13 апреля 2022 — 16:59

Программирование

Обсуждение языков программирования.

  • Тема: Запуск сборки самп
  • Посл. сообщение:

    MaksimLebedev 

    22 декабря 2022 — 13:20

Интернет

Соцсети, поисковики, партнерки и многое другое.

  • Тема: Антидетект браузер AdsPower…
  • Посл. сообщение:

    AdsPower 

    Вчера, 16:28

Портфолио

Портфолио пользователей форума.

  • Тема: M I S T E V
  • Посл. сообщение:

    M I S T E V 

    06 апреля 2022 — 11:31

Беседка

Разговоры на различные темы.

  • Тема: История про «скриптера…
  • Посл. сообщение:

    Pawn_Coder 

    13 декабря 2022 — 08:40

Новости форума

Список важных новостей и обновлений форума.

  • Тема: Новогоднее обновление форум…
  • Посл. сообщение:

    m1n1vv 

    22 декабря 2017 — 23:28

Технический раздел

Предложения, замечания и вопросы по работе форума.

  • Тема: Смена ника
  • Посл. сообщение:

    Romzes 

    21 декабря 2022 — 17:27

Платные услуги

Платные услуги от нашего форума.

  • Тема: Античит для SAMP
  • Посл. сообщение:

    Romzes 

    04 декабря 2017 — 11:12

Наши проекты

Список проектов которые принадлежат нам.

  • Тема: pawn.2al.ru
  • Посл. сообщение:

    carlincv 

    07 октября 2022 — 00:41









PHP включает и требует

❮ Предыдущий
Далее ❯


Оператор include (или require ) принимает весь текст/код/разметку, существующий в указанном файле, и копирует его в
файл, в котором используется оператор include.

Включение файлов очень полезно, когда вы хотите включить тот же PHP,
HTML или текст на нескольких страницах веб-сайта.


Операторы PHP include и require

Можно вставить содержимое одного файла PHP в другой файл PHP (перед
сервер выполняет его) с оператором include или require.

Инструкции include и require идентичны, за исключением случаев сбоя:

  • require вызовет фатальную ошибку (E_COMPILE_ERROR) и остановит скрипт
  • include выдаст только предупреждение (E_WARNING) и сценарий будет продолжен

Итак, если вы хотите, чтобы выполнение продолжалось и отображались результаты, даже если
include файл отсутствует, используйте оператор include. В противном случае, в случае FrameWork, CMS или
сложное кодирование приложения PHP, всегда используйте оператор require для включения файла ключа в
поток исполнения. Это поможет избежать нарушения безопасности вашего приложения.
и целостности, на случай, если один ключевой файл случайно пропадет.

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

Синтаксис

включить ‘ имя файла ‘;

или

требуют ‘ имя файла ‘;


Примеры включения PHP

Пример 1

Предположим, у нас есть стандартный файл нижнего колонтитула с именем «footer.php», который выглядит следующим образом:

echo «

Авторское право © 1999-» . дата(«Г») . «W3Schools.com

«;
?>

Чтобы включить файл нижнего колонтитула на страницу, используйте оператор include :

Пример


Добро пожаловать на мою домашнюю страницу!

Текст.

Еще текст.


Выполнить пример »



Пример 2

Предположим, у нас есть стандартный файл меню с именем «menu. php»:

echo ‘Home
Учебное пособие по HTML
Учебное пособие по CSS
Учебное пособие по JavaScript
Учебное пособие по PHP‘;
?>

Все страницы веб-сайта должны использовать этот файл меню. Вот как это можно сделать
(мы используем элемент

, чтобы позже меню можно было легко стилизовать с помощью CSS):

Пример


Добро пожаловать на мою домашнюю страницу!

Некоторые текст.

Еще текст.


Выполнить пример »


Пример 3

Предположим, у нас есть файл с именем «vars.php», в котором определены некоторые переменные:

$color=’red’;
$car=’БМВ’;
?>

Затем, если мы включим файл «vars. php», переменные можно будет использовать в вызывающем файле:

Пример


Добро пожаловать на мою домашнюю страницу!

echo «У меня $color $car.»;
?>


Пример выполнения »


PHP include vs. require

Оператор require также используется для включения файла в код PHP.

Однако между include и require есть одно большое различие; когда
файл включен в оператор include , и PHP не может его найти, сценарий
будет продолжать выполняться:

Пример


Добро пожаловать на мою домашнюю страницу!

echo «У меня $color $car.»;
?>


Пример запуска »

Если мы сделаем тот же пример с оператором require ,
Оператор echo не будет выполнен, потому что выполнение скрипта прекращается после того, как
Оператор require вернул фатальную ошибку:

Пример


Добро пожаловать на мою домашнюю страницу!

php’;
echo «У меня $color $car.»;
?>


Пример выполнения »

Используйте require , когда файл требуется приложению.

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


PHP-упражнения

Проверьте себя с помощью упражнений

Упражнение:

Напишите правильный синтаксис для включения файла с именем «footer.php».


 

❮ Предыдущий
Следующий ❯

ВЫБОР ЦВЕТА



Лучшие учебники

Учебник по HTML
Учебник по CSS
Учебник по JavaScript
Учебник How To
Учебник по SQL
Учебник по Python
Учебник по W3.CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery

900 Справочник

900
Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3. CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery

Основные примеры

Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery


|
О

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

Copyright 1999-2023 Refsnes Data. Все права защищены.
W3Schools работает на основе W3.CSS.

Вставить PHP на страницу — CMS и WordPress — Форумы SitePoint

avidrunner

#1

Я попробовал несколько плагинов и не могу найти ни одного, который работает для простого включения PHP на мою страницу WordPress. Есть ли у кого-нибудь рекомендации? И есть ли причина, по которой WordPress не поддерживает включение PHP в страницы через WYSIWYG-редактор по умолчанию?

Спасибо

WebMachine

#2

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

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

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

avidrunner

#3

Страница, на которую я публикую сообщения, уже использует шаблон. Однако включение SVG должно находиться в области содержимого этого шаблона. Поэтому я считаю, что мне нужно использовать WYSIWYG.

Есть ли подключаемый модуль PHP, который работает с последней версией WordPress для этого?

Веб-машина

#4

Пробовали ли вы искать в репозитории плагинов на сайте WordPress? Там перечислено несколько плагинов, которые могут выполнить эту работу: https://wordpress. org/plugins/search/Insert+PHP/

SamA74

#5

Я не люблю слишком много ссылаться на темы, но просто для контекста я полагаю, что проблема связана с этой темой:-

Но я считаю уместным продолжить обсуждение этого здесь, так как это проблема, специфичная для WP, не имеющая прямого отношения к html и css.

Веб-машина

#6

Не могли бы вы сделать php-код, который хотите включить в шаблон? Тогда этот плагин: https://wordpress.org/plugins/improved-include-page/ может сделать эту работу за вас. Кажется, он включает шаблон внутри другой страницы или сообщения.