Ogólne pytanie odnośnie layoutów

jesli chodzi o sam silnik to juz w zasadzie zrobilem sobie wszystko czego potrzebowalem. Teraz chciałbym to zapakować w ladny szablon. Zrobiłem sobie szablon głowny strony, w głównym miejscu szablonu gdzie maja sie wyswietlać kolejne tresci wstawiłem <%= yield %>, w kontrolerze dodałem wpis ogolny dla wszstkich akcji i wszytko ladnie sie wyswietla. Tylko teraz jest problem bo nie wszytko ma sie wyswietlać w czesci treściowej. Np. mam wyszukiwarke czyli pole textowe plus guzik(czyli formularz) jak sie kliknie guzik to zwraca wlasciwe wyniki. To wszytko juz mam zrobione i działa. tera tylko chciłbym to wsadzic w moj szablon tak ze wiadomo: formularz wyszukiwarki laduje sie od razu gdzies w szablonie głownym, jak tam cos wpiszemy i damy ok to wyniki zwracane sa w polu tresciowym ( tam gdzie ten yield). wyszukiwarka nie ma zadnych partiali. czy partiale sa do tego potrzebne?

kurde no… zrobilem sobie wszytko , wszytkie funkcje a teraz nie skoncze tylko przez to ze nie moge tego poskladac w jeden layout :confused:

Czytam Twój pierwszy post i nic z tego nie rozumiem. Myślę, że inni podobne mają odczucia. Ciężko pomóc komuś jeśli nie potrafi sprawnie opisać swojego problemu.

ok, sproboje jakoś inaczej: Mam juz zrobione wszystkie rzeczy “silnikowe” czyli międzyinnymi wyszukiwarkę. Do tej pory wszysko działało na tych domyślnych szablonach z katalogu layouts. Tam jest ten szkielet strony gdzie w body jest <%= yield%> . czyli takie:

[code]

Linki: <%= controller.action_name %> <%= stylesheet_link_tag 'scaffold' %>

<%= flash[:notice] %>

<%= yield %>

[/code] wiadomo ze to pusta strona wiec zrobilem sobie cały szablon strony po swojemu no i wszytko swietnie sie wyswietla w tym miejscu gdzie jest <%= yield%>

tylko ze przeciez nie wszytko ma sie tam wyswietlać. bo naprzykład wyszukiwarka własnie, jest przecież stałym elementem szablonu(no tak jak to jest stnadardowo na stronach, ze mamy z boku wyszukiwarkę). i teraz wlasnie nie wiem jak mam wrzucić coś co zrobiłm do głownego szablonu zeby było tam na stałe, jako element szablonu głownego

No widzisz, taki prosty problem a tak zamotałeś za pierwszym razem :).

Stałe elementy umieszczasz bezpośrednio w kodzie szablonu layoutu. To zwykły html przecież. Dodaj sobie np przed <%= yield %> taki kod:

To jest nagłówek

.

ten stały element to jest coś co wykonuje czynność jakąś czyli np wyszukiwarka. bo mam plik szukaj.rhtm w ktorym znajduje sie formularz wyszukiwarki (pole tekstowe, guzik submit). Czyli cały kod z pliku szukaj.rhtm mam wkleić w w layout tam gdzie chce? To by znaczył tez ze wszystkie @zmienne potrzebne dla wyszukiwarki czy innych musiałbym pobierać dla każdej akcji (nobo rownolegle z kada akcja ladowana jest ta stała z layautu) ? i tak przy okazji: da się jakoś globalnie przypisac @zmienne dla wszystkich akcji w kontrolerze?

Nie do końca. Stałym elementem u Ciebie jest pole wyszukiwarki i przycisk “Szukaj”, zatem te elementy możesz dodać do szablonu layoutu, np tak:

[code=rhtml]

[/code] A samo przetwarzanie jak i wyświetlanie wyników powinno oczywiście być już w osobnym kontrolerze i szablonie.

Jeśli dalej masz problemy to wklej kod plików search.rhtml oraz kontrolera obsługującego search.

OK!!! uadalo się! prawie :stuck_out_tongue:

wrzuciłem wyszukiwarkę bezpośrednio do layoutu tak jak mówiłeś i hula az miło :slight_smile:

zostało mi jeszcze coś co chcę umieścić w layoucie tak jak tą wyszukiwarkę tylko tym razem będzie troche bardzij problematycznie. Sprawa wygląda tak:

mam pewien plik “kategorie.rhtm” , którego zadaniem jest pobranie wszystkich wpisów z tabeli kategorie i wygenerowanie na tej podstawie linków.
działa sprawnie i wygląda on tak:

[CODE=ruby]

lista kategorii

<% for kategoria in @kategorie %> <%= link_to kategoria.kategoria, :action => 'listuj_z_kategorii', :kate => kategoria.kategoria %>
<%end%> [CODE]

czyli od razu potrzebna jest mu ta zmienna @kategorie która pobiera z bazy wpisy, w normlanej sytuacji załatwia to akcja w kontrolerze, która wyglada następująco:

[CODE=ruby]
def kategorie
@kategorie = Kategoria.find(:all)
end

[CODE]

Wrzuciłem kod pliku kategorie.rhtml to layout’u, wyświeta się ale do poprawnego działania woła o to: @kategorie = Kategoria.find(:all) w każdej kolejnej akcji jaką sie wywoła (czyli dotyczy to wszystkich wogole istniejących istniejacych akcji).
Problem daje sie rozwiązać wrzucajc “@kategorie = Kategoria.find(:all)” do wszystkich możliwych akcji. Zgaduję jednak że nie jest to poprawne rozwiązanie…

EDIT: wrzuciłem ta zmieną do aplication.rb jako glonblną i zdaje się ze działa prawidłowo :slight_smile:

Działa pewnie poprawnie ale w sensie technicznym rozwiązanie to nie jest najlepsze. Zdecydowanie lepiej skorzystać z filtrów akcji:
przeczytaj sobie w api opis before_filter.

tak, tak zrobilem sobie “def zmienne … end” gdzie dałem te potrzebne zemienne. a do “before_filter” dodalem “:zmienne” :slight_smile: