Posted on February 10, 2007
По прежнему работая с Liquid я понял, что мне надоело писать код Drop`ов руками .... и решил сделать небольшой генератор.
Итак, в директории lib/ создаём generators
В ней размещаются все генераторы. Создаём в ней директорию liquid_drop
в ней нам необходимо создать наш генератор и шаблоны к нему в поддиректории templates/
Код генератора (liquid_drop_generator.rb)
class LiquidDropGenerator < Rails::Generator::Base
attr_reader :drop_name
attr_reader :actions
def initialize(runtime_args, runtime_options = {})
super
@drop_name = args.shift || "example"
@actions = args
end
def manifest
record do |m|
m.template 'drop.rb', File.join('app/drops',"#{drop_name}_drop.rb")
end
end
end
И код шаблона (templates/drop.rb)
class <%= drop_name %>Drop < Liquid::Drop
def initialize(item)
@item = item
end
<% for action in actions -%>
def <%= action %>
end
<% end -%>
end
Конечно это очень простой генератор, но мне пока хватает и его ))
как всегда fast and dirty
Tagged with: liquid |
Posted on February 05, 2007
Drops это очень хорошая вещь расширяющая возможности Liquid
Допустим мне необходимо сделать вывод информации о позициях каталога, каждая позиция имеет name, description и price
Для этого в app создаётся поддиректория drops в которой я создаю для модели дропа:
class ShopItemDrop < Liquid::Drop
def initialize(item)
@item = item
end
def name
@item[:name]
end
def description
@item[:description]
end
def price
@item[:price]
end
end
в модели shop_item пишу вызов дропа при преобразовании в Liquid
def to_liquid(options = {})
ShopItemDrop.new self
end
После чего в отображении просто пишу:
{% for item in items %}
{{item.name}}
{{item.description}}
{{item.price}}
{%endfor%}
Перезапускаю сервер ... oops ... ошибочка, конечно, rails ещё не знает где лежат дропы ...
открываем environment.rb и пишем следующую строчку
config.loadpaths += %W( #{RAILSROOT}/app/drops )
Tagged with: liquid |
Posted on February 05, 2007
Итак, для начала необходимо создать новое rails приложение
meg@MediaServer:~$ rails liquid_test
Затем необходимо установить плагин Liquid
meg@MediaServer:~$ cd liquid_test/vendor/plugins
meg@MediaServer:/home/meg/liquid_test/vendor/plugins$ svn export svn://home.leetsoft.com/liquid/trunk/liquid/
теперь можно создать простой контроллер для тестирование Liquid
meg@MediaServer:/home/meg/liquid_test$ script/generate controller hello index
Мы получили контроллер и отображение, переименуем расширение отображения в liquid и запишем внутрь следующее
Hello {{name}}
Затем добавим в контроллере
def index
@name = "UserAd"
end
Запускаем сервер и видим: Hello UserAd.
На этом пока что можно закончить
Tagged with: liquid |
Posted on February 05, 2007
При изучении RoR вначале мне очень не понравилось организация views, они меня очень смущали своими ASP тэгами и хотелось чего-то более привычного после PHP и Smarty. Как оказалось оно есть, и имя ему
Liquid
Итак, синтакс шаблонов очень прост:
- Простой вывод переменной шаблона делается так: Hello {{name}}
- Фильтры вывода:
Hello {{ 'tobi' | upcase }}
Hello {{ 'tobi' | length }}
Hello {{ '*tobi*' | textilize | upcase }}
Hello {{ now | date: "%Y %h" }}
Hello {{ 'Typo' | link_to: 'http://typo.leetsoft.com', 'Typo is a modern weblog engine' }}
- Условия. Все условия имеют вид {% if условие %}
Действие
{% endif %}
- Циклы:
{% for item in array %}
//действие
{% endfor %}
В дальнейшем я опишу более подробно использование Liquid
Tagged with: liquid |