Изнанка

Изнанка 3.0

Изнанка — быстрый старт проекта на ПХП.

Наконец–то доделал третью версию. В Изнанке появились маршруты и кэширование, View теперь является статичным классом, а производительность выросла в разы.

Маршруты

Маршруты реализованы двумя функциями: addRoute и addRoutes. Разница лишь в том, что во вторую функцию можно передавать сразу несколько маршрутов.

Используется это так:

addRoute('/blog/',
    runModule('blog/notes');
)

Первым аргументом идёт ссылка, вторым коллбек. Ссылка отдаётся на неком подобии регулярных выражений (от реджексов осталась только звёздочка). Например, чтобы обработать открытие заметки в этом блоге, я создал маршрут /blog/notes/* .

В addRoutes передаётся массив:

addRoutes(
  array('/projects/*' => function(){
    runModule('projects');
  }),
  array('/tools/' => function(){
    View::set('title', 'Инструменты');
    View::set('template', 'tools.tpl');
  })
}

Кэширование

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

Отключить и настроить кэширование можно в файле config.php.

Кэш будет складываться в папку caches, так что убедитесь, что она доступна для записи.

Изменения

Функции антикэш и инклюд слегка поменяли синтаксис:

{{anticache ('style.css')}}
{{include ('style.css')}}

Путь теперь хранится не в переменной $view->uri, а в константе uri.

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

Главная страница больше не косит под Инитум.

8 августа, 20:44   Изнанка   разработка
Красивые шаблоны

В заметке о релизе Изнанки 2.3 я написал про отступы в шаблонах. Хотелось бы раскрыть эту тему целиком.

Например, есть вот такой шаблон:

Раньше Изнанка портила отступы при отрисовке.

Оказалось, что после закрывающий тег ПХП удаляет перенос строки после себя. Лечится это добавлением пробела после тега. В Изнанке 2.3 я автоматизировал процесс простым алгоритмом: если в строке есть ХТМЛ помимо ПХП или ПХП выводит что–либо — экранируем пробелом. На выходе останутся пустые строки там, где был только ПХП код без вывода, но это исправляется через array_filter().

Вот так Изнанка отрисует шаблон сейчас:

29 июня, 5:40   ПХП   Изнанка   хтмл
Изнанка 2.3

Изнанка — простой, но мощный ПХП движок.

Вышла версия 2.3. Увеличина производительность, добавились цикл foreach и функция throw404, убраны старые баги, функция $view->compile стала публичной.

Новое

Появился цикл foreach, который пишется проще чем в ПХП:

{{@articles as $article}}
    <h1>{{$article['title']}}</h1>
{{end}}

Появилась функция throw404(), которая делает именно то, о чём говорит её название: отправляет заголовок 404 и ставит шаблоном 404.tpl. Функция вызывается без аргументов.

Функция $view->compile($content) стала публичной. Эта функция рендерит текст как шаблон. Я использую это на страницах проектов: у проектов есть общие части (заголовок, дата, ссылка), а есть отличающиеся. Индивидуальные шаблон лежит в папке с проектом, а модуль projects получает этот файл и рендерит вот так:

$view->set('content', $view->compile(file_get_contents($path.$hurl.'.tpl')));

Изменилось

Переменные пути заменены на константы:

было

стало

$view->path

path

$view->uri

uri

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

Функция runModule($module) теперь принимает один аргумент — имя модуля. Это изменение совместимо с предыдущим вариантом, ничего менять не надо, но в дальнейшем модули следует вызывать в упрощённом виде:

<?php
switch(uri) {
  case '/note':
    runModule('note');
    break;
}

Данные из массивов теперь выводятся без решётки. Теперь достаточно написать имя переменной в отдельный блок и она выведется.

{{@article['title']}}

Внутренние изменения

Механизм отрисовки сильно изменён, теперь шаблоны обрабатываются построчно, из–за этого движок понимает где именно надо рендерить код и не делает лишней работы.

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

Исправлена ошибка: когда в одной строке встречалось несколько тегов Изнанки, движок мог упасть. Например, вот такой кусок кода мог положить движок:

{{for ($i=0 to count(@passed))}}{{@passed[$i]}}{{end}}

Ошибка была плавающая, появлялась не всегда и из–за этого было неспокойно. Сейчас всё работает как надо.

Ещё ужал картинки и код, теперь дистрибутив весит 9.4 килобайта.

Где скачать?

Скачать можно на странице проекта или на гитхабе.

21 июня, 23:35   релиз   Изнанка
Админка не нужна

Большинству сайтов не нужна админка. Отедльная зона для администратора — рудимент, который должен отмереть.

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

Эти кнопки в меню появляются только у работников СМТ и только тогда, когда нужно. Например, ответ на вопрос пишется прямо на странице.

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

На этом сайте тоже нет админки, после авторизации мне доступны кнопки для управления сайтом, которые встроены в контекст.

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

В Изнанке контекстная ссылка делается так:

{{if (@admin)}}
<a href="/blog/drafts/">Черновики</a>
{{end}}
1 июня, 4:04   Изнанка   этот сайт   разработка   СМТ