• Как написать шаблонизатор на php​После статьи Как написать свой фреймворк на php, один знакомый программист задал мне такой вопрос: а как работает шаблонизатор в Yii, а конкретно функция render("filename", $variables = array())? 

    Если углубиться в историю php (а он был написан как шаблонизатор в языке perl), то будет ясно, лучшего шаблонизатора, чем сам язык на нем не написать. Smarty и т.п. библиотеки,  ограничены своим API. И работа с ними напоминает история про Active Record, которую я описал в предыдущей статье.

    Итак, как можно написать простейший шаблонизатор, с тем же функционалом, что и в Yii.

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

  • Фреймворк своими руками на чистом php​В сети большое количество мануалов по созданию сайтов на готовой CMS или фреймворке. Однако, работая фрилансером, часто встречаю сайты на самописных системах. Программисты пишут их не от хорошей жизни. В зависимости от степени простоты(сложности) проекта чрезмерно или наоборот недостаточно, применение готовой системы, и на ее переделки уходит больше времени, чем на создание сайта с нуля. К примеру, для сайта одностраничника не нужно тяжелой системы типа Joomla или фреймворка типа Yii, а у CMS типа Texpattern может не хватить функционала. Плюс задачи, которые ставит заказчик, могут быть весьма специфичными, и достаточно тяжело реализуемыми на готовой системе.

    Для примера можно взять работы с моделями в Yii. Речь идет об ActiveRecord. У Yii на официальном сайте есть отличный мануал по созданию блога. Если придерживаться его, и делать все, как написано, то через пару часов изучения, можно получить полноценный блог. С категориями, метками, пользователями и административной панелью.

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

    Как сказал один наш комик - "тут начинается вестерн". То, что в SQL бы заняло 3 строчки кода, в Active Record займет пару ночей чтения мануалов, и экспериментов. Потому что, на первый взгляд тривиальная задача, вдруг вызывает необъяснимый баг Yii, о котором слышали полтора человека и оба китайцы.  Пример не надуманный, те кто программировал на Yii используя Actve Record поддержат.

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

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

    Об этом расскажу в этой статье. Как написать php фреймворк с нуля. Опишем основные техники проектирования MVC фреймворков на чистом php без использования сторонних библиотек. 

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

  • Yii2 позволяет легко создать механизм регистрации/входа/профиля через расширение yii2-user.

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

    • /user/registration/register Регистрация
    • /user/registration/resend Повторная отправка инструкций по регистрации
    • /user/registration/confirm Подтверждение пароля
    • /user/security/login Форма авторизации
    • /user/security/logout Выход(работает только через POST)
    • /user/recovery/request Востановление пароля
    • /user/settings/profile Настройки профиля
    • /user/settings/account Настройки аккаунта (email, username, password)
    • /user/settings/networks Привязанные социальные аккаунты
    • /user/profile/show Профиль пользователя (требует id)
    • /user/admin/index Менеджер пользователей

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