Среди обычных пользователей различных CMS, есть те, у которых есть желание создать свою собственную CMS. Одним из таких пользователей был я.
В конце декабря я загорелся желанием сделать что то свое, при очень малом знании языков. И теперь, я хочу помочь рядовому пользователю несколько освоится в связке php и MySql, и в том, как можно написать свой сайт.
Во первых, мы должны понять, что у нас будет за сайт, и какова будет его структура.
У меня была идея фикс — истории из игр, чтобы любой пользователь мог их добавлять и выводились они постранично из БД MySql.
И так, сначала разметим структуру страницы. Для меня это было:
Header
Menu
Content
Sidebar
Footer
Header — шапка сайта;
Menu — соответственно меню;
Content — содержимое страниц в моем случае истории, но содержимым может быть все, что угодно;
Sidebar — боковая колонка, где находились новости и лучшие истории;
Footer — нижняя часть сайта (подвал) с копирайтом.
Также, нельзя забывать о подключении к базе данных — ведь страницы у нас динамические, и всю информацию мы будем брать оттуда, поэтому нам понадобится еще пара вещей — файл с конфигом, а также файл, который будет подключать нас к базе данных.
После этого, я создал 6 пустых php: index.php, config.php, connect.php, header.php, menu.php, content.php, sidebar.php и footer.php.
Забыл отметить, что для удобства редактирование кода стоит скачать программу Notepad++ — русская версия в ней есть.
Итак, начнем с простого. Для начала, в файл index.php добавим вот этот код:
<?php
include('header.php');
include('menu.php');
include('content.php');
include('sidebar.php');
include('footer.php');
?>
Тэгами <?php и ?> мы открываем и закрываем наш код (вместо <?php можно использовать просто <?).
А конструкция include(‘ ‘); позволяет включать файлы в код PHP скрипта во время выполнения сценария. Т.Е. в код нашей главной страницы автоматически, и в заданном нами порядке будет включен код из всех файлов, которые мы «включили».
Итак, сейчас в нашу главную страницу встраивается код из всех нужных нам элементов.
Это нужно прежде всего, для удобства, чтобы не было нагромождения кода, а также, если мы будем делать несколько страниц, в которых будут одинаковые элементы, нам проще создать отдельные файлы с ними, и потом выгружать.
Наша следующая задача — создать в базе данных таблицы и заполнить их данными, касательно названия нашего сайта и тп.
Здесь мы можем пойти двумя путями:
- Создать полноценный установщик сайта, и панель администратора.
- Либо просто создать страницу типа install.php, в которую мы внесем все нашы данные и один раз перейдем на нее, для выгрузки данных и создания таблиц.
Для начала, пройдем вторым путем — простым.
Для этого мы сначала внесем в наш файл config.php данный код:
<?php
$title = GStories; // Введите заголовок сайта
/* Параметры подключения к MySql базе данных */
$username = "имя_пользователя"; // Логин пользователя MySql
$password = "пароль"; // Пароль для доступа к MySql
$server = "localhost"; // Сервер MySql ДБ
$database = "имя_базы_данных"; // Название вашей дб в MySql
$sitetitle = "название"; // Название сайта, отображаемое в Header
$about = "описание сайта";
?>
Помимо комментариев в самом коде, хочу добавить то, что $any_text — это переменные, которые мы задаем. Также, в php после любой функции, конструкции и тп. необходимо добавлять «;».
Итак, конфиг сайта мы создали, теперь перейдем к самому файлу установки.
<?php
include('config.php');
$db = mysql_connect($server, $username, $password); // Задаем функцию подключения к бд
mysql_select_db($database,$db); // выбираем к какой бд необходимо подключаться
echo "Подключение к БД прошло успешно<br>"; //выводим текст о успешном подключении к бд
//Подключаемся к бд, затем задаем переменной t_si_c функцию создания базы данных и исполняем ее
mysql_select_db($database, $db);
$t_si_c = "CREATE TABLE SiteConfig (option_id int(3), option_name varchar(50), option_value varchar(244) )";
mysql_query($t_si_c,$db);
echo "Таблица SiteConfig успешна создана<br>";
$id_1 = "INSERT INTO SiteConfig (option_id, option_name, option_value) VALUES ('1', 'SiteTitle', '$sitetitle')";
$id_2 = "INSERT INTO SiteConfig (option_id, option_name, option_value) VALUES ('2', 'Title', '$title')";
$id_3 = "INSERT INTO SiteConfig (option_id, option_name, option_value) VALUES ('3', 'About', '$about')";
mysql_query($id_1,$db);
mysql_query($id_2,$db);
mysql_query($id_3,$db);
echo "Данные Title, About и SiteTile успешни записаны<br>";
*/
$t_content_c = "CREATE TABLE Content (id TEXT(1000), time DATETIME(), rating TEXT(10000), tags TEXT(500), name TEXT(300), story TEXT(1000000) )";
mysql_query($t_content_c,$db);
mysql_query("CREATE TABLE Content(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
time TIMESTAMP(14),
rating TEXT(10000),
tags TEXT(500),
name TEXT(300),
story TEXT(1000000)
CHARACTER SET utf8 COLLATE utf8_general_ci
) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci")
or die(mysql_error());
echo "Content!";
include('close-connection.php');
echo "Подключение к MySql БД закрыто<br>";
echo "Установка успешно завершена";?>
Данный файл установки очень примитивен. К примеру, если вы хотите, чтобы при любых ошибках вам выдавались сообщения, то вы можете использовать «or die«. Пример:
mysql_select_db($database,$db) or die ('<br>Выбор БД не произошел: ' .mysql_error());
echo "<br>Подключение к БД прошло успешно<br>";
В данном случаем, при ошибке будет выводиться строка: «Выбор БД не произошел: и далее сама ошибка».
Подведем некоторые итоги: у нас есть пустая база сайта, как бы это ни было печально, и созданные в БД таблицы, которые были заполнены.
Продолжение следует…
Как создать движок для сайта
У меня часто спрашивают: «Как создать свой собственный движок для сайта, например, как Joomla, DLE, WordPress и другие«. Многие, конечно, спросят: «А зачем, ведь есть, например, Joomla?«. На этот вопрос я уже отвечал в этой статье: joomla vs сайт с нуля. И если Вы приняли решение о создании своего движка для сайта, то читайте дальше.
Первым делом я Вас заранее предупреждаю, что даже создание простого движка требует очень много времени и сил, но зато через этот очень-очень интересный процесс Вы получите колоссальный опыт. Чтобы Вы лучше поняли, давайте распишу всё по пунктам:
- Сверстайте все страницы сайта. Здесь совсем необязательно рисовать какой-то дизайн — это можно сделать потом. Вы должны просто чётко нарисовать структуру внешнего вида: где будет лого, где меню, сколько колонок у Вас будет, что будет в подвале и так далее. Это всё можно будет потом поменять, но начальном этапе Вам просто нужно отлаживать движок, поэтому самый элементарный внешний вид всё равно потребуется.
- Создайте все таблицы для базы данных. В этом пункте необходимо понять, какие таблицы Вам потребуется и какие там будут поля. Например, таблица со статьями, с пользователями, с разделами сайта и так далее. Ничего страшного не будет, если Вы что-то забудете. Но этот пункт надо выполнить максимально хорошо, потому что после этого внутренняя структура движка станет намного понятнее.
- Теперь Вам необходимо создать набор классов (да, советую использовать объектно-ориентированное программирование, поверьте — так будет намного проще), каждый из которых отвечает за определённую часть. Например, класс по работе с базой данных, класс по управлению пользователями и так далее. Обратите внимание, что один класс не должен реализовывать задачи, которые по смыслу относятся к другим. Например, не надо соединяться с базой данных в классе пользователя. А надо создать объект базы данных в классе пользователя и им манипулировать. В каждом классе Вы должны написать все методы, которые Вам потребуются. Например, метод получения логина пользователя по его id или метод изменения e-mail пользователя и так далее. Также наверняка Вам потребуется какой-нибудь глобальный абстрактный класс, в котором будут содержаться методы, общие для всех других. Например, очень полезный метод — это получения значения некоего поля, по известному имени и значению другого поля. Например, мы знаем e-mail пользователя, и хотим узнать его логин. Такой метод легко данную задачу решит.
- Разбейте Ваш шаблон на составные части и отправьте их в отдельные файлы с расширением tpl. Делается это так: копируете какую-то отдельную часть (например, форму авторизации, часть, где выводятся статьи, меню и другие) и вставляете в отдельный файл tpl. В результате, у Вас появится большое количество файлов-шаблонизаторов. В этих файлах-шаблонизаторах поставьте {элемент_шаблона}. Например, там где должно быть имя пользователя поставьте {username}. Там, где должен быть заголовок статьи, поставьте {article_title}. Аналогичным образом Вам надо исправить каждый файл tpl.
- Дальше создайте класс, который будет работать с файлами-шаблонами. В задачу этого класса будет входить работа с основными другими классами (например, классом пользователей), а также подстановка соответствующих данных в файлы-шаблоны вместо {элемент}. Например, вместо {username} этот класс должен будет подставить имя пользователя. Разумеется, здесь будет очень много методов, каждый из которых выполняет свою функцию.
- Выводите все элементы на страницах сайта, используя класс созданный в предыдущем пункте, собирая тем самым страницы по кирпичикам.
- И, наконец, внешний вид сайта — он же дизайн. Исправляйте файлы tpl (оставляя {элементы}), добавляйте CSS-файлы и JavaScript. А функциональность трогать уже не надо (если Вы всё сделали правильно, конечно).
Всё, движок для сайта создан! Я понимаю, что многие из Вас сейчас сидят в шоке, не понимая, как это всё реализовать. Это действительно сложно для начинающего, поэтому сначала Вам надо набраться опыта в простых вещах. А вот дальше уже реализовать подобные вещи. Если остались какие-то вопросы, то Вы можете задать их в комментариях. А в следующей статье я расскажу, как создаётся Admin-панель для сайта, так что подписывайтесь, чтобы не пропустить.
Пример создания реального движка с нуля можно посмотреть в этом курсе: http://srs.myrusakov.ru/php
-
Создано 28.05.2011 14:44:36
-
Михаил Русаков
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
-
Кнопка:
Она выглядит вот так:
-
Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт
- BB-код ссылки для форумов (например, можете поставить её в подписи):
Как написать движок для сайта
Времена статических сайтов, а также сайтов, лишь частично предоставляющих динамический контент, безвозвратно ушли. Серверные мощности позволяют использовать CMS для построения даже маленьких интернет-ресурсов. На сегодняшний день доступно множество бесплатных CMS с функционалом на любой вкус. Многие из них разрабатываются командами профессионалов и очень хорошо себя зарекомендовали. Однако и сегодня множество энтузиастов стремятся написать движок для сайта с нуля.
Вам понадобится
- — доступ в интернет;
- — современный браузер.
Инструкция
Запланируйте функционал движка. Ответьте на вопросы общего плана, касающиеся назначения и типа разрабатываемого продукта. Определитесь, будет ли это универсальная CMS, или что-то более узконаправленное (блог, платформа для онлайн-торговли, сайт сообщества, новостной портал). Ответьте на конкретные вопросы относительно требующихся возможностей. Подумайте, нужна ли на сайте галерея изображений, форум, новостная лента, файловый архив, и т.д. Должен ли подобный функционал быть жестко интегрирован в ядро, или же он может быть представлен в виде модулей расширений.
Продумайте архитектуру движка. Как правило, архитектура современных CMS следует MVC-парадигме. На данном этапе имеет смысл изучить уже существующие решения, коих существует весьма большое количество.
Определите технологии, на основе которых будет реализован основной функционал продукта. Выберите язык программирования. Стандартом де-факто для разработки CMS сейчас является PHP. Хотя можно рассмотреть использование ASP .NET, Java, Python. Выберите технологии хранения данных. Как правило, современные CMS используют базы данных в качестве основного места хранения информации. Но в отдельных случаях можно положиться на файловую систему. Выделите другие технологии, которые потребуются для работы движка (библиотеки обработки графики, проверки орфографии, криптографические модули, и т.д.).
Изучите документацию по продуктам и технологиям, на основе которых будет построен проект. Определите целесообразность использования каждого продукта или технологии. При необходимости произведите корректировки в перечне технологий, найдите приемлемые альтернативы.
Составьте план или техническое задание на разработку. Даже если к разработке не планируется привлекать никого, кроме инициатора проекта, следование четкому плану или пунктам технического задания сэкономит большое количество времени и сделает труд гораздо более эффективным. При старте проекта имеет смысл составить задание на разработку ядра (и, возможно, тестовых модулей) CMS с минимальным функционалом.
Реализуйте часть проекта в соответствии с ранее разработанным техническим заданием.
Произведите тестирование функциональности, реализованной на предыдущем шаге. Выявите ошибки. Составьте список ошибок и задания на доработку. Назначьте ошибкам показатели приоритета исправления. Отсортируйте ошибки в соответствии с их приоритетом.
Исправьте найденные ошибки. Возможно, на данном этапе будут выявлены другие проблемы в работе системы. Дополняйте список ошибок, произведите исправление каждой из них.
Определите необходимость дальнейшей доработки или модификации движка сайта. Ответьте на вопрос о соответствии имеющегося функционала ранее запланированному, об удовлетворении параметров работы системы предъявляемым критериям качества. В случае если требуется дальнейшая разработка, перейдите к шагу 5 для совершения следующей итерации развития продукта.
Обратите внимание
Реализуя движок сайта «с нуля», будьте особо внимательны при обработке принимаемых извне данных. Недостаточная фильтрация может быть причиной уязвимости, несущей угрозу безопасности.
Полезный совет
Как правило, использование или доработка существующих решений позволяет гораздо проще и быстрее получить желаемый результат. Если вы собираетесь разрабатывать движок не ради создания нового продукта, имеет смысл выполнить проект на базе существующего кода. Например, использовать ядро Drupal или популярные CMF вроде CodeIgniter или Simfony.
Войти на сайт
или
Забыли пароль?
Еще не зарегистрированы?
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
В данном цикле видео я покажу вам, как сделать
движок сайта на PHP. Движок сайта нужен для
того, чтобы превратить 1000+ обычных HTML
страниц в нечто, удобное для редактирования
и поддержки.
Работа с include на PHP
Функция include и GET запрос PHP
Проверим существование файла перед его иклудом PHP
Применение функции include для улучшения сайта
Простой движок сайта на PHP
Исправим проблему с тайтлом в простом движке PHP
Вынесем макет сайта в отдельный файл в простом движке PHP
Добавляем страницу 404
в простом движке PHP
Движок сайта PHP на базе данных
Простая менюшка в движка сайта на PHP
Динамическая менюшка в сайте на простом движке PHP
Создание админки в простом движке PHP
Удаление страниц через админку в простом движке PHP
Добавление новой страницы через админку в простом движке PHP
Редактирование страниц через админку в простом движке PHP
Экранируем кавычку при сохранении в простом движке PHP
Блокируем прямой заход из браузера к папке с элементами через htaccess
Показ флеш сообщений с помощью сессий в простом движке PHP
Защищаем админку паролем в простом движке PHP
Добавляем сессию при авторизации в простом движке PHP
Добавляем хеширование пароля с помощью функции md5 в простом движке PHP
Реализация ЧПУ с get параметрами в простом движке сайта на PHP
Разбор URL средствами PHP при ЧПУ в простом движке PHP
Рубрика: Новости -> Разное -> Скрипты
Четверг, 26 апреля 2012 г.
Просмотров: 11040
Настроение: Среднее
В колонках звучит: Savage Garden – Crush And Burn
Подписаться на комментарии по RSS
Не каждый может похвастаться тем что он может написать сайт с нуля))), имеется ввиду все кроме шаблона(стиля оформления) сайта. До недавнего времени со мной все было именно так)), пока у меня не появилась необходимость написать сайт самому))
Причиной написания движка для сайта послужила моя практика в колледже, мне необходимо было написать либо программу, либо сайт для своего предприятия на котором собсно я и по идее прохожу стажеровку.
Мой руководитель по практике сказал мне что сайт с использованием готового движка со стандартными шаблонами не прокатит, его никто не оценит и не примут, типа такой сайт не сможет сделать только полный дебил учась на такой специальности, поэтому она сказала что мне нужно написать сайт с нуля с использованием html, css, javascript, php, а также с использованием базы данных.
Я уже делал сайт по заданию преподавателей на этой же практике, но чисто на html и css, на который я содрал дизайн с какого то другого сайта предварительно почистив его от мусора, лишнего кода в прочего.
Для выполнения этого задания я использовал все этот же шаблон, он мне чем то приглянулся, такой простенький и без излишеств.
Для начала я его поделил на 3 части head, body, footer, но в дальнейшем мне пришлось поделить его на 7 частей, просто так удобнее вставлять его в основной файл движка по кускам в нужных местах. Я даже полагаю что именно так и делается повсеместно в различных cms это облегчает основной файл движка и разделяет шаблон от кода.
При написании движка я использовал нерациональные подходы для средних и
больших сайтов, так как передо мной не стояло задачи сделать крупный
портал, а всего лишь нужно написать сайт визитку для предприятия.
В качестве базы данных я как и всегда выбрал способ хранения в файлах, а конкретнее я сделал хранение всех данных в 1 файле.
Я решил структурировать файл таким образом, чтобы каждый пост отделялся от предыдущего решетками ###, а внутри решеток данные структурировались собачками @title=,@content=,@rubricat=. Я предусмотрел вариант разделения по типам страниц, так как в шаблоне имеется 2 сайдбара, верхнее меню и главная страница сайта должна ж как то задаваться, можно было сделать как в блогах — на главной странице выводятся отрывки от каждого поста но решил сделать статическую главную страницу. Если у страницы не задать в какой рубрике она будет находиться, то ссылка на нее будет выводится в верхнем меню, если в качестве рубрики написать start, то эта страница будет выводиться главной.
Кстати доработать движок совсем несложно чтобы можно было выбирать между блоговым видом и со статической главной страницей))
В начале я написал что мне нужно было использовать на своем сайте javascript, я это тоже сделал))), оч интересным и совершенно бестолковым способом))), но ведь для меня было главное все технически реализовать, я это и сделал, а именно для всех обычных страниц сайта я подставляю текст и заголовок статьи через javascript, который генерируется с помощью php))).
Ведь действительно ж нафига обычному сайту подставлять через javascript текст в страницу, а мне вот захотелось выпендриться)))
Далее приведу листинг единственного файла с кодом:
<?php //Прочие переменные $page = $_GET["id"];//идентификатор статьи $rubrika = $_GET["rub"];//идентификатор рубрики $content_openpage;//для контента открытой страницы $mass_posts[0];//для массива всех данных постов /// $baza = file_get_contents ( 'baza.txt' );//подключаем базу даных $posts = explode("###", $baza);//разбиваем по отдельности посты из базы данных $lenghtarray = count($posts);//счетчик постов в базе данных for($i=1;$i <= $lenghtarray;$i++)//Заполняем массив всех данных постов { $mass_posts[$i-1] = explode("@", $posts[$i-1]);//разделение по шаблону оджельного поста $mass_posts[$i-1][1] = trim(substr($mass_posts[$i-1][1] , 6));//title $mass_posts[$i-1][2] = trim(substr($mass_posts[$i-1][2] , 8));//content $mass_posts[$i-1][2] = str_replace("rn", "<br>", $mass_posts[$i-1][2]); $mass_posts[$i-1][3] = trim(substr($mass_posts[$i-1][3] , 9));//rubricat if($page == $mass_posts[$i-1][1])//проверяем какая открыта страница и в соответствии выводим контент { $content_openpage = $mass_posts[$i-1][2]; } } $aux_res = array() ; $result_res = array() ; foreach ($mass_posts as $key => $value)//создание одномерного массива { if($value['3'] != null && $value['3'] != 'start') { $aux_res[$key] = $value['3'] ; } } $aux_res = array_unique($aux_res) ; $count_res=0;//счетчик постов в пересобранном массиве данных с постами foreach ($aux_res as $key => $value)//собираем обратно { $result_res[$count_res] = $mass_posts[$key]; $count_res++; } $style_head = file_get_contents('style_head'); echo $style_head;//выводим шапку шаблона //генерируем блок с javascript для автоматической подстановки браузером данных в шаблон echo'<script type="text/javascript">function onload_complite(){'."n"; echo'document.getElementById('title').innerHTML = ''.$page."';n"; echo"document.getElementById('content').innerHTML = "".addslashes($content_openpage)."";n"; echo"n".'}</script>'; $style_body = file_get_contents('style_body'); echo $style_body;//выводим тело шаблона for($i=0;$i <= count($mass_posts);$i++)//выводим ссылки в меню на посты без рубрик { if($mass_posts[$i][3] == null) { echo'<li>'; echo'<a href="index.php?id='.$mass_posts[$i][1].'">'.$mass_posts[$i][1]."</a>"; echo'</li>'; } } $style_body_menu = file_get_contents('style_body_menu'); echo $style_body_menu;//выводим тело шаблона меню if($page == '') { if($rubrika != '') { $b=0; for($i=0;$i <= count($mass_posts);$i++)//выводим часть каждой статьи в рубриках { if($rubrika == $mass_posts[$i][3]) { if($b >= 5){break;}//ограничение на количество выводимых частей статей в рубрике echo' <div class="topic">'; echo' <h1 class="title">'; echo' <a href="index.php?id='.$mass_posts[$i][1].'&rub='.$mass_posts[$i][3].'">'.$mass_posts[$i][1]."</a>"; echo' </h1>'; echo' <div id="content2" class="content">'; echo $mass_posts[$i][2] = trim(substr($mass_posts[$i][2] , 0, 150)).'... <a href="index.php?id='.$mass_posts[$i][1].'&rub='.$mass_posts[$i][3].'">Чиать далее -></a>'; echo' </div>'; echo' <ul class="voting guest ">'; echo' </ul>'; echo' </div>'; $b++; } } }else{ echo'<div class="topic">'; echo' <h1 class="title">'; echo' Главная страница'; echo' </h1>'; echo' <div class="content" id="content">'; for($i=0;$i <= count($mass_posts);$i++)//Выводим главную страницу { if($mass_posts[$i][3] == 'start') { echo$mass_posts[$i][2]; break; } } echo' </div>'; echo'</div>'; } }else{ echo'<div class="topic">'; echo' <h1 class="title" id="title"></h1>'; echo' <div class="content" id="content">'; echo' </div>'; echo'</div>'; } $style_body_content = file_get_contents('style_body_content'); echo $style_body_content;//выводим тело шаблона контент for($i=1;$i <= count($result_res);$i++)//выводим ссылки на рубрики { if($i & 1) { echo'<li class="even">'; echo'<a href="index.php?rub='.$result_res[$i-1][3].'" class="stream-comment">'.$result_res[$i-1][3]."</a>"; echo"</li>n"; } else { echo'<li>'; echo'<a href="index.php?rub='.$result_res[$i-1][3].'" class="stream-comment">'.$result_res[$i-1][3]."</a>"; echo"</li>n"; } } $style_sidebar = file_get_contents('style_sidebar'); echo $style_sidebar;//выводим боковую колонку if($rubrika != '' || $page != '' && $rubrika != null) { $b=0; for($i=0;$i <= count($mass_posts);$i++)//выводим ссылки на посты { //echo$mass_posts[$i][3]; if($rubrika == $mass_posts[$i][3]) { if($b & 1) { echo'<li class="even">'; echo'<a href="index.php?id='.$mass_posts[$i][1].'&rub='.$mass_posts[$i][3].'" class="stream-comment">'.$mass_posts[$i][1]."</a>"; echo"</li>n"; } else { echo'<li>'; echo'<a href="index.php?id='.$mass_posts[$i][1].'&rub='.$mass_posts[$i][3].'" class="stream-comment">'.$mass_posts[$i][1]."</a>"; echo"</li>n"; } $b++; } } } $style_sidebar2 = file_get_contents('style_sidebar2'); echo $style_sidebar2;//выводим 2 боковую колонку $style_footer = file_get_contents('style_footer'); echo $style_footer;//выводим подвал шаблона ?>
Движок для сайта своими руками. Часть вторая
В прошлый раз мы рассмотрели способ организации «базы данных» без собственно самой базы данных. Сегодня продолжим тему создания «без-mysql’ного» сайтового движка разговором об каталогах, файлах и include’ах. Также будет немного теории и практики о собственно работе такого двигателя.
Основные принципы организации работы
Несложно догадаться, что организация устройства движка зависит от многих факторов, изменяющихся в каждом конкретном примере сайта. Это и предполагаемая структура информации, и особенности хостинга, на котором размещён сайт (наличие-отстутствие таких средств как php, ssi, доступность каких-либо баз данных, и т. п.), и не в меньшей степени при разработке устройства будущего движка нужно учитывать дизайн сайта, то есть структуру самих страниц.
Собственно, одной из целей создания движка для сайта есть как раз организация удобной работы по обновлению материалов, и, как предусловие, практически полное отделение дизайна сайта от собственно его полезного содержания (во загнул ). Но в любом случае, будущий дизайн надо учитивать, каким образом — об этом немного позже.
Итак, само слово «разделение» подразумевает уже, как минимум, разделение страницы сайта на два файла — с шаблоном дизайна (который может быть общим для нескольких страниц) и файла с самим контентом, то есть информацией.
Кроме этих двух файлов нам понадобиться ещё один, включаемый во все динамические страницы (имеются ввиду страницы, содержащие php-код). В этом файле мы будем хранить все общие функции движка (собственно, их можно назвать «ядром»), а также определим некоторые полезные глобальные константы.
Основной задачей функций ядра будет чтение файлов с текстами статей, картинками или иными материлами сайта, а также вывод этого контента в нужной форме на экран. Третью функцию — ввод данных — мы не рассматриваем, так как способ хранения данных (файлы с разделителями) позволяет вводить информацию при помощи стандартных средств (любимого текстового редактора, например).
А под фразой «учитывать дизайн», высказанной немного выше, имелось ввиду создание системы шаблонов, или, проще говоря, набора оформлений разных страниц (html-файлов, по сути), где места под изменяемое содержание (заголовки, меню, тексты — всё, что генерируется динамически) оставлены пустыми. Подставлятся они будут «на лету» при обращении пользователя к определенной странице. Получается даже дополнительный выигрыш — кроме всего прочего, уменьшаеться объём хранимых на сервере файлов, так как оформление страниц не повторяется в каждом файле, а хранится в одном месте. Про удобство при возможном желании изменения дизайна, я думаю, и говорить не надо.
Расположение файлов
Итак, вернемся к собственно организации нашей системы. Основной принцип, который будет использоваться в нашем примере — это одноуровневость разделов. Но не волнуйтесь — это лишь для упрощения примеров. Если для вас это слишком серъёзное ограничение — просто придется подождать следующего выпуска, в котором мы поищем обходные пути.
Итак, у нас имеются каталоги, каждый из которых является разделом сайта (естественно, кроме служебных каталогов, таких, как “images”).
Это значит, что в каждом таком каталоге должен лежать так называемый «индексный файл» — страница, которая загружается по умолчанию при таком обращении к разделу: http://site.com/razdel. Имя этого файла (или возможные имена) вам нужно узнать у вашего хостера. Чаще всего это такие имена, как “index.html”, “index.php” и т. п. — расширение зависит от используемого серверного языка.
Значит, с именами файлов разобрались. Но что же нам положить в эти файлы? Вот теперь-то мы и переходим собственно к основной части сегодняшнего разговора.
В самом начале файла стоит вставить код включения ядра движка. Подобное обращение на языке php выглядит следующим образом:
// инициализация ядра include("bin/core.php");
В этом файле содержатся те самые функции чтения-вывода, описанные в прошлой статье. Таким образом, они теперь становяться доступными для использования.
В этом же файле стоит описать ещё некоторые полезные функции. Например, функция непосредственного получения какого-либо файла в виде строки (может пригодится):
function getinclude($path) { return str_replace("n", "", (implode(file($path), ""))); }
Новостная система
Ещё одной полезностью может оказаться функция для организации простейшей новостной системы. Но, не смотря на простоту реализации, она имеет достачно удобные фичи, такие как вывод в любом месте страницы блока с указанным количеством последних новостей и возможность организации архива новостей.
Суть её работы сводится к следуещему. Имеется текстовый файл с новостями, разделенными символом перевода строки (словом, каждая новость — в новой строке). Каждая строка разделена символом вертикальной черты («|») на два поля: дату и, собственно, саму новость.
Опредилив функцию новостной системы в нашем включамом файле («ядре»), мы получаем возможность на любой странице получить нужное количество последних новостей. Первым параметром передаётся часть пути, указывающая на размещение файла с новостями. Количество выводимых новостей, как вы уже догадались, задаётся вторым, необязательным, параметром.
Вот моя реализация функции новостной системы:
function getnews($path="", $lim=3) { $news = file($path."news.txt"); $result = ""; if ($lim == 0) { $lim = count($news); } for ($i=0; $i<$lim && $i<count($news); $i++) { $newslist = loadtemplate("templates/_news.tpl"); $newslist = eregi_replace("¤date¤", strtok($news[$i], "|"), $newslist); $newslist = eregi_replace("¤text¤", strtok("|"), $newslist); $result = $result.$newslist; } return $result; } // end of getnews();
Что ж, на сегодня пока что всё. Продолжение следует…
Движок сайта
Что такое движок сайта
На простых HTML сайтах каждая статься располагается на своей странице. Но для некоторых сайтов, например
для социальных сетей, такой способ не подходит. Весьма неудобно для каждого пользователя создавать отдельную
страницу. На таких сайтах для всех пользователей создаётся одна страница. Информация о конкретном пользователе
берётся из БД и добавляется на эту страницу. Движок сайта — это набор скриптов и база данных,
обеспечивающие работу такого сайта. В этой теме рассматривается создание движка простого сайта со статьями.
Я намеренно предлагаю самый простой пример, достаточный, чтобы понять, что такое движок сайта и как его делать.
В более сложном варианте будет много элементов и в них будет труднее разобраться. На основе этого
примера Вы сможете делать реальные сайты.
Принцип создания
Создание движка сайта — достаточно сложная задача, требующая определённых знаий. Нужно уметь делать вёрстку
сайта, работать с файлами и базами данных.
Для создания движка нужно выполнить несколько действий:
- Сделать вёрстку страницы
- Разделить страницу на блоки и поместить их в отдельные файлы
- Написать код, вставляющий блоки на страницу
- Создать базу данных для контента сайта
- Написать код, который получает контент из базы данных и добавляет на страницу
У Вас может возникнуть вопрос: зачем разделять страницу на блоки и потом вставлять их при помощи PHP
скрипта? В нашем примере только одна страница, но на реальных сайтах их больше. Вы можете отдельно создать
главную страницу, сделать сраницы для разделов сайта, для формы регистрации и другие. И на всех этих страницах
будут одинаковые блоки. Поэтому удобно раместить эти блоки в файлах и подлючать их в скрипте.
Вёрстка страницы
Подробно вёрстка рассматривается в учебнике CSS. Здесь я просто покажу
код страницы. На этом этапе не обязательно определять дизайн сайта. В дальнейшем Вы сможете изменить блоки так,
как угодно. А пока нужно определить общую структуру страницы.
Для данного примера целесообразно создать отдельную папку и размещать в ней все файлы сайта.
Назовём страницу page.php. Пока в ней будет только HTML код, но позднее в неё добавится PHP код, поэтому
сразу сохраним её в нужном формате. Поместим страницу в созданную папку.
page.php:
1 |
<?php header('Content-type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <title>Страница</title> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> </head> <body> <div id="header">Это шапка сайта</div> <table> <tr> <td id="menubar"> <div id="mainmenu"> <div><a href="page.php">Главная</a></div> </div> </td> <td> <div id="content"></div> </td></tr></table> <div id="footer">Это подвал сайта</div> </body> </html> |
В этом коде всё просто, поясню лишь основные моменты. В строке 10 создаём шапку сайта. Затем идёт таблица
из двух колонок. В первой колонке находится главное меню. Пока в нём есть только ссылка на главную страницу.
Вторая колонка для статьи. Она будет вставляться из базы данных. Затем следует подвал сайта.
Стиль будет содержаться в отдельном файле. Он уже подключён в 6 строке. Вот код файла:
style.css:
1 |
td { vertical-align: top; } #header { font: 30px Arial, sans-serif; margin-left: 50px; height: 80px; width: 60%; background-color: #29B6CE; } #menubar { background-color: #CCC; } #mainmenu { width: 300px; padding: 10px; } #mainmenu a { font: 14px Arial, sans-serif; text-decoration: none; } #content { min-height: 380px; } #conrent h1 { font-size: 22px; } #content p { font: 16px Tahoma, sans-serif; } #footer { text-align: center; font-size: 20px; padding: 5px; margin-top: 5px; background-color: #837DB6; height: 100px; } |
Файлы шаблона
Созданную страницу нужно разделить на блоки и разместить их в файлах шаблона. Они будут находиться в
основной папке сайта, но на реальных сайтах для них создаётся специальная папка. Файлы рекомендуется сохранять
в формате tpl, потому что это специальный формат для файлов шаблона. Но можно сделать обычные HTML файлы.
Особой разницы нет. HTML файлы не рекомендуют использовать только потому, что это формат для страниц, а файлы
шаблона — это не страницы.
Для шапки сайта создадим файл header.tpl. В нашем примере она состоит из одной строки, её и поместим в
файл.
header.tpl:
1 |
<div id="header">Это шапка сайта</div> |
Таблицу, составляющую основу вёрстки, мы оставим на странице. В ней находится главное меню и контент сайта.
Их мы будем выводить при помощи PHP скриптов
Создадим файл footer.tpl для подвала сайта.
footer.tpl:
1 |
<div id="footer">Это подвал сайта</div> |
Пока блоки, из которых состоит шаблон, пустые. Но Вы в любой момент можете заполнить их нужными
элементами. Также Вы можете добавить в шаблон другие блоки.
Присоединение блоков
Созданные блоки нужно подключить к странице. Так как эти блоки будут всегда одинаковые, мы присоединим их
самым простым способом — с помощью подключаемых файлов. Позднее мы рассмотрим более сложный способ. Подключать
файлы шаблона будем с использованием конструкции require. Добавим её в те места
сраницы, где должен быть код блоков. Страница будет выглядеть следующим образом:
page.php:
1 |
<?php header('Content-type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <title>Страница</title> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> </head> <body> <?php require "header.tpl"; ?> <table> <tr> <td id="menubar"> <div id="mainmenu"> <div><a href="page.php">Главная</a></div> </div> </td> <td> <div id="content"></div> </td></tr></table> <?php require "footer.tpl"; ?> </body> </html> |
Если Вы всё сделали правильно, то страница должна отображаться точно так же, как до разделения на блоки. Вы
можете создавать новые страницы и подключать к ним эти блоки.
Содержание сайта
Контент будет содержаться в базе данных. Я использую базу данных mybase, которая создавалать при
рассмотрении предыдущих тем учебника. Если у Вас нет базы данных, то нужно её создать. В ней создадим таблицу
для статей, назовём её art. В таблице должны быть такие поля:
id — номер статьи
name — название статьи
text — текст статьи
menu — текст для пункта меню
Добавьте в созданную таблицу несколько статей. Задайте им любые названия и напишите какой-нибудь текст. Чтобы
отделять абзацы статей, тэги <p> могут находиться прямо в базе данных вместе
с текстом. В ней могут быть и другие теги, например ссылки и картинки.
Если Вы создаёте отдельные страницы для разделов сайта, то можно для них сделать записи в таблице как
для обычных статей.
Вывод меню на страницу
Чтобы пользователь мог увидеть статьи, в главном меню должны быть ссылки на них. Все ссылки будут вести на
одну страницу и в них будет GET-запрос, содержащий номер статьи. Например ссылка на первую статью должна
быть такой:
14 |
<a href="page.php?a=1">Статья 1</a> |
Чтобы вывести ссылки на все статьи сайта, добавим PHP скрипт в блок с главным меню. Этот скрипт будет
получать id статей и тексты ссылок из базы данных. Используя эти данные скрипт будет формировать ссылки. Блок
главного меню должен выглядеть так:
14 |
<div id="mainmenu"> <div><a href="page.php">Главная</a></div> <?php $db=mysqli_connect('localhost', 'root', '', 'mybase'); $query="SELECT id, menu FROM art"; $result=mysqli_query($db, $query); for ($i=0; $i<mysqli_num_rows($result); $i++) { $row=mysqli_fetch_assoc($result); echo "<div><a href='page.php?a=".$row['id']."'>". $row['menu']."</a></div>"; } ?> </div> |
Вывод контента
Для вывода статьи нужно добавить к коду страницы скрипт, который получает статью из базы данных и размещает
на странице. Этот скрипт будет находится в блоке для контента. Вот его код:
30 |
<div id="content"> <?php $art=$_GET['a']; if (!isset($art)) echo '<p>Главная страница</p>'; else { $query="SELECT name, text FROM art WHERE id = $art"; $result=mysqli_query($db, $query); $row=mysqli_fetch_assoc($result); echo '<h1>'.$row['name'].'</h1>'; echo $row['text']; } ?> </div> |
Поясню, как работает этот скрипт. Номер статьи берётся из массива $_GET и записывается в переменную
$art. Если номера статьи нет, значит это главная страница, и выводится текст,
который должен располагаться на ней.
Если номер статьи есть, то из БД берётся статья с этим номером и выводится на страницу. В этом скрипте нет
подключения к MySQL, потому что это было сделано ранее.
Название статьи помещается в тэг <h1>. К тексту никакие тэги не
добавляются, потому что текст содержится в базе данных уже с тэгами.
Чтобы сайт был сделан более грамотно, рекомендуется разделять HTML и PHP код. Рассмотренный скрипт можно
поместить в файл и подключить к странице.