Пишем свой блог с фреймворком Fat-Free Framework. Поездка в Норвегию в марте на машине из Питера. Красота дороги, фьордов, снега и гор наивных вопросов от начинающих серферов

Поиск автоэлектрика с выездом в Москве

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

Лет 20-30 тому водители могли отремонтировать электропроводку в авто только пассатижами и мотком изоленты, в то же время в советских машинах и чинить в принципе не было ничего, зажигание и освещение. В современных моделях без автомеханика уже не факт что самостоятельно даже отыщите какой именно провод куда тянется, поэтому уже при самой маленькой неисправности приходится или вести машину в автомастерскую или нанимать здесь http://avtoelektrik-moskva.ru/ автоэлектрика с выездом. Хотя получается и так что до автомастерской на своих колёсах не приехать, к примеру, сгорела проводка или необходима деактивация автосигнализации, тогда только отыскать автоэлектрика с выездом, чтобы на месте поломки определил что делать, или заказывать автоэвакуатор, а потом в любом случае оплатить работу автоэлектрика.

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

  • Перевод
  • Tutorial

На всякий случай - это перевод (многие не замечают этого в интерефейсе ХабраХабра).
«Fat-Free» можно перевести с английского как «Обезжиренный» - фреймворк и в самом деле поражает своим размером (55 КБ) и скоростью работы.

Я наконец-то нашёл лёгкий и быстрый фреймворк. Он умещается в файл размером всего 55Кб и имеет множество возможностей, о которых вы можете узнать на его , поэтому не буду повторяться. Вместо этого я решил сделать небольшой учебник, из которого вы узнаете как сделать свой блог на этом фреймворке.
Вам понадобится PHP 5.3 на сервере. Я использовал Ubuntu 11.04 для написания этого учебника, на которую легко устанавливается эта версия. Если вы работаете на RHEL или Centos то я предлагаю заглянуть вам на IUS Community Project для получения последней версии PHP.

Установка

Fat-Free Framework.
Fat-Free Framework работает одинаково хорошо и в корне сайта, и в подкаталоге. Я предполагаю, что вы будете использовать подкаталог, поскольку вам не нужно будет создавать отдельный сайт для этого урока.
Создайте папку с именем blog и распакуйте содержимое фреймворка в неё. Это должно выглядеть примерно так:

Поднимитесь на один уровень вверх в иерархии каталогов и установите следующие разрешения:

Sudo chgrp -R www-data blog sudo chmod -R 775 blog
Если вы используете Apache, то mod_rewrite должен быть включён. Измените.htaccess и откорректируйте RewriteBase так, чтобы он указывал на папку с блогом. Например: RewriteBase /blog.

Уже сейчас вы можете зайти в папку blog на сервере и увидеть такую страницу:

(Как только вы посетите эту страницу, будет будет создана специальная папка с кешем - не беспокоитесь об этом).

Начало

Всё что нам нужно уже есть в Fat-Free Framework.

Давайте сначала отредактируем главную страницу и создадим подключение к базе данных.

Откройте файл index.php . Закомментируйте параметр кэширования и установите уровень отладки, чтобы вам легче было заниматься разработкой:


Для установки соединения с базой данных добавьте следующее между командами set и run :

F3::set("DB", new DB("mysql:host=localhost;port=3306;dbname=ИмяВашейБазыДанных", "ИмяПользователя", "Пароль"));
Все файлы пользовательского интерфейса находятся в каталоге ui - вы можете удалить welcome.htm и style.css отсюда, так как они просто используются домашней страницей по-умолчанию.

Маршрутизация

Вы должны сказать фреймворку метод запроса (GET, POST, PUT и т.д.), адрес для запроса и как ответить на этот запрос.

Маршрут для домашней страницы:

F3::route("GET /", function () { // делаем что-нибудь });
Эта безымяная функция будет содержать логику для заполнения страницы.

Для просмотра записи блога:

F3::route("GET /view/@id", function () { $id = F3::get("PARAMS["id"]"); });
Это позволяет фреймворку ожидать URI-параметр и присваивает его переменной PHP в функции.

Теперь маршруты для администратора:

// Главная страница администратора F3::route("GET /admin", function () { }); // Страница для добавления материала F3::route("GET /admin/add", function() { }); // Для редактирования материала F3::route("GET /admin/edit/@id", function() { $id = F3::get("PARAMS["id"]"); }); // Служебная для принятия запросов F3::route("POST /admin/edit/@id","edit"); F3::route("POST /admin/add","edit"); function edit() { } // Для удаления F3::route("GET /admin/delete/@id", function() { $id = F3::get("PARAMS["id"]"); });
Обратите внимание, что мы используем одну и ту же функцию для обработки добавления и редактирования сообщений, по этому она имеет имя (остальным функциям имена можно не давать).

Модели

ORMs в Fat-Free Framework делает всю грязную работу за вас - никаких директорий, файлов или кода.

Вот SQL запрос, который создаст 2 таблицы, необходимые для этого урока:

ХабраХабр почему-то не хочет красить этот кусок - прим. перев.

CREATE DATABASE `blog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `blog`; CREATE TABLE IF NOT EXISTS `article` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `timestamp` datetime NOT NULL, `title` VARCHAR(128) NOT NULL, `summary` VARCHAR(128) NOT NULL, `content` text NOT NULL, `author` VARCHAR(128) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `article` (`id`, `timestamp`, `title`, `summary`, `content`, `author`) VALUES (1, "2011-07-28 02:03:14", "Hello World!", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", "Mr White"), (2, "2011-07-28 02:03:14", "More Hello World!", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", "Mr Green"); CREATE TABLE IF NOT EXISTS `user` (`id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `user` (`id`, `name`, `password`) VALUES ("1", "admin", "password");

Для посетителей

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

$article=new Axon("article"); $articles=$article->afind(); F3::set("articles",$articles);
Вы бы могли объединить последнии 2 строчки в одну F3::set("articles",$article->afind()); , но для удобства я оставил две.

Для использования шаблонов нужно создать базовый файл макета в папке ui с именем layout.html :

{{@html_title}}
Движок использует шаблон {{@имя}} для получения значения переменной.

Теперь создадим шаблон для главной страницы, который будет называется blog_home.html :

Blog Titles

{{trim(@item["title"])}} by {{@item["author"]}}

{{@item["summary"]}}


Теперь, когда шаблон готов, мы можем завершить код в index.php для его отображения:

F3::set("content","blog_home.html"); echo Template::serve("layout.html");
Шаблон для ускорения работы приложения будет переделан движком в php код.

Полный пример будет выглядеть так:

F3::route("GET /", function () { F3::set("html_title","Home Page"); $article=new Axon("article"); F3::set("list",$article->afind()); F3::set("content","blog_home.html"); echo Template::serve("layout.html"); });
Теперь мы дожны сделать страницу, на которой будет находиться полный текст записи:

F3::route("GET /view/@id", function () { $id = F3::get("PARAMS["id"]"); // создаём объект Axon и ищем в нём наш id $article=new Axon("article"); $article->load("id="$id""); // устанавливаем переменные для шаблона F3::set("html_title",$article->title); $article->copyTo("POST"); // подключаем сам шаблон F3::set("content","blog_detail.html"); echo Template::serve("layout.html"); });
Шаблон страницы будет находиться в файле blog_detail.html :

{{@POST.title}}

Published: {{@POST.timestamp}} by {{@POST.author}}

{{@POST.content}}

Back to Homepage

Для администратора

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

F3::route("GET /admin", function () { F3::set("html_title","My Blog Administration"); $article=new Axon("article"); $list=$article->afind(); F3::set("list",$list); F3::set("content","admin_home.html"); echo Template::serve("layout.html"); });
Шаблон хранится в файле admin_home.html :

Панель администратора

Добавить запись

Заголовок Дата Автор Управление
{{@item["title"]}} {{@item["timestamp"]}} {{@item["author"]}} Изменить Удалить

Результат будет примерно такой:

Теперь создадим форму для редактирования и добавления записей в файле admin_edit.html :

Edit

{{ @message }}










Обратите внимание, что есть области для отображения проверки сообщений.

Теперь код для маршрутов:

F3::route("GET /admin/add", function() { F3::set("html_title","My Blog Create"); F3::set("content","admin_edit.html"); echo Template::serve("layout.html"); }); F3::route("GET /admin/edit/@id", function() { F3::set("html_title","My Blog Edit"); $id = F3::get("PARAMS["id"]"); $article=new Axon("article"); $article->load("id="$id""); $article->copyTo("POST"); F3::set("content","admin_edit.html"); echo Template::serve("layout.html"); });
Теперь напишем функцию для редактирования, о которой писалось ранее:

Function edit() { // Reset previous error message, if any F3::clear("message"); $id = F3::get("PARAMS["id"]"); $article=new Axon("article"); //load in the article, set new values then save //if we don"t load it first Axon will do an insert instead of update when we use save command if ($id) $article->load("id="$id""); //overwrite with values just submitted $article->copyFrom("POST"); //create a timestamp in MySQL format $article->timestamp=date("Y-m-d H:i:s"); $article->save(); // Return to admin home page, new blog entry should now be there F3::reroute("/admin"); }

Аутентификация

Добавьте следующие строчки:

// сообщаем фреймворку таблицу с пользователями и передаём значения F3::set("AUTH",array("table"=>"user","id"=>"name","pw"=>"password")); $auth = Auth::basic("sql"); // вход удачный if ($auth) { // сохраняем в сессии F3::set("SESSION.user",$auth->name); // отображаем страницу администратора F3::set("content","admin_home.html"); } else { // вход неудачный F3::set("content","security.html"); }
security.html может выглядеть так:

You must supply valid login details.

Ещё добавьте строчку перед Template::serve:

If (!F3::get("SESSION.user")) F3::set("content","security.html");
Вот и всё. Вы также можете перенаправить пользователя на главную страницу:

If (!F3::get("SESSION.user")) F3::reroute("/");

Итог

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

Скачать готовый пример можно тут -

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

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

2. Sebastian Bergmann. Пионер автоматизированного тестирования в PHP. Создатель фреймворка для тестирования PHPUnit и сооснователь thePHP.cc .

3. Jordi Boggiano. Ведущий разработчик Composer . Участвует в разработке Symfony2. Партнер в Nelmio .

4. Dries Buytaert. Создатель и лидер проекта Drupal . Президент Drupal Association. Сооснователь и технический директор в Acquia .

6. Evan Coury. Сертифицированный инженер по PHP 5.3 and Zend Framework, регулярный докладчик на конференциях по разработке. Создатель Roave .

7. Cal Evans. Архитектор. Представитель разработчиков в GetPantheon .

8. Anthony Ferrara. Разработчик с экспертизами в безопасности, производительности и ООП. Разработал новый, более безопасный password API в PHP 5.5 .

13. Emma Jane Hogbin. Друпал разработчик, темизатор, и опенсоурсный гик. Соавтор книги Front End Drupal и автор Drupal User’s Guide .

14. Rasmus Lerdorf. Создатель PHP.

15. Matthew Weier O’Phinney. Архитектор open-souce ПО. ПМ в Zend Framework . Сертифицированный zend инженер и член Zend Education Advisory Board. Спикер и писатель.

16. Taylor Otwell. Создал

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

Теперь к делу. Идея написания этой статьи пришла мне крайне давно. С того самого момента я собирал тезисы, примеры и мысли в кучу, а теперь постараюсь изобразить их здесь таким образом, чтобы вы смогли развить эту мысль как развил её я в своей голове. Надеюсь, у нас получится. Заранее прошу прощения за эмоциональное повествование.

Для начала наблюдение. Интернет разрастается с огромной скоростью. Нет, давайте ближе к делу. В интернете огромное количество информации. Нет, давайте ещё ближе.

Внушительное количество материалов в интернете представлено в ужасном виде. Да, вот теперь это похоже на тезис.

Под ужасным видом я подразумеваю то представление, с которым подаётся материал. Возьмём, к примеру, “захватывающую новость”, откроем на телефоне и попытаемся прочитать.

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

Ах да, блокировка Telegram в России… Какая жалость, – думали мы несколько месяцев назад. И правда, огромная жалость, что мы не можем нормально прочитать столь захватывающую новость.
Уверен, вы уловили, к чему я клоню. Конечно, блокировка Telegram - это и правда плохо. Но что по-настоящему худо, это чума всплывающего/излишнего/вторичного контента.

И так мобильный интернет выглядел не только в 2017, он выглядел так даже немного раньше, и сейчас стало только хуже. Кстати, там же в треде вы можете найти огромное количество примеров подобной схемы. Это показывает актуальность, масштаб и серьёзность этой проблемы. И в качестве подтверждения очередной пост с grumpy.website:


→ Ссылка

Страдает не только мобильный интернет, возьмём к примеру небезызвестные крупные сайты

От контента на первом экране только заголовок, и на том спасибо.


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


Только третья часть страницы доступна для чтения, не больше.


Прочитайте название статьи. Было бы смешно, если бы не было так грустно.


Что тут вообще происходит?

Я мог бы привести ещё уйму примеров, но уже достаточно съел трафика при загрузке изображений на этой странице. Проблема в том что, мы как будто разучились подавать контент, мы разучились делать достойный user friendly design, мы разучились верстать. То что мы даём пользователю, похоже на плевок в лицо. Во главу мы стали ставить совсем не контент, он обесценился. Нам важнее показать как можно более релевантную и привлекательную рекламу, лишь бы заполучить этот жалкий клик. Мы хотим открестится от судебных тяжб за отсутствие баннера о хранении персональных данных или галочки, но нас совершенно перестало заботить, как это будет сделано. Это очень грустно и бесчеловечно, товарищи.

Но мало обратить внимание на проблему. Кто-то наверняка скажет: “Ну и что же ты предлагаешь нам делать, умник?! У нас и без этого завал работы/урезанный бюджет/слишком заняты/вставьте свой вариант”. А я отвечу. Мы умные и грамотные специалисты, почему бы не проявить каплю энтузиазма, потратить на 15 мин больше и сделать круто и функционально. Например:

Кстати об изящных примерах – не так давно к нам в офис приходил Виталий Фридман. Он говорил о многих вещах, в том числе о человечности, о дизайн- системах и приводил большое количество необычных примеров. Вот ссылка на запись встречи, для вдохновения:


Примеров, помимо тех, что приводит Виталий, к счастью, ещё огромное множество, и веб не так безнадёжен, как могло показаться. Но проблема комплексности веба не является новой. Так, например, Франк Химеро (дизайнер, иллюстратор, автор книги Shape of design) в одном из своих выступлений говорил о самой проблеме, и как можно просто подать идею, приводя чёткий список технических требований. На Хабре есть стоящий , а также ссылка на оригинал, очень рекомендую к прочтению.

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

Ридеры

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

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

Telegram с его потрясающим Instant View(IV) для 2274 ресурсов (а может уже и больше). Эту идею я считаю одной из лучших и прорывных в мессенджерах за последние несколько лет, а за реализацию вообще снимаю шляпу. Подробнее о технологии и о том, как она воплощалась, можно почитать . Если читать лень, вкратце объясню: отправив ссылку на поддерживаемый IV веб-сайт, Telegram предлагает открыть её прямо в приложении, и делает это за пару миллисекунд.

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

Что делать?

Главное – быть человеком.

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

Другой случай, если ваша цель продать, любой ценой нажиться при помощи рекламы, либо увести пользователя на другую страницу/ресурс. Тогда вы, конечно, можете не акцентировать внимание на тексте, просто поместите Lorem ipsum или какое-нибудь клише, чтобы keywords были побольше. Впрочем, сам текст не так важен, можно, например, смешать оба вышеупомянутых варианта, дабы увеличить коэффициент уникальности. Затем добавьте на страницу пару-тройку баннеров, несколько всплывающих окон, и обязательно нужно обвесить это всё аналитикой, чтобы понять, какой баннер эффективнее: верхний, тот, что под ним, или тот, что справа от двух предыдущих. Но после всего этого не забудьте задать себе вопрос: а нужен ли вам в таком случае текст? Как только справитесь с первым вопросом, попробуйте ответить на второй. Вы создали эту веб-страницу для людей?

Action items

Если позволите, у меня накопилось несколько советов, которые могут помочь улучшить ситуацию, если вы в нее попали.

Первое, нужно понять, содержит ли ваш продукт/сайт/приложение/вставьте свой вариант те признаки, о которых мы говорили выше. Если так, то далее вам предстоит выяснить, кто отвечает за каждый элемент этой конструкции. Готов спорить, что большинство вопросов появится именно к маркетинговой стороне вашего продукта. Если это не так, не переживайте, мы с вами ещё обсудим, как быть дальше.

Маркетинг

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

UX (Web Design)

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

Вы, наверное, подумали, что я хочу обвинить во всём разработчиков? Ну уж нет. Если команда не может выпустить крутой, чистый, юзабельный продукт, не стоит валить всё на development. Конечно, исходя из написанного выше, можно сделать вывод, что все концы сходятся именно в коде разработчика. Так и есть, конечный результат появляется именно при написании кода , но разработчик не может взять и не добавить все гениальные идеи придуманные выше (выше по тексту).

А как тогда, “чего ты нас путаешь, вообще уже непонятно кто виноват и кто должен всё это фиксить”?

Команда , именно команда, выступает начальным и конечным звеном на всей стадии разработки. Весь цикл задачи должен решаться именно совместно. Например, на стадии возникновения “гениальной” идеи про баннер на полстраницы, UX и разработчик покрутят у виска и не допустят даже мыслей о таком варианте. При добавлении пятого всплывающего подряд окна на страницу, произойдёт то же самое, и идея будет задушена на корню. Работайте в команде, на всех этапах разработки проекта, потому что конечный продукт – это результат совместной работы . Вот вам первый Action Item.

В ситуации, когда у вас уже используются подобные “гениальные решения” в production, предлагаю обратиться к ответственному за решение, и обсудить его цель и внешний вид. Уверен, что эту же задачу можно решить более безобидным способом.

На техническом поприще есть множество решений для улучшения User Experience, но я приведу только часть самых интересных, на мой взгляд.

Цикл материалов «Создание блога на PHP»

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

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

Формат блога очень популярен. Кроме того, если вы научитесь создавать с нуля блог, без проблем можно расширить свои умения и на интернет-магазин и на порталы побольше.

Наши рамки Мы используем PHP, MySQL и не используем фреймворки. Веб-сервер у вас уже настроен.

Создание блога - нетривиальная задача (если, конечно, не рассматривать готовые платформы типа LiveJournal или Blogger). Вариантов её реализации - тысячи и нам необходимо определить рамки задачи:

  1. Мы используем PHP . Есть много других языков и платформ для бекенда, использование любого из них – дело вкуса. Мы будем говорить о чистом PHP и о паттернах программирования. Будем считать, что базовые знания по PHP у вас есть.
  2. Мы используем MySQL . В качестве БД можно использовать и другие СУБД, но мы будем использовать MySQL как самую популярную. В будущем можно будет подключить Memcached.
  3. Мы не используем готовые CMS . Поскольку наша цель - подтянуть PHP и изучить архитектуру блога, мы не будем использовать готовые CMS, ведь в большинстве случаев разработка блога на CMS - это всё-таки вёрстка и настройка блога в административной панели.
  4. Мы не используем фреймворки . Фреймворки – это хорошо, классно и правильно, но, опять же, цель нашего урока – глубже изучить PHP, а фреймворки дают некоторый уровень абстракции и отдаляют нас от тех поучительных граблей и тумаков.
  5. Будем считать, что веб-сервер у вас уже настроен .

С рамками определились, продолжаем.

Что нужно знать для того, чтобы создать блог на PHP с нуля?


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

  1. PHP - будет использоваться в качестве языка бекенда.
  2. MySQL - будем использовать в качестве хранилища.
  3. HTML + CSS - базовые знания.
  4. JavaScript - необязательно, но желательно.

Желательно также уметь хорошо и красиво верстать, ну и чувство вкуса тоже не помешает.

Что мы ожидаем от блога? Что в блоге должно быть?


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

Как видите, ничего сложного.

Что такое осень блог? Блог (да и вообще любой сайт) можно представить в виде страниц, функциональных блоков на этих страницах.

Эти все страницы должны взаимодействовать. Различные модули:

  1. Последние комментарии
  2. Модуль поиска
  3. Модуль входа на сайт
  4. Модули меню
  5. Рекомендуем почитать
  6. Вставка произвольного HTML блока (виджет группы в соц. сети и т.д.)

Каким блог должен быть структурно?

Я расскажу на примере своего блога, вы же можете идти другим путём. На каждой странице расположены различные блоки, нам потребуется. Каждый блок (компонент).

Роутер, система взаимодействия. Примеры.

Паттерны программирования. MVC и Singleton

Когда-то давно программистов было мало и каждый программист по куче раз наступал на грабли, изобретал свои велосипеды и писал свои костыли. Потом, когда программистов стало много и они устали изобретать велосипеды, какие-то программисты поняли что часто код структурно можно объединить в группы, такие себе «шаблончики проектирования». Такие вот структурные шаблоны и называются паттерны программирования . В сегодняшней статье мы рассмотрим паттерны MVC, и Singleton.

Паттерн Singleton

Singleton – это.

Паттерн MVC


MVC - это аббревиатура Model-View-Controller. Каждый компонент (визуально - блок) на сайте мы представляем в следующем виде.

При этом М одель определяет работу с данными.

Часто можно комбинировать различные модели и view. Например:

  • Боковые блоки (разные модели, один view);
  • Блог и список материалов (Одна модель, разные View).

Почему MVC? Расширяемость, гибкость, .

Приметы использования.

Структура

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

  • Libraries - папка с библиотеками;
  • Components - папка с компонентами;
  • Templates - папка с шаблонами.

Итог

Домашнее задание:

  • Разобраться в паттернах программирования MVC и Singleton.
  • Попробовать рассмотреть структуру работы популярных CMS.
  • Попробовать сделать набросок своей CMS (скачать набросок CMS от сайт).

На следующем занятии мы изучим:

  1. Отладка и логирование в CMS.
  2. Язык SQL. Работа с MySQL.
  3. Написание Singleton класса для MySQL и выполнение простых запросов.

Ну, и напоследок, краткое оглавление уроков:

  • Урок 1. Вступительный.
  • Урок 3. Фабрика, кеширование.
  • Сессии. Вход и регистрация.
  • Поиск.

Поздравляю всех, кто осилил такой большой урок. До встречи!

Последние материалы раздела:

Как полностью удалить драйвер из системы Windows
Как полностью удалить драйвер из системы Windows

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

Как изменить на безлимитный тариф
Как изменить на безлимитный тариф

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

Установка официальной прошивки на Samsung Galaxy S3
Установка официальной прошивки на Samsung Galaxy S3

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