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, он будет выглядеть так:
session_start - инициализирует данные сессии, создаёт сессию (или продолжает текущую на основе session id, переданного через GET-переменную или куку).
ini_set - устанавливает значение опции конфигурации, устанавливает значение данной опции конфигурации, возвращает старое значение при успехе, FALSE при неудаче, опция конфигурации будет сохранять это новое значение в процессе выполнения скрипта и восстановится по окончании работы скрипта.
error_reporting - устанавливает, о каких ошибках PHP сообщается.
Файл .htaccess имеет такое содержание:
1 |
AddDefaultCharset utf8
|
На этом я пока остановлюсь, потому как это все файлы, которые есть в корне, а остальные мы затронем в следующей статье, чтобы не разрывать смысл.
ПРОДОЛЖЕНИЕ СЛЕДУЕТ!
Урок 2 / Урок 3
melksoft 14.02.2011 17:10 #
+ 5 -
Пока пост ни о чем. То, что в index.php нужно инклюдать конфиг, язык и ядро и так понятно. Кстати локализацию лучше делать через gettext, благо в PHP это очень просто.
Для тех кто читает между строк повторю:
Первый урок будет маленький, потому как мне скоро на прием к врачу, по этому время ограничено.
Вы ведь не в бложек пишите. Можно было подготовить и написать больше.
Кстати, да. Дешевое оправдание, Минимал. Нефиг на больную голову умничать в теме, которой ты ниразу не компетентен.
Слыш ты, умник, ты что ли смотрю много компетентен?
Сказал бы что нибудь умное, а то все попка дура, да пока дурак :))))))
Если так любишь пипа умные вещи писать, напиши свою статейку мы обсудим.
P/S надеюсь ты понял почему так сказано?
Сказал бы что нибудь умное, а то все попка дура, да пока дурак :))))))
Если так любишь пипа умные вещи писать, напиши свою статейку мы обсудим.
P/S надеюсь ты понял почему так сказано?
если у этих велосипедов, не учли в конструкции педали, то далеко он не уедет.
Именно поэтому я рекомендую Symfony, подойдет под любую форму ноги .)
он хочет не подарить вам велосипед, а объяснить принцип работы изнутри, чтоб если у вас не заведеться, вы сами могли бы сменить колесо. (пока статья очень короткая, ждем продолжения)
Чтобы сменить колесо имеется вещь именуемая мануалом и тот самый гугл.
ну так зачем тебе читать и сидеть на этом сайте, все уже давно есть в гугле (включая вилинукс).
кстати примеры кода с объяснением мне всегда помогали понять те или иные функции лучше. и если понять эти статьи, то можно самому написать не только двиг для блога, а другие не сложные вещи для своих целей.
да че я тут доказываю, не нравится - не читай, а то я гляжу тебе так не понравилась статья, что ты все комменты прочитал, и не поленился ответить. если мне что-то не интересно, я не буду заходить даже в новость
кстати примеры кода с объяснением мне всегда помогали понять те или иные функции лучше. и если понять эти статьи, то можно самому написать не только двиг для блога, а другие не сложные вещи для своих целей.
да че я тут доказываю, не нравится - не читай, а то я гляжу тебе так не понравилась статья, что ты все комменты прочитал, и не поленился ответить. если мне что-то не интересно, я не буду заходить даже в новость
И каких же педалей там нет? :) Плюс, ты же помнишь, что помимо Symfony имеются Kohana и Zend Framework. И чего тебе в них не хватает?
Слушай что ты все время демагогию разводишь?
Мы здесь про Symfony, Kohana или Zend Framework обсуждаем?
Если хочешь пофлеймыть создай ветку и там обсуждай у кого какие педали и рули.
Мы здесь про Symfony, Kohana или Zend Framework обсуждаем?
Если хочешь пофлеймыть создай ветку и там обсуждай у кого какие педали и рули.
1> в сети кроме заезженного wordpress'a не чего и нет
MaxSite?
2> меня ... технично попросили
Я думал техничными бывают удары в боксе.
3> PHP, mySQL
как оригинально
4> скоро на прием к врачу
это связано с вашими пристрастиями в выборе ОС? :)
MaxSite?
2> меня ... технично попросили
Я думал техничными бывают удары в боксе.
3> PHP, mySQL
как оригинально
4> скоро на прием к врачу
это связано с вашими пристрастиями в выборе ОС? :)
2> меня ... технично попросили
Я думал техничными бывают удары в боксе.
вот видимо именно так и попросили...
4> скоро на прием к врачу
это связано с вашими пристрастиями в выборе ОС? :)
это связано с вашими пристрастиями в выборе ОС? :)
а это, видимо, результат техничной просьбы =)
1) MaxSite?
ну если бы я стал перечислять все что движется в сети кроме wordpress'a,
список был бы большой.
2) Я думал техничными бывают удары в боксе.
техничными бывают не только удары, а еще много чего, хотя раз вы такой осведомленный про бокс, ведать уже все потерено
3) как оригинально
не как есть, предложи альтернативу
4) это связано с вашими пристрастиями в выборе ОС? :)
именно
ну если бы я стал перечислять все что движется в сети кроме wordpress'a,
список был бы большой.
2) Я думал техничными бывают удары в боксе.
техничными бывают не только удары, а еще много чего, хотя раз вы такой осведомленный про бокс, ведать уже все потерено
3) как оригинально
не как есть, предложи альтернативу
4) это связано с вашими пристрастиями в выборе ОС? :)
именно
1> я о том же: альтернатив полно, а в посте сказано обратное
2> тут вы со мной на "вы"
3> а вот тут уже на "ты". У вас и в коде так же?
PostgreSQL больше не альтернатива?
2> тут вы со мной на "вы"
3> а вот тут уже на "ты". У вас и в коде так же?
PostgreSQL больше не альтернатива?
Было бы зачётно закодить бложек на си.
А вообще: Ruby, Python; PSQL, SQLite, redis. Всё это не так заезженно.
А вообще: Ruby, Python; PSQL, SQLite, redis. Всё это не так заезженно.
Плюсую. У самого основной блог (по Линуксу, кстати) на MaxSite. Уже года два как. Очень доволен движком! Шустрый, полно плагинов. Говорить, что кроме вордпресса ничего нет... Ну, это несерьёзно.
Есть альтернативы. И хорошие альтернативы.
Одно дело мотивировать свой порыв тем, что хочется показать, как эти самые ЦМС пишутся. Чисто для образовательных целей. А другое дело - нагло врать. Ну ладно, искажать действительность. Забрасывая помётом соседей сами чище не станете.
Есть альтернативы. И хорошие альтернативы.
Одно дело мотивировать свой порыв тем, что хочется показать, как эти самые ЦМС пишутся. Чисто для образовательных целей. А другое дело - нагло врать. Ну ладно, искажать действительность. Забрасывая помётом соседей сами чище не станете.
Статья ни о чем. Тот, кто не знаком с PHP, после прочтения сам ничего не сможет написать. А для знающих статья представляет сомнительный интерес.
Зачем в такой маленькой статье так много ошибок?
Зачем в такой маленькой статье так много ошибок?
здоровая критика всегда приветствуется, это моя первая статейка, буду учитывать все пожелания, где ошибки указывайте, потому как пишу на скорую руку
Зачем два конфига? Я вот после этого цикла статей на прошлых выходных призадумался и написал для себя набор классов, который должен будет мне помочь в будущем проще конфигурировать мои web-приложения.
PS: если сообществу будет интересно, могу чуть позже выложить.
PS: если сообществу будет интересно, могу чуть позже выложить.
Закрывающий ?> в конце файла совсем не обязателен, мало того, на некоторых серверах из-за него возникают проблемы :\
Из-за него проблемы, если после него есть хотя бы один пробельный символ. Тогда при инклудах в выводе ВНЕЗАПНО оказываются пробелы, и ты долго не можешь понять, почему headers() и setcookie() не работают, ругаясь на то, что вывод тела документа уже начат вот там-то...
Так вопрос, зачем он нужен, если за пробелами следить приходится? :)
Действительно, в файлах с классами Я почти никогда его не закрываю.
Это даже просто удобнее.
Это даже просто удобнее.
Всё-таки есть толк и в таких постах.
Лично Я про необязательность тега знал, но чтоб проблемы...
Лично Я про необязательность тега знал, но чтоб проблемы...
Хотелось бы больше конкретики, что данный блог будет "уметь" в итоге. Если не техническое задание, то хотя бы список его фунционала.
* ЧПУ
* Визуальный редактор
* Посты по категориям
* Комментарии к постам
* Обратная связь
* Поиск
* Гибкая настройка дизайна
* Ну и так далее ...
* Визуальный редактор
* Посты по категориям
* Комментарии к постам
* Обратная связь
* Поиск
* Гибкая настройка дизайна
* Ну и так далее ...
Стоило вам написать это в начале статьи. Ну и далее по пунктам идти, сообщать что будет в следующей статье, домашнее задание, может, дать какое-нибудь. Так интереснее и практически полезнее.
ЧПУ
Не силен в Web и в голову приходят только станки с ЧПУ. А вы что имеете в виду?
зачем всем подряд устанавливать сессии? Это же в перспективе излишняя нагрузка на сервер.
Я смотрю это не то место, для адекватного общения на темы кроме линукса.
Из кучи комментов, которые выше я погу выделить только несколько штук по существу, а остальные написаны не от большого ума.
Смотрю не интересна тема. раз так, тогда продолжать не имеет смысла.
Из кучи комментов, которые выше я погу выделить только несколько штук по существу, а остальные написаны не от большого ума.
Смотрю не интересна тема. раз так, тогда продолжать не имеет смысла.
Не обращайте внимание на минусаторов. Как правило, люди, которые просто читают (с пользой для себя) не всегда комментируют пост. В отличие от. Продолжайте, пожалуйста.
Небольшая просьба: писать в будущем более полные статьи и расставлять ссылки между частями. Спасибо.
Небольшая просьба: писать в будущем более полные статьи и расставлять ссылки между частями. Спасибо.
а остальные написаны не от большого ума.
ты их не корми и не неужно так писать.Тебе ведь не написали, что ты тормоз и пишешь
Пиши, дальше, критику фиксируй.
Поверь тут есть очень шаристые в вебе люди.
Договорились =)
А я и модеры присмотрим за агресивными, фанатичными и воздадим баны.
А я и модеры присмотрим за агресивными, фанатичными и воздадим баны.
session_start, ini_set, error_reporting - стандартные функции языка?
session_start инициализирует данные сессии, создаёт сессию (или продолжает текущую на основе session id, переданного через GET-переменную или куку).
ini_set устанавливает значение опции конфигурации, устанавливает значение данной опции конфигурации, возвращает старое значение при успехе, FALSE при неудаче, опция конфигурации будет сохранять это новое значение в процессе выполнения скрипта и восстановится по окончании работы скрипта.
error_reporting устанавливает, о каких ошибках PHP сообщается,
ini_set устанавливает значение опции конфигурации, устанавливает значение данной опции конфигурации, возвращает старое значение при успехе, FALSE при неудаче, опция конфигурации будет сохранять это новое значение в процессе выполнения скрипта и восстановится по окончании работы скрипта.
error_reporting устанавливает, о каких ошибках PHP сообщается,
Об этом я дагадался, но Вы не ответили на поставленный вопрос =)
Я просто когда-то учил php, знаю что значит include, require и т.д., но вот откуда по среди скрипта (когда ещё не был ни одного include) взялась функция session_start понять не могу
Я просто когда-то учил php, знаю что значит include, require и т.д., но вот откуда по среди скрипта (когда ещё не был ни одного include) взялась функция session_start понять не могу
Добавь, плз, эти пояснения в саму статью, после фраггмента кода. И в самое начало статьи перечисление той функциональности, которую планируешь реализовать в движке.
Ответьте, пожалуйста, на мой комментарий.
Я до сих пор не понимаю, зачем всем подряд сессии ставить? В вашем движке вообще анонимные комменты можно будет оставлять? Имеется в виду как в WordPress: без регистрации.
Я до сих пор не понимаю, зачем всем подряд сессии ставить? В вашем движке вообще анонимные комменты можно будет оставлять? Имеется в виду как в WordPress: без регистрации.
Кстати да, что будет лучше, с регистрацией или без нее.
Я думал делать с регой, счас задумался а может ну ее.
Я думал делать с регой, счас задумался а может ну ее.
а что если прикрутить авторизацию через openid, facebook и не знаю, чтонить рунетное.
Не рекомендую.
Будут регится с разных аккаунтов и писать хернб всякую или вообще напишут бота который будет постоянно спамить.
Будут регится с разных аккаунтов и писать хернб всякую или вообще напишут бота который будет постоянно спамить.
Вы слишком много от парнишки требуете :) Он еще молод и не опытен. Ему еще детей рожать, а вы про openid :)
Основной идеей есть сделать все самому, без навеса всякого лишнего, чтоб в дальнейшем код был читабелен, просто может случится так что человек не знает, этого фреймворка, придется разбираться, а тут код голяком все написано понятно.
Все равно, все пишется все на фреймверках на готовых или на собственных, большое количество основано на архитектуре MVC. Тогда надеюсь, после релиза движка, тоже самое будет с применением какого-нибудь.
Просто в итоге родиться ещё один фреймворк, похожий процетов на 80-90% на какой-либо из уже существующих. С готовым фреймворком тебе просто не придётся самому реализовывать кучу велосипедных деталей, а собрать велосипед из уже готовых. Вытачивать же детали самому «с нуля»... Ну и будут у тебя такие же детали, как у всех, только шестерёнки немного другого диаметра. Я это не от «большого ума» © пишу, а от опыта =) Столько раз уже такое проходил и со стороны видел...
То есть ты все-таки настаиваешь на том, что надо писать свое чудо-юдо, а не пользоваться продуктом квалифицированных специалистов?
Как ты называешь ква-квалифицированные специалисты, они такие же как и мы ;)))))
ИМХО, если обучать, то лучше именно с нуля, чтобы люди в общем и целом стали представлять, что такое CMS и как оно работает изнутри. А потом уже можно и в сторону фреймворков смотреть.
угу, я согласен, я ниже так и написал, точнее выше вашего коммента, что надеюсь ТС, напишет уроки, тоже самое но с применением фреймверка
Для обучения — да, это отдельная задача. Но в итоге всё равно будешь юзать фреймворк какой-нить, как только поток проектов появится...
Если будете пилить свой движок для блога и вообще
Обязательно делайте:
XML карту сайта
Страницу с 404 ошибкой и на ней выводите все страницы в виде дерева.
Желательно делайте:
RSS
управлялку постами и страницами - скрыть, убрать, запретить индексацию - дабы убрать дубли контента и/или усилить содержимое.
Если сделаете то, что написано выше, Ваш проект можно будет нормально продвигать =)
Немного о том что должно получится в итоге.
* ЧПУ
* Визуальный редактор
* Посты по категориям
* Комментарии к постам
* Обратная связь
* Поиск
* Гибкая настройка дизайна
* Ну и так далее ...
* ЧПУ
* Визуальный редактор
* Посты по категориям
* Комментарии к постам
* Обратная связь
* Поиск
* Гибкая настройка дизайна
* Ну и так далее ...
Обязательно делайте:
XML карту сайта
Страницу с 404 ошибкой и на ней выводите все страницы в виде дерева.
Желательно делайте:
RSS
управлялку постами и страницами - скрыть, убрать, запретить индексацию - дабы убрать дубли контента и/или усилить содержимое.
Если сделаете то, что написано выше, Ваш проект можно будет нормально продвигать =)
за карту спасибо, не учел,
по поводу 404 планировалось,
RSS будет.
+1
по поводу 404 планировалось,
RSS будет.
+1
> Страницу с 404 ошибкой и на ней выводите все страницы в виде дерева.
Прям-таки все? Ссылка на карту сайта в человекопонятной форме (html, "в виде дерева") будет хуже? Разве поисковики посещают страницы ошибок (при условии правильного HTTP-кода, конечно)?
> управлялку постами и страницами
это Вы так админку окрестили? :)
Прям-таки все? Ссылка на карту сайта в человекопонятной форме (html, "в виде дерева") будет хуже? Разве поисковики посещают страницы ошибок (при условии правильного HTTP-кода, конечно)?
> управлялку постами и страницами
это Вы так админку окрестили? :)
Прям-таки все?
Лучше карту сайта прямо там.
Разве поисковики посещают страницы ошибок (при условии правильного HTTP-кода, конечно)?
Довольно часто происходит следующее.
Была целевая станица, её качали... статьями, блогами, ссылками, твитерами и проч проч.
Затем её убили.
Доказано на практике, что посетителе в таком случае находит глазами то, что ему нужно и тыкает туда.
Поисковикам тоже хорошо:
1. даже если страница перестала быть целевой то на новую её есть ссылка.
2. по адресу старой страницы есть тематический контент и ссылки на новые целевые страницы.
это Вы так админку окрестили? :)
Админка и пермишенс это разные вещи.
Если ты не шаришь то не нужно поучать и пытаться троллить.
Админка и пермишенс это разные вещи.
В одноюзерском блоге вполне могут быть одной сутью, но согласен.
пермишенл - права.
В данном случае я имел ввиду
В данном случае я имел ввиду
управлялку постами и страницами - скрыть, убрать, запретить индексацию - дабы убрать дубли контента и/или усилить содержимое.
можно и этот мезанизм назвать пермишнс но применительно к контенту.
Была целевая станица. Затем её убили.
Мне кажется логичнее тупо редирект 301-й поставить, но не буду "поучать и пытаться троллить".
Мне кажется логичнее тупо редирект 301-й поставить
для продвижения как показывает практика так лучше не делать.
Отчего вы решили использовать MySQL? Он же явно теряет позиции. И если вы планируете разрабатывать нечто, что простоит хотя бы лет пять, то, имхо, как-то не разумно использовать именно этот сервер. Или вы не слышали ни о чем ином, или это все-таки поделка школьника, призвание которой быть никому не нужной?
Зачем вы используете сессии, мой "друг"? Мама разве не научила вас делать обертки? Хотя я кажется понимаю в чем проблема. Проблему проектирования быдлокодеры не изучают, считая, что любую задачу можно решить прямо в лоб без всяких лишних замарочек. Оставим этот грех на вашей совести.
И еще я имею три вопроса. Отчего error_reporting() идет после инклудов и старта сессии? Что с OOP? Я не имею ввиду написание классов вместо функции. Я имею ввиду то, как будет рождаться соединение с БД, как будет производиться вывод в браузер, и все-все остальное? Что с исключениями? Ну явно вы не планируете их использовать.
Резюме. Может тебе было бы лучше оставить это занятие и продолжать заниматься своим старым делом: дурить народ в своей студии, плодя говнокод мегабайтами? Гуру тоже мне...
Зачем вы используете сессии, мой "друг"? Мама разве не научила вас делать обертки? Хотя я кажется понимаю в чем проблема. Проблему проектирования быдлокодеры не изучают, считая, что любую задачу можно решить прямо в лоб без всяких лишних замарочек. Оставим этот грех на вашей совести.
И еще я имею три вопроса. Отчего error_reporting() идет после инклудов и старта сессии? Что с OOP? Я не имею ввиду написание классов вместо функции. Я имею ввиду то, как будет рождаться соединение с БД, как будет производиться вывод в браузер, и все-все остальное? Что с исключениями? Ну явно вы не планируете их использовать.
Резюме. Может тебе было бы лучше оставить это занятие и продолжать заниматься своим старым делом: дурить народ в своей студии, плодя говнокод мегабайтами? Гуру тоже мне...