О чём это?
Snippet — небольшой фрагмент програмного кода, иллюстрирующий решение конкретной задачи, пригодный для повторного использования. Большинство из 68 статей на этом сайте посвящено вопросам веб-программирования и администрирования веб-серверов.
Disclaimer. Статьи отражают личное мнение, взгляды и подходы авторов, а также могут содержать ошибки и неточности, но мы очень-очень стараемся :)
Перенос кода Global.asax в папку App_Code
При использовании модели ASP.NET приложения Web Site Project удобно хранить весь C#-код (кроме code-behind) в папке App_Code. Генерируемый же по умолчанию файл Global.asax помещается в корень сайта и содержит C# код.
Установка OpenWebmail на сервер с Debian и ISPManager
По умолчанию в ISPManager в качестве webmail'a использует SquirellMail. Для установки OpenWebmail использовался deb-пакет.
Аудит входа и выхода пользователей в ASP.NET 2.0 приложении при использовании Forms Authentication
Возникла необходимость к существующему приложению на ASP.NET 2.0, которое использует Forms Authentication добавить регистрацию входа (login) и выхода (logout) пользователей.
Генерация не-HTML контента в ASP.NET MVC
Иногда бывает нужно сгенерировать контент с Content-Type отличным от text/html, например, RSS-ленту или JavaScript-информер. В случае использования WebForms или ASP.NET MVC с WebForms View Engine проблема решается следующим образом:
<%@ Page ContentType="application/x-javascript" Language="C#" Inherits="..." %>
или, например:
<%@ Page ContentType="application/rss+xml" Language="C#" Inherits="..." %>
P.S. Для RSS конечно правильнее будет использовать встроенные средства .NET Framework'a, но, например, если нужно добавить нестандартные теги, возможно, решение с шаблоном будет удобнее.
Установка ISPManager на сервер за роутером (с локальным IP-адресом)
Для установки и работы системы лицензирования ISPManager необходимо, чтобы хотя бы на одном из сетевых интерфейсов (лучше на первом в выводе ifconfig) был определён (опять же, лучше первым по счёту) реальный IP-адрес, на который выдана лицензия.
В случае, если сервер находится за роутером и на его интерфейсах — только локальные IP, реальные же определены на роутере и с него прокидываются на сервер для корректной установки достаточно будет прописать алиасом лицензируемый IP на первом интерфейсе. Этот адрес, естественно, использоваться не будет, но ISPManager будет доволен :)
Способ опробован для установки легально приобретённой копии ISPManager на выделенный сервер.
Отладка и статистика запросов в PHP PDO
PDO часто используется в качестве низкоуровневой библиотеки доступа к данным, один из примеров — библиотека Outlet ORM. В прекрасной библиотеке доступа к данным DbSimple есть удобные возможности по записи кода исполняемых SQL-запросов в лог и встроенные средства по подсчёту их количества и времени выполнения. Всего этого в PDO по умолчанию нет.
Решение нашлось совершенно случайно, спасибо Alvaro Carrasco, одному из авторов Outlet ORM за подсказку. Способ заключается в создании собственных наследников от классов PDO и PDOStatement, подобное давно реализовано для Propel'a. Уже пытаясь сделать это самостоятельно я так и не нашел способа подменить класс для создания экземпляров PDOStatement, делается это действительно нетривиально :).
Новогодний Smarty-модификатор
На сайтах принято указывать год создания. Для того, чтобы утром 1-го января не исправять шаблоны, был написан Smarty-модификатор для форматирования года копирайта следующим образом:
- Если год создания сайта совпадает с текущим, то отображается только год, например «2007»
- Если год создания сайта отличается на единицу от текущего, то выводится что-то наподобие «2007, 2008»
- Если сайт создавался больше года назад, то получится такая строка: «2007—2009»
На всякий случай форматы строк можно переопределить.
Привязка нижнего блока к низу макета страницы
Как "прилепить" нижний блок книзу? Google и другие поисковики дают много ссылок на различные решения данной проблемы. По ряду причин, большинство из предлагаемых решений уже не работают, либо работают, но без поддержки кроссбраузерности. На данный момент удалось найти такое кроссбраузерное решение, речь о котором и пойдет далее...
Первые tips & tricks для Smarty 3
Новая версия Smarty 3, находящаяся сейчас в стадии бета-тестирования содержит много нововведений. Наиболее заметные из этих новинок — наследование шаблонов (template inheritance) и поддержка определения функций в шаблонах (template functions).
Небольшой скрипт для работы с портами во FreeBSD
Существует много способов обновлять и работать с коллекцией портов FreeBSD. Небольшой скрипт, позволяющий обновить дерево портов и сгенеровать отчёты какие порты нуждаются в обновлении.
