Книга: Программирование на языке Ruby

19.4.5. Прочие детали

19.4.5. Прочие детали

В Nitro слишком много различных механизмов, чтобы все их можно было рассмотреть здесь. Но в этом разделе мы упомянем некоторые особенно приятные «вкусности».

В состав Nitro входит вспомогательный код, позволяющий использовать многочисленные библиотеки JavaScript, которые поддерживают различные формы DHTML и Ajax. Для облегчения интеграции в Nitro применяется высокоуровневый синтаксис. Например, в дистрибутиве Nitro есть пример поиска по сайту Flickr и вывода уменьшенных изображений. Текстовое поле для ввода тегов поиска поддерживает технологию Ajax, что достигается следующей разметкой:

<input type="text" name="tags" auto_complete="true" />

Контроллер реализует метод tags_auto_complete, который возвращает строку в формате XML, зависящую от содержимого поля.

Nitro позволяет кэшировать действия (то есть отрисованные страницы целиком), результаты вызова методов и сгенерированные фрагменты текста. Например, чтобы поместить в кэш результат отрисовки страницы index, контроллер должен вызвать следующий метод:

cache_output :index

Кэширование можно добавить и в сегменты кода:

<?r cache(:book_list_cache_key) do ?>
<ul>
 <li each="book in Books.all">#{book.title}</li>
</ul>
<?r end ?>

В Nitro встроен класс преобразования для локализации, позволяющий автоматически подставлять в шаблон то или иное содержимое. Он не является стандартным этапом конвейерной компиляции, вы сами должны добавить его в файл run.rb:

require 'nitro/compiler/localization'
include Nitro
Compiler.transformation_pipeline = [
 StaticInclude,
 Elements,
 Morphing,
 Markup,
 Localization,
 Cleanup
]

Отметим, что конвейер можно переконфигурировать, выбросив стандартные преобразования и добавив собственные. Далее определяются локали:

Localization.locales = {
 :en => 'conf/locales/en.yml',
 :de => 'conf/locales/de.yml'
}

Локаль — это просто YAML-файл, сопоставляющий одним строкам другие:

---
:author: Autor
:language: Sprache
:book_rank: Buchrank

В шаблонах применяются специальные конструкции для обозначения подставляемого текста:

<div>[[:author]]: #{@book.author}</div>
<div>[[:language]]: #{@book.language}</div>
<div>[[:book_rank]]: #{@book.rank}</div>

Выбор файла локали определяется значением session[:LOCALE]. В методах контроллера можно получить текущую локаль с помощью специальной переменной @lc.

@language = @lc[:language]

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

Дополнительную информацию о Nitro можно найти на следующих ресурсах:

• http://www.nitroproject.org/ (домашняя страница Nitro)

• http://rubyforge.org/forum/forum.php?forum_id=5921 (страница проекта Nitro на сайте Ruby Forge);

• http://oxyliquit.de/ (справочное и учебное руководство по Nitro).

Оглавление книги


Генерация: 1.524. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз