Прежде, чем начать: я знаю, что такое phpDaemon и System_Daemon. Я читал статьи по этой тематике, и на хабре тоже.
Итак, предположим, что вы уже определились, что вам нужен именно демон. Что он должен уметь?
Запускаться из консоли и отвязываться от неё
Всю информацию писать в логи, ничего не выводить в консоль
Уметь плодить дочерние процессы и контролировать их
Выполнять поставленную задачу
Корректно завершать работу
Отвязываемся от консоли
// Создаем дочерний процесс
// весь код после pcntl_fork() будет выполняться двумя процессами: родительским и дочерним
$child_pid = pcntl_fork();
if ($child_pid) {
// Выходим из родительского, привязанного к консоли, процесса
exit();
}
// Делаем основным процессом дочерний.
posix_setsid();
// Дальнейший код выполнится только дочерним процессом, который уже отвязан от консоли
Есть такой отличный сервис placehold.it. Он позволяет легко генерировать изображения-заглушки для баннеров. Не так давно о нем писали на хабре, и с тех пор я им активно пользовался, пока он не начал периодически падать. Вечером на коленке был написан аналогичный сервис, может быть кому-нибудь пригодится.
Иногда бывает необходимо отобразить на сайте файл не просто ссылкой, а как-нибудь иначе. Видео и аудиофайлы хочется отображать плеером, с возможностью просмотра (прослушивания), swf — сразу отображать на странице. Для прикрепления файлов к материалам есть отличный модуль Filefield, однако выбор форматтеров для него невелик. Файл можно отобразить просто ссылкой. Немного расширяют его функционал другие модули, например Imagefield позволяет отображать картинки. Я попытаюсь доступно объяснить как добавить возможность отображения Flash контента на примере модуля SWFfield.
Далее будет много кода, мало картинок и вообще всё скучно и уныло...
Вдохновленный этим топиком я написал модуль для друпала, который организует такую постраничную навигацию.
Добавлена прокрутка колесом мышки, исправлены некоторые косяки, добавлена стандартная навигация при отключенном js, адаптировано под друпал. Никаких настроек: включили модуль — работает, выключили — вернулись к стандартной навигации.
UPD: Перенес подключение css и js в init модуля, дабы работало везде, исправил конфликт с другими GET параметрами. UPD2: Исправил баг со ссылками «Первая» и «Последняя». Спасибо gothica.
Скачать можно здесь.
Про техподдержку Logitech была уже не одна статья (Часть 1, Часть 2). Вот и я надумал написать о том, как я мышь менял. Сразу оговорюсь, что делаю упор на один нюанс, который в вышеприведенных статьях не указан.
Началось всё с того, что мышь умерла. Компьютер просто перестал реагировать на подключение приемника. Т.к. документов и коробки от мыши у меня уже не сохранилось, я немного погуглил и написал письмо в Logitech
Шаблоны мы будем складывать в sites/all/themes/mytheme/templates. Создадим шаблоны page.tpl.php — для страниц, node.tpl.php — для контента, block.tpl.php — для блоков, comment-wrapper.tpl.php — для блока с комментариями, comment.tpl.php — для одного комментария, header.tpl.php — для шапки, footer.tpl.php — для подвала, region.tpl.php — для регионов. Также, по аналогии с препроцессами, мы можем создавать файлы типа node-story.tpl.php для отображения материала типа story или block-user.tpl.php для блока user. Это позволяет темизировать отдельно разные типы содержимого сайта.
Препроцессы нужны для того, чтобы определить, какие переменные будут доступны в шаблонах. Препроцессы мы будем складывать в sites/all/themes/mytheme/preprocess. Создадим файлы preprocess-page.inc — для страницы, preprocess-node.inc — для контента, preprocess-header.inc — для шапки, preprocess-footer.inc — для подвала, preprocess-region.inc — для регионов, preprocess-block.inc — для блоков, preprocess-comment.inc — для комментариев. Также мы можем создавать файлы типа preprocess-node-story.inc для обработки материала типа story или preprocess-block-user.inc для блока user. Это позволяет обрабатывать отдельно разные типы содержимого сайта. В основном в препроцессах я определял классы для разных регионов сайта.
По созданию тем для друпала в интернете можно найти несколько статей (хорошая статья, советую почитать), однако обычно всё заканчивается банальным набором шаблонов и инфо-файлом. В этом топике я постараюсь доступно рассказать как создать гибкую и не самую простую тему.
Начало
Для начала нам потребуется создать директорию в каталоге sites/all/themes с названием нашей темы. Я назвал тему mytheme и создал каталог sites/all/themes/mytheme.
В созданном каталоге создаем директории css — для стилей, js — для скриптов, images — для картинок, templates — для шаблонов, preprocess — об этом позже. Также создаем файл template.php в котором мы будем писать всю логику темы и mytheme.info для описания темы. Можно еще добавить favicon.ico и logo.png.
Вдохновлённый этим топиком я по-быстренькому наваял модуль для друпала, который всем пользователям IE6 показывает заготовленную страничку.
Если честно, не понял в чём смысл обновления для этой странички, поэтому оставил первую версию.
Предвосхищая вопросы типа «а зачем это модулем когда можно и проще сделать» отвечу, что так удобнее. Модуль включен — пользователи IE6 отсеялись, модуль выключен — видят сайт.
Наверняка, многие, работающие с друпалом, знакомы с модулем Views. Как гласит Drupaler.ru, модуль Views — это Настройка и контроль за отображением любого типа контента в любом месте сайта, т.е. он позволяет создавать страницы, блоки, подменять содержимое нод, страниц пользователей и многое другое, формируя контент из любых доступных полей на сайте. Но что делать, когда необходимо вывести информацию, предоставляемую сторонним модулем, и к которой доступа из Views у нас нет?
Некоторое время назад появилась необходимость организовать поиск по сайту на друпале с фильтрацией по типам материалов и возможностью поиска по профилям пользователей. Существующие решения не устраивали по ряду причин. На ум сразу пришли 2 варианта: либо писать свой поиск (используя готовые библиотеки типа phpMorphy), либо использовать Google. Остановились на втором.
Логика работы проста: Google позволяет искать по определенному сайту. То есть мы можем искать по www.example.com, по www.example.com/first, по www.example.com/second и т.п. Для поиска материалов определенных типов нам только нужно настроить разные пути для разных типов материалов и встроить на сайт Google Custom Search.
Далее кратко по шагам, как это работает (много кода, нет картинок):