Typus - админка в Rails-приложениях
Я не люблю писать одинаковый код много раз, тем более тривиальный. Я не люблю писать админки для Rails-приложений, потому что они состоят по большей части как раз из такого кода. И я не люблю генераторы, создающие кучу кода, который необходимо менять только в некоторых местах (поэтому для аутентификации я использую AuthLogic, а не restful_authentication).
И поэтому я был очень рад обнаружить замечательный проект: Typus. Это плагин для Rails, позволяющий значительно упростить процесс создания админки для приложений.
Из его особенностей:
- Позволяет практически мгновенно создать простейшую админку для моделей (создание, удаление, редактирование).
- Автоматически поддерживаются связи между моделями.
- Админка является расширяемой.
- Не генерирует огромного объема кода, который потом никогда не расширяется. Только то, что необходимо – конфиграционный файл и классы констроллеров для расширения. Только классы, без кода системы администрирования в них!
- Поддерживается локализация админки (пнглийский, испанский, португальский и русский).
- Поддерживается экспорт данных в различные форматы.
Установка
Typus может быть установлен двумя способами:
- Как обычный плагин Rails, для этого в директории приложения необходимо вызвать:
$ script/plugin install git://github.com/fesplugas/typus.git - Через Ruby Gems, для этого в config/environment.rb необходимо добавить строку:
config.gem 'typus'
После установки необходимо в директории приложения вызвать команды:
$ script/generate typus
$ rake db:migrate
В результате будут сгенерированы файлы конфигурации админки, контроллеры админки для всех существующих моделей и пара миграций, обеспечивающих работу системы пользователей Typus.
Также, для работы админки необходимо убедиться, что в конце файла config/routes.rb присутствуют строки:
map.connect ':controller.:format'
map.connect ':controller/:action/:id.:format'
Конфигурация
После установки плагина создается несколько файлов, хранящих конфигурацию:
- config/initalizers/typus.rb – здесь хранятся общие настройки админки
- config/typus/*.yml – здесь хранятся настройки для различных моделей
- config/typus/*_roles.yml – здесь хранятся права доступа к моделям
В первом файле задаются имя приложения, используемая локаль и т.п. Вот часть опций из него:
Typus::Configuration.options[:app_name]
Typus::Configuration.options[:config_folder]
Typus::Configuration.options[:email]
Typus::Configuration.options[:locales]
Typus::Configuration.options[:recover_password]
Typus::Configuration.options[:root]
Typus::Configuration.options[:ssl]
Typus::Configuration.options[:templates_folder]
Typus::Configuration.options[:user_class_name]
Typus::Configuration.options[:user_fk]
Например, чтобы задать русскую локаль необходимо в соответствующей опции этого файла выставить:
Typus::Configuration.options[:locales] = [ [ "Русский", :ru ] ]
В файлах настроек для моделей хранится описание того, как модели должны отображаться в админке, в частности:
- Какие поля должны отображаться при каждом из действий;
- Какие связи должны редактироваться;
- По каким полям должна осуществляться фильтрация и поиск;
- В каком порядке должны выводится записи;
- И тому подобное…
Модификация админки
Сгенерированная админка может быть легко модифицирована одним из следующих способов:
- (банальный) Добавление новых контроллеров в админку;
- Добавление новых действий к существующим контроллерам. Действие описывается в сгенерированном контроллере, а его указание в конфигурационном файле админки позволяет привязать действие к интерфейсу администрирования;
- Переопределение видов;
- Добавление блоков в виды. В последнем случае нет необходимости переопределять весь интерфейс, достаточно толко создать партиалы, которые будут встроены в соответствующие участки интерфейса. Список возможных партиалов приведен ниже (где RESOURCE – имя редактируемой модели):
views/admin/login/_{bottom|top}.html.erb views/admin/dashboard/_{bottom|sidebar|top}.html.erb views/admin/RESOURCE/_edit.html.erb views/admin/RESOURCE/_edit_{bottom|sidebar|top}.html.erb views/admin/RESOURCE/_index.html.erb views/admin/RESOURCE/_index_{bottom|sidebar|top}.html.erb views/admin/RESOURCE/_new.html.erb views/admin/RESOURCE/_new_{bottom|sidebar|top}.html.erb views/admin/RESOURCE/_show.html.erb views/admin/RESOURCE/_show_{bottom|sidebar|top}.html.erb
Пример приложения
На сайте проекта выложен специальный шаблон, позволяющий сгенерировать простое демонстрационное приложение. С его помощью, чтобы попробовать Typus достаточно выполнить в консоли:
$ rails example.com -m http://intraducibles.com/projects/typus/demo.txt
$ cd example.com && script/server
После этого можно заходить в админку по адресу http://127.0.0.1:3000/admin.
