czwartek, 17 marca 2011

Zawartość generowana w plikach layoutu (Layout in layout) w Ruby on Rails

Zagadnienie, które poruszyłem w temacie wzbudza wiele emocji (albo raczej postów na listach). Jak zwykle burza pomysłów u kreatywnych programistów. Oczywiście rozwiązanie jest już zaimplementowane w Railsach. Rozwiązaniem tym jest
content_for
Drobny przykład.
Załóżmy, że na panelu bocznym jest standardowe menu aplikacji. Zasadniczo spełnia ono wszystkie pokładane w nim nadzieje oprócz menu dla usera, które jako jedyne wymaga zmiany hasła. Dobrze by było więc aby podczas operacji dotyczącej użytkownika w panu pojawiała się dodatkowo opcja "zmiana hasła".
W panelu bocznym standardowo menu wygląda tak:
<ul>
  <li>klienci</li>
  <li>płatności</li>
  .
  .
  ...a tu dodatkowe opcje menu w zależności od kontekstu...
</ul>
Zamiast łapać się prawą ręką za lewe ucho użyjmy standardowych mechanizmów Rails.
W rzeczonym szablonie umieszczamy zajawkę:
<ul>
  <li>klienci</li>
  <li>płatności</li>
  .
  .
  <%= yield :new_options %> 
</ul>

zaś w dowolnym pliku *.html.erb używamy content_for:
<% content_for :new_options do %>
  <li>zmień hasło</li>
  <li>sprawdź email</li>
<% end %>

Dzięki temu zapisowi dwie nowe pozycje znajdą się w menu panela bocznego.

Oczywiście w głównym szablonie aplikacji może być więcej nazwanych bloków yield, które będą mogły być wypełniane w zależności od okoliczności. Bardzo wygodne, proste i łatwe.

Po więcej informacji sięgnij do tutoriala Layouty i Renderowanie w Ruby on Rails


Brak komentarzy:

Prześlij komentarz