Видео смотреть бесплатно

Смотреть супер видео

Официальный сайт jhealth 24/7/365

Смотреть видео бесплатно

14.02.11 16:33 Minimal

Урок, пишем свой движок блога.Урок 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
17
18

<?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
8
9

AddDefaultCharset utf8

DirectoryIndex index.php

php_flag magic_quotes_gpc Off

php_flag magic_quotes_runtime Off
 


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

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

Урок 2 / Урок 3


Теги:

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лучшие блоги (все 158)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Элита (все 3201 из 232 городов)
Топ пользователей Топ блогов
В сети: doraneko, nvbn, shidoh, dimlight

Новенькие: spike1986, ms_shark, hdg700, sroot, exzz
welinux.ru

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн