Mały kłopot z HAML

Hej,

Korzystam z HAML w projekcie.

mam takie coś:

[code=ruby].navbar-inner
.container
%table{:style => “width:100%”}
%tr
%td{:style => “width:200px”}
%a{:href => “/client”}= image_tag(‘logo.png’)
%td
- if session[:id_client]
- if Client.find(session[:id_client]).label != ‘’
%i{:style => “font-size:13px”}= Client.find(session[:id_client]).label
- end
- end
%td{:style => “text-align:right”}
- if session[:id_client]
= Client.find(session[:id_client]).fname
= Client.find(session[:id_client]).lname
( #{Client.find(session[:id_client]).email} )
#{link_to ‘wyloguj się’, client_destroy_path}
- else
%a.btn.btn-large{:href => “facebook/auth”} Zaloguj się

  • if flash[:success]
    .container
    .alert.alert-success.fade.in
    %a.close{“data-dismiss” => “alert”, :href => “#”} ×
    = flash[:success]
  • if flash[:error]
    .container
    .alert.alert-error.fade.in
    %a.close{“data-dismiss” => “alert”, :href => “#”} ×
    = flash[:error]
  • if flash[:notice]
    .container
    .alert.alert-notice.fade.in
    %a.close{“data-dismiss” => “alert”, :href => “#”} ×
    = flash[:notice]
    .container
    • if session[:id_client]
      %ul.nav.nav-tabs
    • %a{:href => "/client/"} Strona główna %a{:href => "/client/list/promotion"} Moje promocje %a{:href => "/client/list/fanpage"} Moje fanpage %a{:href => "/client/list/side"} Moje strony internetowe %a{:href => "/client/choose/promotion"} Typy aplikacji[/code]

ale mam taki komunikat

[code]You don’t need to use “- end” in Haml. Un-indent to close a block:

  • if foo?
    %strong Foo!
  • else
    Not foo.
    %p This line is un-indented, so it isn’t part of the “if” block[/code]
    Wie może ktoś o co chodzi (rzuca się o pierwszego if’a i end ale nie mam pojęcia bez end jest też źle …

PS

to śmiga

.navbar-inner .container %table{:style => "width:100%"} %tr %td{:style => "width:200px"} %a{:href => "/client"}= image_tag('logo.png') %td %i{:style => "font-size:13px"}= Client.find(session[:id_client]).label if session[:id_client] && Client.find(session[:id_client]).label %td{:style => "text-align:right"}
ale czemu tamto nie działa… ?

Hej,

  1. usuń linijki “- end” - w HAML-u zamykanie warunków i pętli odbywa się automatycznie
  2. tam gdzie masz znacznik “%i” - dodaj jeden poziom wcięć - wtedy się poprawnie zamknie if z linijki wyżej

P.S. Te znaczniki Li możesz zapisać jako:

%li{class: @tab == (“tab_client_choose_promotion”) ? “active” : “inactive”}
= link_to “blablabla”, blabla_path
Będzie prościej, łatwiej i działać poprawnie

dzięki, wszystko już gra :slight_smile: ten HAML wymiata. kod tak ładnie wygląda nawet szybciej się pisze jeszcze muszę się w niem podszkolić .

Cały %ul.nav.nav-tabs masz skopkany (tylko pierwsze li jest w ul, reszta jest na ‘obok’):

%ul.nav.nav-tabs <li - if @tab == 'tab_client_home' class="active" > %a{:href => "/client/"} Strona główna <li - if @tab == 'tab_client_list_promotion' class="active" > %a{:href => "/client/list/promotion"} Moje promocje
Zamiast tego możesz pisać po prostu:

%ul.nav.nav-tabs %li{:class => @tab == 'tab_client_home' ? 'active' : ''} = link_to 'Strona glowna', '/client/' %li{:class => @tab == 'tab_client_list_promotion' ? 'active' : ''} = link_to 'Moje promocje', '/client/list/promotion'

To jeszcze jeden tip:

<% flash.each do |name, msg| %> <div class="alert alert-<%= name == "error" ? "error" : "success" %>"> <button type="button" class="close" data-dismiss="alert">&times;</button> <%= msg %> </div> <% end %>
Tylko na Hamla sobie to przetłumacz :wink:

EDIT: widzę, że Ty jeszcze wyróżniasz notice, więc trzeba by użyć elsifa, ale to wciąż lepsze niż powtarzanie tego samego kodu dla error, success i notice.

          - if Client.find(session[:id_client]).label != ''

nie używaj zapytań w widokach. Przenieś to do kontrolera / helpera. Tym bardziej, że 3 (lub więcej!) razy wykonujesz to samo zapytanie w jednym widoku.

Można prościej

<% %w{flash error notice}.each do |item| %> <div class="alert alert-<%= item %>"> <button type="button" class="close" data-dismiss="alert">&times;</button> <%= flash[item.to_sym] %> </div> <% end %>

@sebcioz zmieniłem też na

[code].container

  • if session[:id_client]
    %ul.nav.nav-tabs
    %li{class: @tab == (“tab_client_home”) ? “active” : “inactive”}= link_to “Strona główna”, client_path
    %li{class: @tab == (“tab_client_list_promotion”) ? “active” : “inactive”}= link_to “Moje promocje”, client_list_promotion_path
    %li{class: @tab == (“tab_client_list_fanpage”) ? “active” : “inactive”}= link_to “Moje fanpage”, client_list_fanpage_path
    %li{class: @tab == (“tab_client_list_site”) ? “active” : “inactive”}= link_to “Moje strony internetowe”, client_list_side_path
    %li{class: @tab == (“tab_client_choose_promotion”) ? “active” : “inactive”}= link_to “Typy aplikacji”, client_choose_promotion_path[/code]
    Resztą powoli ląduje w helperach

[quote=piotrstanek]@sebcioz zmieniłem też na

[code].container

  • if session[:id_client]
    %ul.nav.nav-tabs
    %li{class: @tab == (“tab_client_home”) ? “active” : “inactive”}= link_to “Strona główna”, client_path
    %li{class: @tab == (“tab_client_list_promotion”) ? “active” : “inactive”}= link_to “Moje promocje”, client_list_promotion_path
    %li{class: @tab == (“tab_client_list_fanpage”) ? “active” : “inactive”}= link_to “Moje fanpage”, client_list_fanpage_path
    %li{class: @tab == (“tab_client_list_site”) ? “active” : “inactive”}= link_to “Moje strony internetowe”, client_list_side_path
    %li{class: @tab == (“tab_client_choose_promotion”) ? “active” : “inactive”}= link_to “Typy aplikacji”, client_choose_promotion_path[/code]
    Resztą powoli ląduje w helperach[/quote]
    To jeszcze to możesz władować do helpera:

def active_class(tab) if @tab == tab "active" else "inactive" end end

[code].container

  • if session[:id_client]
    %ul.nav.nav-tabs
    %li{class: active_class(“tab_client_home”)}= link_to “Strona główna”, client_path
    %li{class: active_class(“tab_client_list_promotion”)}= link_to “Moje promocje”, client_list_promotion_path[/code]

[quote=sebcioz]To jeszcze to możesz władować do helpera:

def active_class(tab) if @tab == tab "active" else "inactive" end end
[/quote]
A wręcz:

def active_class(tab) @tab == tab ? 'active' : 'inactive' end
:slight_smile: