Minimal 14.02.2011 16:33

Урок, пишем свой движок блога.Урок 1: Начнем!

Привет!
Решил написать движок блога под свои нужды, так как обычно в сети, кроме заезженного wordpress'a, ничего и нет.

У меня есть своя CMS, но меня, скажем так, попросили описать процесс, и я решил для особо жаждущих написать движок блога с самого нуля.

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

Писать будем на PHP в качестве базы данных будет mySQL.

НАЧНЕМ!

Немного о том что должно получится в итоге.

* ЧПУ
* Визуальный редактор
* Посты по категориям
* Комментарии к постам
* Обратная связь
* Поиск
* Гибкая настройка дизайна
* RSS
* Своя страница для ошибок
* Ну и так далее ...


Думаю по ходу напишем и придумаем еще что нибудь.

Первое, что мы сделаем - определимся с основной структурой папок и файлов, создаем в папке www следующие папки и файлы:

Папки: include, lang, themes.
Файлы: index.php, .htaccess

Папка include - будет отвечать за подключаемые файлы.
Папка lang - будет отвечать за язык локализации.
Папка themes - будет отвечать за шаблон сайта.
Файлы index.php - это исполняемый файл, через него и будет все работать.
Файл .htaccess - пока буде почти пустой, но в дальнейшем мы его будем использовать.

Теперь по порядку, начнем с файла index.php, он будет выглядеть так:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

// стартуем сессию
session_start();
// подключаем конфиг
include ('include/config.php');
// подключаем mysql конфиг
include ('include/mysql.php');
// режим отладки
ini_set ('display_errors', CONFIG_DISPLAY_ERRORS);
error_reporting(E_ALL);
// подключаем язык
include ('lang/'.CONFIG_LANG.'/lang.php');
// подключаем ядро
require ('include/core.php');
?>



session_start - инициализирует данные сессии, создаёт сессию (или продолжает текущую на основе session id, переданного через GET-переменную или куку).

ini_set - устанавливает значение опции конфигурации, устанавливает значение данной опции конфигурации, возвращает старое значение при успехе, FALSE при неудаче, опция конфигурации будет сохранять это новое значение в процессе выполнения скрипта и восстановится по окончании работы скрипта.

error_reporting - устанавливает, о каких ошибках PHP сообщается.

Файл .htaccess имеет такое содержание:
1
2
3
4
5
6
7
AddDefaultCharset utf8

DirectoryIndex index.php

php_flag magic_quotes_gpc Off

php_flag magic_quotes_runtime Off



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

ПРОДОЛЖЕНИЕ СЛЕДУЕТ!

Урок 2 / Урок 3


Тэги: blog cms mysql php Урок
+ 7 -
Похожие Поделиться

melksoft 14.02.2011 17:10 #
Пока пост ни о чем. То, что в index.php нужно инклюдать конфиг, язык и ядро и так понятно. Кстати локализацию лучше делать через gettext, благо в PHP это очень просто.
Minimal 14.02.2011 18:37 #
Для тех кто читает между строк повторю:
Первый урок будет маленький, потому как мне скоро на прием к врачу, по этому время ограничено.
ak3n 14.02.2011 19:05 #
Вы ведь не в бложек пишите. Можно было подготовить и написать больше.
kirpichtion 16.02.2011 06:33 #
Кстати, да. Дешевое оправдание, Минимал. Нефиг на больную голову умничать в теме, которой ты ниразу не компетентен.
Minimal 16.02.2011 10:10 #
Слыш ты, умник, ты что ли смотрю много компетентен?
Сказал бы что нибудь умное, а то все попка дура, да пока дурак :))))))
Если так любишь пипа умные вещи писать, напиши свою статейку мы обсудим.
P/S надеюсь ты понял почему так сказано?
Zereal 14.02.2011 17:30 #
Может прежде чем минусовать, дождемся второй части?!
Bad Habit 14.02.2011 17:45 #
Велосипеды не нужны, есть Symfony :)
Minimal 14.02.2011 18:39 #
если у этих велосипедов, не учли в конструкции педали, то далеко он не уедет.
Bad Habit 14.02.2011 18:44 #
Именно поэтому я рекомендую Symfony, подойдет под любую форму ноги .)
ZogG 15.02.2011 09:51 #
он хочет не подарить вам велосипед, а объяснить принцип работы изнутри, чтоб если у вас не заведеться, вы сами могли бы сменить колесо. (пока статья очень короткая, ждем продолжения)
kirpichtion 16.02.2011 06:41 #
Чтобы сменить колесо имеется вещь именуемая мануалом и тот самый гугл.
ZogG 16.02.2011 10:38 #
ну так зачем тебе читать и сидеть на этом сайте, все уже давно есть в гугле (включая вилинукс).

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

да че я тут доказываю, не нравится - не читай, а то я гляжу тебе так не понравилась статья, что ты все комменты прочитал, и не поленился ответить. если мне что-то не интересно, я не буду заходить даже в новость
kirpichtion 16.02.2011 06:40 #
И каких же педалей там нет? :) Плюс, ты же помнишь, что помимо Symfony имеются Kohana и Zend Framework. И чего тебе в них не хватает?
Minimal 16.02.2011 10:13 #
Слушай что ты все время демагогию разводишь?
Мы здесь про Symfony, Kohana или Zend Framework обсуждаем?
Если хочешь пофлеймыть создай ветку и там обсуждай у кого какие педали и рули.
nvbn 14.02.2011 17:55 #
Не делайте так, как на картинке на вашем сайте)
Minimal 14.02.2011 18:39 #
картинка не моя!
inst 14.02.2011 18:51 #
На картинке код какого-то шаблона WordPress :)
inst 14.02.2011 18:23 #
1> в сети кроме заезженного wordpress'a не чего и нет
MaxSite?

2> меня ... технично попросили
Я думал техничными бывают удары в боксе.

3> PHP, mySQL
как оригинально

4> скоро на прием к врачу
это связано с вашими пристрастиями в выборе ОС? :)
kstep 14.02.2011 18:32 #

2> меня ... технично попросили
Я думал техничными бывают удары в боксе.


вот видимо именно так и попросили...
inst 14.02.2011 18:48 #
вот и я о том же :)
kstep 14.02.2011 18:33 #
4> скоро на прием к врачу
это связано с вашими пристрастиями в выборе ОС? :)


а это, видимо, результат техничной просьбы =)
Minimal 14.02.2011 18:45 #
1) MaxSite?
ну если бы я стал перечислять все что движется в сети кроме wordpress'a,
список был бы большой.

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

3) как оригинально
не как есть, предложи альтернативу

4) это связано с вашими пристрастиями в выборе ОС? :)
именно
inst 14.02.2011 19:00 #
1> я о том же: альтернатив полно, а в посте сказано обратное

2> тут вы со мной на "вы"

3> а вот тут уже на "ты". У вас и в коде так же?
PostgreSQL больше не альтернатива?
booley 15.02.2011 11:06 #
Было бы зачётно закодить бложек на си.

А вообще: Ruby, Python; PSQL, SQLite, redis. Всё это не так заезженно.
vovans 16.02.2011 16:01 #
Плюсую. У самого основной блог (по Линуксу, кстати) на MaxSite. Уже года два как. Очень доволен движком! Шустрый, полно плагинов. Говорить, что кроме вордпресса ничего нет... Ну, это несерьёзно.

Есть альтернативы. И хорошие альтернативы.

Одно дело мотивировать свой порыв тем, что хочется показать, как эти самые ЦМС пишутся. Чисто для образовательных целей. А другое дело - нагло врать. Ну ладно, искажать действительность. Забрасывая помётом соседей сами чище не станете.
zz 14.02.2011 18:33 #
Статья ни о чем. Тот, кто не знаком с PHP, после прочтения сам ничего не сможет написать. А для знающих статья представляет сомнительный интерес.
Зачем в такой маленькой статье так много ошибок?
Minimal 14.02.2011 18:51 #
здоровая критика всегда приветствуется, это моя первая статейка, буду учитывать все пожелания, где ошибки указывайте, потому как пишу на скорую руку
predator 14.02.2011 20:56 #
Пишите больше или мало, но интересно
inst 14.02.2011 18:36 #
Зачем два конфига? Я вот после этого цикла статей на прошлых выходных призадумался и написал для себя набор классов, который должен будет мне помочь в будущем проще конфигурировать мои web-приложения.

PS: если сообществу будет интересно, могу чуть позже выложить.
kstep 14.02.2011 18:43 #
Увы, сервер не отвечает.
kstep 14.02.2011 18:44 #
А нет, прогрузился. Видимо проседает. Welinux-эффект?
inst 14.02.2011 19:01 #
хз, блог не мой, автору виднее :)
Minimal 14.02.2011 18:52 #
мне так удобнее, конфиги разные, и несут разные задачи
_DM_ 14.02.2011 18:37 #
Закрывающий ?> в конце файла совсем не обязателен, мало того, на некоторых серверах из-за него возникают проблемы :\
kstep 14.02.2011 18:42 #
Из-за него проблемы, если после него есть хотя бы один пробельный символ. Тогда при инклудах в выводе ВНЕЗАПНО оказываются пробелы, и ты долго не можешь понять, почему headers() и setcookie() не работают, ругаясь на то, что вывод тела документа уже начат вот там-то...
_DM_ 14.02.2011 18:44 #
Так вопрос, зачем он нужен, если за пробелами следить приходится? :)
inst 14.02.2011 19:02 #
Действительно, в файлах с классами Я почти никогда его не закрываю.
Это даже просто удобнее.
kstep 14.02.2011 19:48 #
Варианты ответа:
  1. Для красоты,
  2. для симметричности,
  3. ни для чего.
inst 14.02.2011 18:43 #
Всё-таки есть толк и в таких постах.

Лично Я про необязательность тега знал, но чтоб проблемы...
_DM_ 14.02.2011 19:04 #
Хотелось бы больше конкретики, что данный блог будет "уметь" в итоге. Если не техническое задание, то хотя бы список его фунционала.
Minimal 14.02.2011 20:06 #
* ЧПУ
* Визуальный редактор
* Посты по категориям
* Комментарии к постам
* Обратная связь
* Поиск
* Гибкая настройка дизайна
* Ну и так далее ...
pingg 14.02.2011 20:51 #
Стоило вам написать это в начале статьи. Ну и далее по пунктам идти, сообщать что будет в следующей статье, домашнее задание, может, дать какое-нибудь. Так интереснее и практически полезнее.
digiwhite 14.02.2011 21:50 #
ЧПУ

Не силен в Web и в голову приходят только станки с ЧПУ. А вы что имеете в виду?
predator 14.02.2011 21:58 #
Человекопонятный URL
digiwhite 14.02.2011 21:59 #
Ужас, что за сокращение :)
booley 15.02.2011 11:07 #
Не ЧПС, да.
inst 14.02.2011 19:11 #
зачем всем подряд устанавливать сессии? Это же в перспективе излишняя нагрузка на сервер.
Minimal 14.02.2011 20:00 #
Я смотрю это не то место, для адекватного общения на темы кроме линукса.
Из кучи комментов, которые выше я погу выделить только несколько штук по существу, а остальные написаны не от большого ума.
Смотрю не интересна тема. раз так, тогда продолжать не имеет смысла.

vkapas 14.02.2011 20:43 #
Не обращайте внимание на минусаторов. Как правило, люди, которые просто читают (с пользой для себя) не всегда комментируют пост. В отличие от. Продолжайте, пожалуйста.

Небольшая просьба: писать в будущем более полные статьи и расставлять ссылки между частями. Спасибо.
Minimal 14.02.2011 20:49 #
Спс, за реальное мнение!
predator 14.02.2011 20:58 #
Так и есть =)
exelens 14.02.2011 23:22 #
а остальные написаны не от большого ума.
ты их не корми и не неужно так писать.
Тебе ведь не написали, что ты тормоз и пишешь херню?
Пиши, дальше, критику фиксируй.

Поверь тут есть очень шаристые в вебе люди.
Minimal 14.02.2011 23:26 #
ОК! буду отвечать только на адекватные комменты.
exelens 14.02.2011 23:28 #
Договорились =)
А я и модеры присмотрим за агресивными, фанатичными и воздадим баны.
predator 14.02.2011 20:59 #
session_start, ini_set, error_reporting - стандартные функции языка?
Minimal 14.02.2011 21:10 #
session_start инициализирует данные сессии, создаёт сессию (или продолжает текущую на основе session id, переданного через GET-переменную или куку).

ini_set устанавливает значение опции конфигурации, устанавливает значение данной опции конфигурации, возвращает старое значение при успехе, FALSE при неудаче, опция конфигурации будет сохранять это новое значение в процессе выполнения скрипта и восстановится по окончании работы скрипта.

error_reporting устанавливает, о каких ошибках PHP сообщается,

predator 14.02.2011 21:16 #
Об этом я дагадался, но Вы не ответили на поставленный вопрос =)
Я просто когда-то учил php, знаю что значит include, require и т.д., но вот откуда по среди скрипта (когда ещё не был ни одного include) взялась функция session_start понять не могу
Minimal 14.02.2011 21:20 #
Я думал с ответа догадаешься, да это стандарт.
kstep 15.02.2011 15:32 #
Да, стандартные.
DOOMer 14.02.2011 21:32 #
Добавь, плз, эти пояснения в саму статью, после фраггмента кода. И в самое начало статьи перечисление той функциональности, которую планируешь реализовать в движке.
Minimal 14.02.2011 21:45 #
Добавил! в следующий раз учту.
inst 15.02.2011 06:01 #
Ответьте, пожалуйста, на мой комментарий.

Я до сих пор не понимаю, зачем всем подряд сессии ставить? В вашем движке вообще анонимные комменты можно будет оставлять? Имеется в виду как в WordPress: без регистрации.
inst 15.02.2011 06:03 #
Вот нормальная ссылка: http://welinux.ru/post/5117/#cmnt97691
Minimal 15.02.2011 10:24 #
Кстати да, что будет лучше, с регистрацией или без нее.
Я думал делать с регой, счас задумался а может ну ее.
Zereal 15.02.2011 10:36 #
а что если прикрутить авторизацию через openid, facebook и не знаю, чтонить рунетное.
exelens 15.02.2011 10:43 #
Не рекомендую.
Будут регится с разных аккаунтов и писать хернб всякую или вообще напишут бота который будет постоянно спамить.
booley 15.02.2011 11:08 #
Вот так и загнётся openid.
kirpichtion 16.02.2011 07:27 #
Вы слишком много от парнишки требуете :) Он еще молод и не опытен. Ему еще детей рожать, а вы про openid :)
exelens 15.02.2011 10:44 #
Рега нужна с верификацией по емейлу.
mrdev 14.02.2011 21:21 #
А почему без framework`а какого-нибудь?
Minimal 14.02.2011 21:33 #
Основной идеей есть сделать все самому, без навеса всякого лишнего, чтоб в дальнейшем код был читабелен, просто может случится так что человек не знает, этого фреймворка, придется разбираться, а тут код голяком все написано понятно.
mrdev 14.02.2011 21:48 #
Все равно, все пишется все на фреймверках на готовых или на собственных, большое количество основано на архитектуре MVC. Тогда надеюсь, после релиза движка, тоже самое будет с применением какого-нибудь.
kstep 15.02.2011 15:36 #
Просто в итоге родиться ещё один фреймворк, похожий процетов на 80-90% на какой-либо из уже существующих. С готовым фреймворком тебе просто не придётся самому реализовывать кучу велосипедных деталей, а собрать велосипед из уже готовых. Вытачивать же детали самому «с нуля»... Ну и будут у тебя такие же детали, как у всех, только шестерёнки немного другого диаметра. Я это не от «большого ума» © пишу, а от опыта =) Столько раз уже такое проходил и со стороны видел...
kirpichtion 16.02.2011 06:44 #
То есть ты все-таки настаиваешь на том, что надо писать свое чудо-юдо, а не пользоваться продуктом квалифицированных специалистов?
Minimal 16.02.2011 10:15 #
Как ты называешь ква-квалифицированные специалисты, они такие же как и мы ;)))))
digiwhite 14.02.2011 21:52 #
ИМХО, если обучать, то лучше именно с нуля, чтобы люди в общем и целом стали представлять, что такое CMS и как оно работает изнутри. А потом уже можно и в сторону фреймворков смотреть.
mrdev 14.02.2011 21:55 #
угу, я согласен, я ниже так и написал, точнее выше вашего коммента, что надеюсь ТС, напишет уроки, тоже самое но с применением фреймверка
Minimal 14.02.2011 22:08 #
согласен все именно так и планируется
kstep 15.02.2011 15:37 #
Для обучения — да, это отдельная задача. Но в итоге всё равно будешь юзать фреймворк какой-нить, как только поток проектов появится...
exelens 14.02.2011 23:15 #
Если будете пилить свой движок для блога и вообще
Немного о том что должно получится в итоге.
* ЧПУ
* Визуальный редактор
* Посты по категориям
* Комментарии к постам
* Обратная связь
* Поиск
* Гибкая настройка дизайна
* Ну и так далее ...


Обязательно делайте:
XML карту сайта
Страницу с 404 ошибкой и на ней выводите все страницы в виде дерева.

Желательно делайте:
RSS
управлялку постами и страницами - скрыть, убрать, запретить индексацию - дабы убрать дубли контента и/или усилить содержимое.

Если сделаете то, что написано выше, Ваш проект можно будет нормально продвигать =)
Minimal 14.02.2011 23:18 #
за карту спасибо, не учел,
по поводу 404 планировалось,
RSS будет.

+1
inst 15.02.2011 05:57 #
> Страницу с 404 ошибкой и на ней выводите все страницы в виде дерева.
Прям-таки все? Ссылка на карту сайта в человекопонятной форме (html, "в виде дерева") будет хуже? Разве поисковики посещают страницы ошибок (при условии правильного HTTP-кода, конечно)?

> управлялку постами и страницами
это Вы так админку окрестили? :)
exelens 15.02.2011 09:13 #
Прям-таки все?

Лучше карту сайта прямо там.

Разве поисковики посещают страницы ошибок (при условии правильного HTTP-кода, конечно)?

Довольно часто происходит следующее.
Была целевая станица, её качали... статьями, блогами, ссылками, твитерами и проч проч.
Затем её убили.

Доказано на практике, что посетителе в таком случае находит глазами то, что ему нужно и тыкает туда.
Поисковикам тоже хорошо:
1. даже если страница перестала быть целевой то на новую её есть ссылка.
2. по адресу старой страницы есть тематический контент и ссылки на новые целевые страницы.

это Вы так админку окрестили? :)

Админка и пермишенс это разные вещи.

Если ты не шаришь то не нужно поучать и пытаться троллить.
booley 15.02.2011 11:10 #
Админка и пермишенс это разные вещи.

В одноюзерском блоге вполне могут быть одной сутью, но согласен.
exelens 15.02.2011 11:13 #
пермишенл - права.
В данном случае я имел ввиду
управлялку постами и страницами - скрыть, убрать, запретить индексацию - дабы убрать дубли контента и/или усилить содержимое.
можно и этот мезанизм назвать пермишнс но применительно к контенту.
inst 15.02.2011 22:12 #
Была целевая станица. Затем её убили.

Мне кажется логичнее тупо редирект 301-й поставить, но не буду "поучать и пытаться троллить".
exelens 15.02.2011 22:16 #
Мне кажется логичнее тупо редирект 301-й поставить
для продвижения как показывает практика так лучше не делать.
kirpichtion 16.02.2011 07:05 #
Отчего вы решили использовать MySQL? Он же явно теряет позиции. И если вы планируете разрабатывать нечто, что простоит хотя бы лет пять, то, имхо, как-то не разумно использовать именно этот сервер. Или вы не слышали ни о чем ином, или это все-таки поделка школьника, призвание которой быть никому не нужной?

Зачем вы используете сессии, мой "друг"? Мама разве не научила вас делать обертки? Хотя я кажется понимаю в чем проблема. Проблему проектирования быдлокодеры не изучают, считая, что любую задачу можно решить прямо в лоб без всяких лишних замарочек. Оставим этот грех на вашей совести.

И еще я имею три вопроса. Отчего error_reporting() идет после инклудов и старта сессии? Что с OOP? Я не имею ввиду написание классов вместо функции. Я имею ввиду то, как будет рождаться соединение с БД, как будет производиться вывод в браузер, и все-все остальное? Что с исключениями? Ну явно вы не планируете их использовать.

Резюме. Может тебе было бы лучше оставить это занятие и продолжать заниматься своим старым делом: дурить народ в своей студии, плодя говнокод мегабайтами? Гуру тоже мне...
Minimal 16.02.2011 10:19 #
ГЫ ГЫ и смех и грех :)))))
ZogG 16.02.2011 10:42 #
ты реально зае**, тебе задели твое эго? если ты в этом разбераешься, не задавай вопросы, чтоб подколоть человека, а напиши пример, как бы это сделал ты.