Изграждам приложение на Sinatra с шаблони за шаблони и се чудех дали е възможно да се реализира някакъв вид парам в целия сайт. Идеята в моя случай би била да се даде възможност за различно layout.haml
за да можете да бъдете избрани за всеки маршрут, без да се налага да дублирате / пренаписвате всеки маршрут в приложението.
Например се чудех дали би било възможно да получавам http://domain.com/route/:normal-params/?layout=layout_b
и да можете да добавите ?template=template_choice
до всеки маршрут в приложението и използвайте подходящото оформление.
Единственото решение, за което мога да се сетя, което изглежда много неефективно, е да се дублира всеки отделен маршрут, за да се търси този параметър. Също така чувствам, че това може да се постигне по някакъв начин с a филтър но не съм сигурен как би могло да се приложи такова нещо.
Отговори:
2 за отговор № 1Можете да посочите към кое оформление искате да заредите разговора си haml
:
haml :post, :layout => params[:layout].to_sym
По този начин можете да се обадите http://domain.com/route/foo/bar?layout=layout_b
и Синатра ще потърси подходящото оформление с име layout_b
за рендериране.
Вероятно ще искате да посочите оформление по подразбиране, за да го направите, ако никой не е предоставен като параметър URL:
haml :post, :layout => (params[:layout] || "default").to_sym