Php и mysql пишем свою cms


Содержание

Php и mysql пишем свою cms

Nickolay.info. PHP. Самая простая CMS или пишем элементарный «движок» на PHP

Заметка родилась как ответ на вопрос одного знакомого. Вопрос был примерно такой:

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

Что ж, эта статья как раз описывает «самую простую в мире» CMS (систему управления динамическим сайтом). Наверное, можно ещё проще, но так как этот мини-«движок» я буду писать прямо сейчас вместе с текстом, то уж как получится.

На сайте уже есть статьи, где можно посмотреть как «заочно» заказать и оплатить хостинг и как закачивать файлы по ftp (там про Perl, но это совершенно неважно), так что на этих моментах я останавливаться не буду, будем считать, что у Вас есть домен и ссылка ftp, по которой Вы можете закачать файлы в корневую папку своего будущего сайта. Кстати, нам подойдут и многие современные бесплатные хостинги, достаточно поддержки PHP 4.3 и выше, а никакие базы данных MySQL для такой элементарной задачи не нужны.

Кроме того, папки на сайте хостера уже обычно настроены так, что «главный файл» index.php отображается автоматически, то есть,

означает абсолютно то же самое, что

Поэтому главный файл нашего движка тоже будет называться index.php

Структура нашего «движка» будет такой:

  • config.php — файл с настройками, которые Вы сможете поменять «под себя»;
  • index.php — главный файл, который будет выводить и показывать страницы;
  • header.php — файл с верхом каждой страницы сайта;
  • footer.php — файл с низом каждой страницы сайта;
  • style.css — стилевой файл, который можно пополнить нужными стилевыми настройками отображения тегов (CSS);
  • p — вложенная папка, куда мы разместим файлы *.html с кодом страниц, картинки и прочее содержимое, уже не относящееся к «движку». В этом простом примере наш сайт будет одноуровневым, то есть, все страницы из папки p будут равноправны между собой и доступны из автоматически сформированного меню на любой из них. Это не так уж плохо для небольших по объёму сайтов.

Сначала напишем config.php , это единственный файл «движка», куда Вам может понадобиться внести свои настройки. Вот он с комментариями (всё, что после символов // до конца строки — это комментарии, они не обрабатываются интерпретаторами PHP), выделенное красным можно менять, естественно, можно добавлять/удалять любое количество записей о файлах сайта в указанном виде.

Все апострофы ‘ имеют значение! Если вдруг Вам понадобился апостроф внутри названия страницы:

Кроме того, здесь мы уже сказали, что файл с заголовком Mike’s cool site сохранён под именем index.html . В какой папке? В папке p , где будут и все остальные файлы!

Какие хитрости есть в именовании файлов и самих страниц не только для этого скрипта, но и для любого другого?

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

Вашей Windows всё равно, БОЛЬШИЕ или маленькие буквы Вы использовали в названии файла, но почти любому реальному серверу это небезразлично! Осваивайте файловый менеджер Far Manager, там клавишей F11 вызывается меню внешних модулей, где есть команда «преобразование регистра» — она позволяет моментально решить данную проблему.

Во-вторых, русскоязычное имя Вашей страницы будет показано в верхней строке браузера и станет именем закладки на страницу, если кто-то таковую сделает. Поэтому не нужно использовать в титуле страницы всяких сомнительных знаков, вроде , > , + , ? , ! , ‘ , » и т.п. (а вот точку, запятую, дефис — можно), лучше всего, если титулом будет естественный текст вроде «Главная страница» или «Мои программы».

Кроме того, перед названием конкретной страницы удобно дописывать название всего сайта, чтобы в строке заголовка браузера или вкладки получилось что-то вроде «Мой сайт — Главная страница». Эту возможность мы «зашьём» в движок автоматически, а если Вам этого не надо — просто очистите название всего сайта в настройках config.php .

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

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

Сам «движок» займёт совсем немного места, причём, большая часть кода уйдёт на всякие проверки корректности и исключения лишнего. Теперь пишем этот движок, то есть, файл index.php :

Служебная функция title сохраняет в статической переменной титул страницы (пришлось вынести этот код в отдельную функцию — ведь выводиться заголовок будет при формировании общей «шапки» всех страниц, а мы решили вынести его в отдельный файл header.php ), затем создаётся пустой массив страниц, подключается файл конфигурации, ну а дальше все действия закомментарены непосредственно в листинге.

Обратим внимание на строчки вывода очередного пункта меню —

— здесь название пункта, в котором мы заменили пробелы на , обрамляется квадратными скобками [ . ] и заключается в тег , который хоть и нестандартен, но во всех популярных браузерах благополучно запрещает разрывать своё содержимое. Разумеется, Вы можете оформить пункты меню иначе, изменив этот код.

Кроме того, такой «сложный» оператор понадобился, чтобы не создавать ссылки на ту страницу, которая сейчас открывается. Если бы мы выводили в меню все подряд ссылки, хватило бы и такого оператора echo :

просто пытаются с помощью регулярного выражения PHP извлечь из подключённого файла HTML содержимое тега , то есть, Вы можете кидать в папку p и обычные странички, не заботясь о том, чтобы удалить из них «лишние» теги оформления html-файла. Кстати, для этого действия есть готовый метод tidy_get_body , но он появился только в PHP 5. Ну а если содержимого тега найти не удалось, файл со страничкой подключается директивой include .

Написать файлы header.php и footer.php , то есть, «шапку» и «подвал» всех страниц, можно как обычные HTML, я ограничусь простейшим вариантом. Единственный нюанс, который нужно учесть — подключить в файле header.php из тега вывод сформированного нами динамически заголовка окна:

Так что получаем вот такой header.php

и простейший footer.php вида

Добавьте по своему вкусу всё, что угодно в шапке и подвале — и получите «дизайн».

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

Вы также можете полностью переписать этот файл style.css по своему вкусу.

Разумеется, все файлы «движка» нужно скинуть в одну папку — предполагается, что это и есть корневая папка сайта, а в ней создана папка p , в прикреплённом ниже архиве она содержит 3 простейших странички. Я старался не использовать никакого кода, зависящего от настроек или версии PHP, так что, скорее всего, всё заработает — по крайней мере, у меня произошло именно так.

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

P.S. Конечно же, ничто не мешает переделать по своему вкусу оформление вывода в файле index.php , например, если вам не нравится горизонтальное меню, а хочется вертикального. Вот всё, что изменится:

В левую колонку будет выведено меню, а в правую — содержимое. Детали оформления можно поменять, если сделать другую разметку тегами HTML.

О чем молчит интернет

§4. PHP и MySQL — пишем свою CMS

Как написать свою CMS на базе PHP и MySQL? Как сделать собственную административную панель (админку) на php?

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

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

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

§3. Резюме последних двух уроков №1 и №2

В итоге двух уроков, мы имеем такую интересную структуру нашего небольшого, но работающего на php, сайтика:

define ( ‘PRO’ , 1);
include ( «options.php» );
include ( «maketop.php» ); ?>

§2. Как сделать выпадающее вертикальное меню на php

Как сделать выпадающее вертикальное меню на PHP и HTML?

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

Выпадающий список на php

§1. Пример создания сайта на php

Пример создания сайта на PHP

Конечно для создания простого сайта можно использовать CMS Joomla или просто сделать сайт на WordPress, но зачем стрелять по комарам из пистолета?

Создание сайта на php

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

Php и mysql пишем свою cms

Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

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

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

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

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

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Илон Маск рекомендует:  Глава 7 редактирование исходных файлов

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

Своя CMS на PHP. Часть 1

Здравствуй мой юный кодер, сегодня МЫ с тобой начнем писать свою простенькую 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:

if(!@$_SESSION[‘group_id’])//Если пользователь только что зашел
<
$_SESSION[‘user’]=’Гость’;
$_SESSION[‘ > $_SESSION[‘group_ > $_SESSION[‘last_click’]=$time;
>

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

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

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

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

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

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

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

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

Пишу свой CMS на php+mysql (mvc)

Захотел написать свой CMS. Опыта в ООП нет. Прошу опытных программистов проанализировать мой код. и поправить если что-не так.
В будущем хочу заменить свой самописный движок (юзал функциональное программирование) http://kaliningrad-life.ru/ на новый движок, который сейчас пишу.

Итак..модель всего проекта

Точка входа:
/index.php
GET — переменные:
$_GET[‘site_page’]
Потом будут и друние

/libs/class.main.php
Ядро движка.
Здесь происходит подключение нужных мудулей, в зависимости от переменной $_GET[‘site_page’]
также сюда подключается шаблонизатор смарти
Здесь же находится класс для работы с БД

В папке /libs/modules/ будут лежать папки с модулями.
Например для главной страници свой модуль, для списка новостей — свой модуль, для доски объявлений — свой модуль.

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

Ну и модуль main.php

Чтобы вы посоветовали изменить? Опыта у меня нет. Во всем сомневаюсь. например стоит ли организовывать ядро как сделано у меня.
Если у Вас есть хорошие, но не сложные примеры движка на mvc — то выложите пожалуйста куски кода.

Php и mysql пишем свою cms

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

Начинающий веб-разработчик

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

Вы уже изучали PHP и MySQL

Знания у вас есть, а применить их никак не получается. Потому что знания по PHP и MySQL могут и быть, но затруднение вызывает именно сама разработка, сам процесс написание цельного рабочего кода

Опытный разработчик

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

Узнали себя?

Если вы попали в одну из этих категорий, возможно, вам будет полезно прочитать содержимое этой страницы очень внимательно

Что такое PHP,
и для чего он нужен?

PHP — самый популярный язык программирования среди веб-разработчиков в мире. Абсолютное большинство всех сайтов в интернете написаны на PHP.

PHP является скриптовым серверным языком. Это значит, что все скрипты, написанные на этом языке, выполняются на локальном либо удаленном сервере с сайтом (сфера backend-разработки).

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

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


Эти качества обеспечили языку PHP его нынешнее выдающееся положение.

PHP – безусловный мировой лидер сайтостроения

Согласно данным авторитетной организации W3Techs.com, по состоянию на 1 февраля 2020 года PHP используется на 83,1% среди всех сайтов в мире. Этот язык превосходит своего ближайшего конкурента ASP.NET почти в 6 раз!

Популярные мировые сайты, использующие РНР

WEBFORMYSELF ПРЕДСТАВЛЯЕТ ФУНДАМЕНТАЛЬНЫЙ ПРАКТИЧЕСКИЙ ВИДЕОКУРС

PHP-Мастер

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

Посмотрите видео и узнайте о курсе подробнее

Что внутри

Основная часть курса включает 85 уроков общей продолжительностью почти 30 часов:

  • Часть 1. Показано написание собственного фреймворка
  • Часть 2. Показано написание пользовательской части CMS интернет-магазина
  • Часть 3. Показано написание администраторской части CMS интернет-магазина

Бонусный блок курса состоит из 6 абсолютно новых актуальных видеокурсов и серий уроков, созданных с полного нуля и нигде не встречавшихся до этого:

  • Бонус 1. Премиум курс по PHP+PHP 7 и MySQL
  • Бонус 2. Премиум курс по ООП PHP
  • Бонус 3. Перенос сайта на хостинг
  • Бонус 4. Подключение платежной системы
  • Бонус 5. Личный кабинет покупателя
  • Бонус 6. Канонические URL

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

Все необходимые для изучения основного курса дополнительные материалы входят в него бонусами. Поэтому новичкам прямая дорога к бонусной части!

Что вы получаете, приобретая данный курс

КОМПЛЕКСНОСТЬ И ПРАКТИКА

Краткий ответ можно дать в двух словах – КОМПЛЕКСНОСТЬ и ПРАКТИКА.

Курс имеет именно практическую направленность. А бонусы к курсу – закрывают полностью всю необходимую теоретическую базу.

Как итог, пожалуй, наиболее исчерпывающий видеокурс по данной тематике на рынке!

АВТОМАТИЗАЦИЯ И УСКОРЕНИЕ РАБОТЫ

В этом видеокурсе показано не только создание движка для интернет-магазина, но еще и создание фреймворка, на котором и пишется CMS.

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

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

БЕСЦЕННЫЙ ОПЫТ И ПОРТФОЛИО

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

И если вы освоите разработку интернет-магазина, то после этого сможете разработывать любой другой вид сайта: сайт-визитку, корпоративный сайт, блог, новостной портал и т.д.

Результат практической части

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

Итоговый функционал CMS интернет-магазина

Вот основная часть функционала CMS интернет-магазина, который создается в курсе:

  • Категории товаров с неограниченным уровнем вложенности
  • Товары и модификации товаров
  • Корзина с возможностью добавления товара без перезагрузки страницы
  • Мультивалютность и возможность добавления новых валют
  • Модуль связанных товаров (с этим товаром также покупают)
  • Модуль просмотренных товаров
  • Живой поиск по товарам
  • Регистрация и авторизация покупателя
  • Личный кабинет покупателя
  • Оформление заказа и онлайн оплата
  • Фильтры товаров
  • Постраничная навигация для товаров
  • Хлебные крошки
  • Администраторская часть для управления магазином

Подробное содержание курса

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

Часть 1

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

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

Илон Маск рекомендует:  Шаблон сайта веб студии, используется – HTML + CSS + Flash

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


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

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

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

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

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

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

Часть 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Часть 3

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

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

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

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

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

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

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

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

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

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

На что вы можете рассчитывать

Если вы новичок

Если вы только делаете первые шаги в веб-разработке и у вас нет теоретической базы, то данный курс подойдет для вас идеально – вы получите комплексные, четкие, структурированные знания по PHP и MySQL.

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

Изучив курс, вы увидите, как происходит разработка скриптов и создание CMS будущего интернет-магазина. И самое главное – как это делать правильно.

Всем новичкам необходимо начать изучение курса с бонусного блока, в котором содержится ВСЯ теоретическая база по PHP и MySQL для старта с полного нуля.

Если вы действующий разработчик

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

Данный курс может стать для вас именно тем самым рывком вперед, который покажет, как перейти от теории к практике создания динамических веб-приложений.

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

БОНУСНЫЕ КУРСЫ

ПРЕМИУМ КУРС

Количество уроков: 39
Автор: Андрей Кудлай

БОНУС 1.

PHP + PHP7 + MySQL

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

Также курс будет представлять ценность для новичков, которые возможно уже изучили PHP, но у них нет практики работы с этим языком программирования. Здесь простым и понятным языком объясняется теория и практика работы с PHP.

В курсе рассматривается язык PHP с нуля, с самых-самых основ, с синтаксиса языка, понятия переменной, функции и прочее.

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

Логическим продолжением изучения теории и практики работы с PHP, будут уроки, посвященные нововведениям новой версии языка – PHP 7. Эта версия стала куда быстрее своих предшественниц и в ней появились некоторые полезные возможности, о которых вам, возможно, было бы интересно узнать.

В уроках по PHP 7 рассматриваются новые операторы и функции, новые возможности, двигающие PHP в сторону языков со строгой типизацией. Все это рассмотривается в логическом продолжении основного курса по PHP – в уроках по новинкам PHP 7.


Читать подробнее.

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

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

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

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

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

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

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

Четыре больших урока отведены такой важной практической теме, как работа с базой данных. Здесь изучаются основы работы с СУБД MySQL, пишутся SQL-запросы, благодаря которым станет возможным простое оперирование массивами данных.

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

Уроки PHP и MySQL. Урок 5. Формы и базы данных в web

Урок посвящен языку PHP и базе данных MySQL. Рассматривается взаимодействие PHP и MySQL, способы занесения данных из формы в базу данных и вывод данных из базы на web-страницу.

В данном уроке PHP и MySQL Вам предстоит решить следующие задачи:

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

2. Создать web-страницу, на которых будут размещена форма для подачи объявлений о потерявшихся кошках. Данные из этих объявлений заносятся в соответствующую таблицу сведений о потерявшихся животных.

3. Создать web-страницу, позволяющую просматривать информацию из базы данных. Данные в таблицы базы данных будут вноситься из объявлений, размещенных посетителями на сайте.

Задание № 1. Создание базы данных

Наши уроки PHP и MySQL начнем с создания базы данных.

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

Название поля
Имя поля Тип поля Описание
идентификационный номер породы id Числовой
название породы name_por Символьный
характеристика породы describe_por Символьный В поле хранится имя файла, который содержит описание породы и фотографию.

Сведения о потерявшихся кошках

Название поля
Имя поля Тип поля Описание
идентификационный номер кошки id Числовой
порода por Символьный
дата нахождения кошки:
день
месяц
год
day
month
year
Символьный
Символьный
Символьный
место нахождения кошки place Символьный
пол кошки pol Символьный
возраст кошки age Символьный Если возможно указать примерный возраст
описание кошки outline Символьный Окрас, состояние здоровья и т. д.
координаты нашедшего contact Символьный Любая контактная информация: телефон, e-mail, адрес
дополнительная информация dop_info Символьный Например, кошка больна, есть клеймо, кормящая и пр.

В наших уроках PHP и MySQL рассмотрим два способа создания таблицы базы данных.

1. С помощью клиента MySQL.

2. Средствами PHP.

Способ 1. Создание базы данных с помощью клиента MySQL

С помощью клиентской программы MySQL — «phpMyAdmin» создадим таблицу Справочник пород (таблица 1).

1. Запустите Denwer ярлыком Start Denwer.

2. Запустите браузер и перейдите по ссылке http://localhost/. На открывшейся странице в разделе Утилиты запустите: phpMyAdmin — администрирование СУБД MySQL. Запустится программа phpMyAdmin (рис. 1).

3. Создайте новую базу данных. Для этого впишите в поле Создать базу данных имя базы catsdb, кодировку установите utf8_general_ci и нажмите кнопку Создать (рис. 2).

4. Если все было выполнено верно, то будет выведено сообщение об удачном создании базы.

5. Перейдите в базу данных catsdb, нажав соответствующую строку в левой панели (рис. 3).

6. Добавьте в базу данных таблицу Справочник пород, назовите ее: spravpor (структура таблицы и назначение полей приведены в таблице 1 Справочник пород). Для этого:

a. Внесите данные в поле Имя (имя таблицы — spravpor) и Количество столбцов (3), после чего нажмите кнопку ОК (рис. 4).

b. В открывшемся окне заполните данные по структуре таблицы (рис. 5).

c. После заполнения всех полей нажмите Сохранить. Перейдите в таблицу spravpor, нажав соответствующую строку в левой панели (рис. 6).

d. Откроется сама таблица (рис. 7).

Способ 2. Создание базы данных средствами PHP

В данном уроке PHP и MySQL создадим таблицу с помощью сценария PHP, но при этом база данных должна уже быть создана! В листинге 1 приведена программа создания таблицы под именем species средствами PHP. Структура таблицы species аналогична структуре таблицы spravpor.

1. Проанализируйте приведенные в листинге 1 PHP-сценарий и комментарии к нему в файле species.php.

2. Реализуйте код из листинга 1. Для этого:

  • скопируйте его в Notepad++
  • преобразуйте кодировку файла в utf-8 командой Кодировка – Преобразовать в UTF-8
  • сохраните в папку localhost/www под именем species.php
  • запустите файл, набрав в адресной строке localhost/species.php
  • появится сообщение, что таблица успешно создана (рис. 8).

3. После выполнения сценария убедитесь, что таблица species создана в базе данных catsdb (рис. 9, 10).

Листинг 1. Создание таблицы с помощью сценария PHP (файл species.php)


Комментарии к листингу 1:

1. Здесь адрес сервера MySQL — localhost (такой адрес указывается в случае если работа с базой данных ведется на локальном компьютере или компьютере где располагаются файлы с php-сценариями).

2. Программа на языке PHP обычно вставляется в HTML-текст. Поэтому предусмотрены специальные теги для отделения PHP-текста от HTML .

3. Если PHP-сценарий представляет собой самостоятельный модуль (как в листинге 1), он также должен начинаться с конструкции .

4. Любой файл, содержащий PHP-сценарий, имеет расширение php, независимо от того, встроен сценарий в HTML-текст или полностью написан на PHP.

5. Многострочные комментарии должны начинаться с символов /* и завершаться символами*/. Однострочные комментарии предваряются символами //. Закрывать их не нужно.

6. В языке PHP имя переменной начинается со знака доллара ($), за которым следует собственно имя переменной. В именах переменных различаются верхний и нижний регистры. Имя переменной должно начинаться с буквы или символа подчеркивания, за которыми могут следовать буквы, цифры или знаки подчеркивания. Буквы должны быть из диапазона A—Z.

Илон Маск рекомендует:  Vrml'97 примитивы и управление положением объектов (transform)

7. В конце каждого оператора php обязательно ставится точка с запятой.

8. Функции для работы с MySQL имеют префикс mysql_ (см. приложение 2).

В нашем уроке PHP и MySQL, используя программу из листинга 1 в качестве образца, напишите сценарий PHP для создания таблицы сведений о потерявшихся кошках (см. таблицу 2). Таблицу назовите catspotery, а файл сценария catspotery.php. Результат на рис. 11, 12

Добавление записи в базу данных

Мы подготовили таблицы базы данных. Сейчас на web-странице разместим форму подачи объявлений для тех, кто потерял кошку. Задача — обеспечить занесение информации из форм в соответствующие таблицы базы данных.


Примерный вид формы представлен на рис. 13.

При выполнениии данного урока PHP и MySQL создайте web-страницу с формой, как на рис. 13. Сохраните под именем forma_cats.html. В качестве файл-обработчика укажите poter_dobavl.php. Не забывайте о корреляции полей формы и полей соответствующей таблицы в базе данных и кодировка файла должна быть в utf-8 (Кодировка – Преобразовать в UTF-8).

Данные, введенные посетителем, заносятся в соответствующую таблицу базы данных. Имя PHP-сценария, отвечающего за эту операцию, указывается в атрибуте action тега . В листинге 2 приведен код PHP-сценария, осуществляющего подключение к серверу MySQL, выбор базы данных, запрос к базе данных. В данном случае это запрос INSERT, который вставляет данные из формы в базу данных.

1. Используя программу из листинга 2 в качестве образца, напишите PHP-сценарии, осуществляющие вставку записей в таблицы сведений о пропавших кошках.

2. Проверьте работоспособность формы. В базу данных (рис. 14) должна сохраняться информация, введенная в форму (рис. 13).

3. Наполните базу 5-ю записями.

Листинг 2. Занесение данных формы в базу данных (файл poter_dobavl.php)

Извлечение записей из базы данных

В нашем уроке PHP и MySQL Вы реализовали технологию заполнения базы данных.

Теперь необходимо реализовать задачу вывода информации из базы данных. Т.е. необходимо представить на сайте информацию из базы данных в следующем виде:

Код сценария, представленный в листинге 3, выводит информацию из базы данных на web-страницу, в соответствии с рисунком 15.

Листинг 3. Вывод информации из базы данных на Web-страницу. Передача параметров (файл vivod_poter.php)

Изучите код сценария из листинга 3 и реализуйте его. Проверьте работоспособность сценария.

Реализуйте возможность работы со справочником пород spravpor. Для этого:

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

2. Используя запросы SQL (рис. 16), заполните базу 3-мя записями про породы кошек (длинношерстные, полудлинношерстные, короткошерстные) (рис. 17). Все необходимые материалы находятся в папке cats.

3. Реализуйте web-страницу, на которую выводятся данные из справочника пород. У каждой породы должна быть фотография.

4. Если скрипт обрезает описание породы, увеличьте длину поля describe_por, чтобы можно было вводить длинные описания.

Простой движок CMS на PHP

Хочется сайт но не знаем как, а на HTML сделать с 10 страничек уже не удобно, то воспользуйтесь простым движком CMS без баз данных, только на файлах, без админки, это позволяет просто и быстро делать изменения на сайте без знания азов программирования и html-верстки.

Самый простой способ использовать CMS php функцию include(). Страниц, в виде отдельных *.php файлов, будут находиться в директории pages/. Код из index.php:

Здесь, значением переменная $page, является «название» страницы контента, которое передается скрипту методом GET или POST. Чтобы обезопасить наш CMS от попыток подсунуть в переменную $page какую-то «гадость» мы ограничим диапазон её значений соответствующим набором вариантов $pages. В дальнейшем идет проверка, есть ли полученное значение названия страницы $page в массиве $pages, в противном случае вставляем контент страницы идущей по умолчанию. В моем примере это pages/index.php. Дополнительно мы проверяем существование вставляемого файла, иначе возвращаем сообщение: «Not found».

Понятно, что вызов страницы скажем «О компании» будет иметь вид:

На этом можно и остановиться, но если хочется более приемлемого варианта URL, скажем:

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

Здесь мы проверяем, существует ли на сервисе поддержка модуля mod_rewrite, включаем его и задаем правило, которое будет применено к URL’ям заканчивающимся строкой «.html». При этом, остальная часть будет использоваться как значение, передаваемое index.php в переменной page. Конечно, можно побаловаться с регулярными выражениями, скажем введя ограничения на допустимые символы:

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

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

Поделись с друзьями:

комментария 2 для записи Простой движок CMS на PHP

Принципы построения правильной мини-CMS на PHP и MySQL

doran7

Новичок

Принципы построения правильной мини-CMS на PHP и MySQL

Исходные условия (аналог установок заказчика)

CMS для личного пользования (личных проектов), не для широкого распространения. Основная ориентация — социалка.
PHP, MySQL, без ORM и AR, скорее без MVC.
Работа только с БД MySQL, использование ext/mysqli (без PDO), скорее чистый SQL чем API и DAL.

Шаблоны и скрипты — в файлах, данные — в БД MySQL.

1. Админка (бзк-энд).
2. Система регистрации пользователей.

Основные подключаемые модули (сниппеты, плагины, виджеты и пр. скрипты) — самописные скрипты PHP

1. Вывод анонсов новостей или статей с пагинацией (есть самописный на mysqli).
2. Комментарии.
3. Опросы (голосование).
4. Поиск на сайте.
5. Форма обратной связи.

Дополнительные подключаемые модули

Подключаемые приложения Open Sours

* Форум, ориентировочно движок SMF.

PS. Причина вопроса, имеющийся опыт

Заниматься разработкой сайтов, веб-программированием и изучением PHP стал с апреля 2012 года, до этого имел кое-какое представление о программировании, делал сайты на статическом HTML. Английский, в области информатики и программирования — на среднем уровне.

* Нерационально потраченное время на освоение Друпала, сделал на нем пару рабочих сайтов.
* Более рационально потраченное время на освоение MODX, сделал на MODX Evo несколько сайтов. В основном, все устраивало, но официальная разработка и поддержка Evo прекратились, а следующая ветка MODX Revo, которое имеет жестко вшитое в ядро ORM, меня не устраивает.

Очень жаль потерянного времени (несколько месяцев) на освоение Друпала. Если бы вместо этого тихо и скромно изучал PHP . даже думать страшно о том, сколько времени потеряно. Прекращение разработки и поддержки Evo воспринял как жесткое кидалово (к тому моменту уже было на Evo немало своих наработок), а в одиночку мне CMS уровня MODX Evo, перекраивая его под себя и как-то поддерживая, не потянуть. Легче, наверное, сделать что-то свое на PHP.

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

Пишем простой, расширяемый движок. Начало.

Автор: beowulf13th · 06 Сен 2011

Решил поделиться своими знаниями :) CMS на основе этого примера Я написал в 2007 году. После этого она претерпела кучу изменений. Внимание. Мне лень разбираться, почему тут конвертируются кавычки. Так что не забудьте изменить кавычки на стандартные. Ну и да. Тут может быть много ошибок. Потому что пишу Я это почти по памяти и не проверяю (да-да, Я вот такой вот хитрый и злой). Да и код оформлен в списках, что не шибко может быть удобно злобным копипастерам! :) Комментарии приветствуются.

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

Средства: крутиться это всё будет под Apache‘м в связке с PHP5 (ибо будет использоваться шаблонизатор на основе XSLT) должны быть установлены модули MySQLi, DOM) и MySQL‘ем. Разрабатываю Я на Eclipse IDE с утсановленным плагином PDT. Я предполагаю, что те, кто это будут читать уже умеют поднять AMP на какой-либо платформе :) Если нет, то сначала подумайте — а надо ли оно вам? Если надо, Я как-нибудь распишу, как всё настроить :)

Что получим:

Это будет простенькая CMS, которая будет написана на PHP5 с использованием ООП. В качестве шаблонизатора мы будем использовать XSLT. Т.е. с помощью PHP подготавливаем XML’ку для последующей обработки XSL. В результате получаем HTML, который и засовываем в нужное место на страничке. Система будет работать используя mod_rewrite и поддерживать альясы страниц.

Создаём БД.


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

Во-первых, надо будет где-то хранить обработчиков наших страниц. Обработчиками назовём те классы, который будут создавать нам страницу какого-то определённого типа. Т.е. новостную. Или карту сайта, к примеру. Можно это делать в одном файле, и его подключать. Недостаток этого в том, что каждый раз при добавлении нового обработчика надо будет закачивать обновлённый файл на сервер. При этом если другой программист добавит туда свой обработчик, а вы об этом знать не будете — вы его затрёте. И будет lulz :)

Во-вторых, надо будет где-то хранить сами страницы.

Итак, приступим. Создаём таблицу, где будем хранить обработчики и таблицу страниц:

После чего добавляем вручную (админки то у нас нет ;( ) два обработчика и две страницы для начала работы. Один обработчик — это типовые страницы (назовём их так). Ну или просто страницы, которых можно наплодить сколько угодно и назовём его Parent. Второй обработчик — это обработчик главной страницы, назовём его Mainpage. Ведь мы можем захотеть, чтобы главная страница у нас отличалась от всех остальных, правда? И соотстветственно две страницы — просто страница и главная страница. Вот собственно и две самые необходимые нам таблицы.

Далее создаём структуру каталогов на диске

Начинаем программирование :)

Создаём в корне файлы index.php, config.php, load.php, functions.php.

config.php:

  1. $const = «»; // доступные константы (будет позже)
  2. $domain = «http://localhost:2000/»; // домен, на котором крутится сайт
  3. $pfx = «e»; // префикс базы данных
  4. $charset = «UTF-8»; // кодировка для подстановки в html
  5. $db_charset = «UTF8»; // кодировка для подключения к БД
  6. $db_user = «user»; // имя пользователя БД
  7. $db_pass = «user»; // пароль
  8. $db_host = «localhost»; // хост БД
  9. $db_name = «engine»; // сама БД
  10. $db = new mysqli(&$db_host, &$db_user, &$db_pass, &$db_name);
  11. $db->query(«SET NAMES <$db_charset>»);
  12. // загружаем все классы
  13. $ >query($ >fetch_object()) <
  14. if(file_exists($_SERVER[‘DOCUMENT_ROOT’].’/class/’.$classes->classpath))
  15. require_once $_SERVER[‘DOCUMENT_ROOT’].’/class/’.$classes->classpath;
  16. else
  17. exit(«Class <$classes->classname> not found»);
  18. >

index.php:

load.php:

  1. query($ >fetch_object())
  2. require_once $_SERVER[‘DOCUMENT_ROOT’].’/’.$classes-> >query($query_handler_str);
  3. if($query_handler->num_rows fetch_object();
  4. $page = new $handler->classname($info_page);
  5. print $page->getContent();
  6. >
  7. >

В файл functions.php добавляем следующие функции:

  1. /**
  2. * Выводит информацию о переменной
  3. * @param $text информация для вывода
  4. * @param $exit прекращать работу после вывода
  5. */
  6. function vardump($text, $exit = false) <
  7. print ‘’;
  8. if($exit)
  9. exit;
  10. >
  11. /**
  12. * Вырезает из переменной ненужные символы
  13. * @param $var переменная для очистки
  14. * @return чистая переменная
  15. */
  16. function clearVar($var) <
  17. return str_replace(‘»‘,»»,str_replace(«‘»,»»,stripcslashes(trim(htmlspecialchars($var)))));
  18. >
  19. /**
  20. * Получаем информацию по странице
  21. * @param $alias альяс для страницы в базе данных
  22. * @param $u >query(&$query_page_str);
  23. if($query_page->num_rows query(&$query_page_str);
  24. if($query_page->numRows fetch_object();
  25. ($u >page_ >page_ >page_alias = &$alias;
  26. $info->page_pagenum = &$page;
  27. return $info;
  28. >

Теперь в папке /class создаём два файла:

Parent.class.php:

  1. pageinfo = &$info;
  2. >
  3. /**
  4. * Составляет страницу
  5. * @return unknown_type
  6. */
  7. function getContent() <
  8. global $domain;
  9. ob_start();
  10. $head = $this->getDoctype();
  11. $head .= $this->getTitle();
  12. $head .= $this->getMetaInf();
  13. $head .= $this->getIncludes();
  14. $menu = $this->getMenu();
  15. $body = $this->getBody();
  16. require_once $this->template_page;
  17. $page = ob_get_contents();
  18. $page .= $this->getLastTag();
  19. ob_clean();
  20. $page = str_replace(«

/»,$domain,$page);

  • print $page;
  • >
  • /**
  • * Возвращает DOCTYPE
  • * @return XHTML1.0 DOCTYPE
  • */
  • function getDoctype() <
  • return ‘ ’.»n»;
  • >
  • /**
  • * Возвращает заголовок страницы
  • * @return заголовок страницы
  • */
  • function getTitle() <
  • global $db,$pfx;
  • $head = ‘ ’.»n»;
  • $head .= «t n»;
  • $title_query_str = «SELECT `title`,`title_menu` FROM `<$pfx>_pages` WHERE ` >pageinfo[‘ >query(&$title_query_str);
  • $title = $title_query->fetch_object;
  • isset($title->title) ? $title_str = $title->title : $title_str = $title->title_menu;
  • $head .= «tt <$title_str>n»;
  • return $head;
  • >
  • /**
  • * Добавляет META информацию на страницу: кодировка, автор, генератор, ключевые слова, описание
  • * @return META тэги
  • */
  • function getMetaInf() <
  • global $pfx,$db,$charset;
  • $query_meta_str = «SELECT `keywords`,`description` FROM `<$pfx>_pages` WHERE ` >pageinfo[‘ >query(&$query_meta_str);
  • $meta = $query_meta->fetch_object();
  • $kw = &$meta->keywords;
  • $dsc = &$meta->description;
  • $meta = «tt n»;
  • $meta .= «tt n»;

  • $meta .= «tt n»;
  • $meta .= «tt n»;
  • $meta .= «tt n»;
  • $meta .= «tt n»;
  • return $meta;
  • >
  • /**
  • * Подключает CSS и javascript файлы
  • * @return нужные тэги
  • */
  • function getIncludes() <
  • $style = «tt
  • n»;
  • $style .= «tt
  • n»;
  • $js = «tt».’’.»n»;
  • $closehead = «t nt n»;
  • return $style.$js.$closehead;
  • >
  • function getMenu() <
  • global $pfx,$db;
  • $query_menu_str = «SELECT ` >query(&$query_menu_str);
  • $doc = new DOMDocument(«1.0″,»utf-8»);
  • $rootnode = $doc->createElement(«root»);
  • $root = $doc->appendChild($rootnode);
  • while($menu = $query_menu->fetch_object())) <
  • $menuitem = $doc->createElement(«menu»);
  • if($this->pageinfo[‘ >id)
  • $menuitem->setAttribute(«active»,»active_menu»);
  • else
  • $menuitem->setAttribute(«active»,»nonactive_menu»);
  • if(!empty($menu->alias))
  • $menuitem->setAttribute(«link»,»

    /».$menu->alias.»/»);

  • else
  • $menuitem->setAttribute(«link»,»

    /page/».$menu->id.»/»);

  • if(!empty($menu->title_menu))
  • $menuitem->appendChild($doc->createTextNode($menu->title_menu));
  • else
  • $menuitem->appendChild($doc->createTextNode($menu->title));
  • $root->appendChild($menuitem);
  • >
  • $xsl = new DOMDocument;
  • $xsl->load($this->template_menu);
  • $xslt = new XSLTProcessor;
  • $xslt->importStylesheet($xsl);
  • return $xslt->transformToXML($doc);
  • >
  • /**
  • * Переопредлять в новых классах
  • * @return
  • */
  • function getBody() <
  • global $db,$pfx;
  • $query_body = $db->query(«SELECT `body` FROM `<$pfx>_pages` WHERE ` >pageinfo[‘ >fetch_object();
  • return $body_arr->body;
  • >
  • >
  • Теперь создаём в папке /template папку Parent, в ней создаём файлы page.php и menu.xsl. Первый будет шаблоном страницы, второй будет шаблоном меню.

    page.php:

    menu.xsl:

    Так как у нас в системе зарегистрирован класс для главной страницы, просто определяем его. Создаём в папке /class файл Mainpage.class.php:

    Работать над ним мы будем как-нибудь потом. В этом классе, к примеру, можно переопределить шаблон старницы $template_page и в результате будет использоваться он, а не тот, который задан в Parent.

    Осталось определить правила rewrite’а. Для этого в директиве DocumentRoot апачи должно стоять AllowOverride All. Создаём файл .htaccess в корне нашего сайта со следующим содержимым:

    1. RewriteEngine On
    2. #страницы
    3. RewriteRule ^(.*)/(.*)/$ index.php?alias=$1&u >QSA — позволит нам добавлять к этому правилу GET переменные из запроса. Т.е. /page/1/?a=1 превратится в index.php?alias=page&u >

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

    И да. Если сайт лежит не в корне — то надо сделать RewriteBase /dirname или добавлять dirname в правила.

    Ещё можно создать в папке /template файлы style.css (и определить там active_menu и nonactive_menu) и script.js — а то firebug ругаться будет (у вас ведь стоит firebug, а то как же вы верстаете? :) )

    Для чего Я сделал функцию vardump — смотри тут

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL