Использование php-генераторов

Несмотря на то, что php-генераторы доступны с php 5.5.0, они все еще почти не используются. Более того, большинство разработчиков, которых я знаю, понимают, как работают генераторы, но не видят, когда они могут быть полезны в реальной жизни.

Да, генераторы определенно смотрятся хорошо, но знаете...  Я не понимаю, где они могут быть полезными для меня, разве что для расчета последовательности Фибоначчи.

И они не ошибаются, ведь даже примеры в php-документации слишком упрощены. Они только объясняют, как эффективно реализовать range или итерировать по строкам файла.

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

Symfony Blog Bundle

HarentiusBlogBundle - бандл для  блога/простого портала (Или сложного, если с  наследованием бандлов и расширением). Движок этого сайта.

В качестве бэкенда используется SonataAdminBundle. Реализовано:

1. Админка (WYSIWYG, ckeditor), загрузка картинок, аудио, плеер.

2. Теги, категории, архивы, облако тегов

3. Статистика

4. RSS-feed (требует доработки)

5. "Умное" кэширование всего и вся, контент отдается очень быстро

Для "успокоения души" осталось:

1. Тесты

Итерация по периоду времени в php

Неоднократно приходилось работать на php со списком дат (по дням, к примеру) если есть начало и конец периода ($dateStart, $dateEnd). Например, для того, чтобы синхронизировать с бекендом рабочие/выходные дни для DatePicker из jQueryUi. Или, если нужно выводить отчеты по дням.

Предлагаю несколько вариантов решения этой задачи, как наиболее очевидным способом, так и более изящным (как мне показалось).

ru en

Symfony Widgets Bundle

Widgets Bundle - a bundle for easy widgets management. (Supports only widgets which require only client-side code for displaying). Includes both client side (for displaying) and admin side (adds admin classes and has a SonataAdminBundle dependency) functionality.

Can be used (for example) for adding counters, banners, advertising network codes (google adsense, etc).

Was created during this blog has been developing.

ru en

Caching Symfony controller

During developing this blog I invented one more bicycle for Caching Symfony controller. But first of all lets see how did this task arose.

For example, I have a list of categories, archives and tags on a sidebar. It is relatively easy to get last one (one query), but much harder to get list of categories and archives. For getting categories, we need to select trees (categories can be nested) and using subqueries inside queries get number of articles in every category (result is a little bit monster). For getting the archives list, we need iterate over all articles and gather list of years/months. All this actions isn't very sophisticated, but it is better to avoid them.

Pencil

Pencil - удобный open-source бесплатный инструмент прототипирования для создания mockup'ов. Подходит для создания любых пользовательских интерфейсов, но мы будем рассматривать создание веб интерфейсов.

Может быть установлен как плагин до firefox, либо как standalone приложение (в таком случае firefox у меня все равно поставился по зависимостях).

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

Разберемся с установкой и покажем пример использования.

Повышение производительности веб-сервера: ставим nginx перед apache

В одной из заметок мы описали как настроить nginx + php-fpm. Но nginx можно использовать и немного по другому. Например, если нету желания полностью отказываться от apache, но ускорить работу веб сервера хочется. (Возможно, у вас реализована сложная система редиректов, которую не хотите портировать на nginx).

В таком случае возможное решение - использовать nginx только для отдачи статики (картинок, css, js и т.д. файлов). Остальные же запросы (к php движку, к примеру) перенаправим по прежнему к apache (подразумевается, что у вас уже настроен сайт для работы с последним). Для этого настроим nginx для отдачи статики, все остальные запросы по прежнему проксируем к apache. (В таком случае можно обойтись без php-fpm).