Link_to_remote et layout

Bonjour à tous,

pour rendre ma page principale plus dynamique, j’ai voulu mettre en
place des liens ajax avec link_to_remote. Je rencontre un problème pour
rafraîchir le div que je souhaite.

J’ai un layout comme ceci :

<%= @title_body %>
<%if @flash[:notice] -%> <%=@flash[:notice]%>
<%end -%> <%=yield%>

Tout marche correctement si j’utilise un lien tel que :
<%= link_to_remote (menu.name, :update => ‘content_rails’, :url=>{
:controller => ‘/home/main’ , :action=>‘index’, :menu_id=>menu.id,
:context =>‘false’})%>

Mais cela ne correspond pas à mon besoin (pas de rafraîchissement de la
variable @title_body), donc je souhaite mettre à jour content, mais cela
ne marche pas (non affichage des div content_top et content_bottom) dans
ce cas là :
<%= link_to_remote (menu.name, :update => ‘content’, :url=>{
:controller => ‘/home/main’ , :action=>‘index’, :menu_id=>menu.id,
:context =>‘false’})%>

Pour ne pas rafficher le layout par yield, je place ceci dans les
controllers associés :
if params[:context]==‘false’
render(:layout=>false)
end

Je suppose qu’il y a quelque chose que je n’ai pas saisi. si quelqu’un
pouvait m’éclairer, merci !!

Edouard

Bonjour,

Quel code te renvoie ton controller ?
Plus précisément te renvoie-t’il les 3 div (content_top, content_body et
content_bottom) ?

Stéphane

Le 11/12/06, edouard cante [email protected] a écrit :

Le code source de la page web générée contient bien ces trois div, c’est
la mise en page, l’application de mon css qui ne marche pas.

Stéphane Thibaudeau a écrit :

bonjour,

<%if @flash[:notice] -%>

<%=@flash[:notice]%>

<%end -%>

au passage, quelle en est la signification du ‘-’ devant le %> refermant
le code ?

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau S723

Guillaume :

<%if @flash[:notice] -%>

<%=@flash[:notice]%>

<%end -%>

au passage, quelle en est la signification du ‘-’ devant le %> refermant le code ?

Pour éviter qu’ERb rajoute une ligne blanche.

-- Jean-François.

Guillaume :

Pour éviter qu’ERb rajoute une ligne blanche.

ah bon ? il ajoute une ligne blanche, alors qu’il y a meme pas un “<%=” ?

Parfois, il est bien plus simple d’essayer par soi-même que de poser
la question sur la liste et d’attendre que quelqu’un veuille bien y
répondre.

Crée un .rhtml minimaliste avec une simple boucle <% for %> ou un <% if
%>
regarde ce que ça donne avec ou sans - à la fin.

 -- Jean-François.

Pour éviter qu’ERb rajoute une ligne blanche.

ah bon ? il ajoute une ligne blanche, alors qu’il y a meme pas un “<%=”
?

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau S723

Je crois que je commence à voir d’où vient mon erreur, mais je ne sais
toujours pas la régler …

C’est bien render(:layout=>false) qui supprime ma mise en page.

Mais comment faire ?

Je récapitule : je souhaite faire un lien de type link_to_remote vers un
div particulier, sans rafficher mon layout, mais en exploitant le css du
div updaté.

Merci d’avance,

Edouard

edouard cante a écrit :

Le 12 déc. 06 à 13:12, edouard cante a écrit :

Je crois que je commence à voir d’où vient mon erreur, mais je ne
sais toujours pas la régler …

C’est bien render(:layout=>false) qui supprime ma mise en page.

Mais comment faire ?

Je récapitule : je souhaite faire un lien de type link_to_remote
vers un div particulier, sans rafficher mon layout, mais en
exploitant le css du div updaté.

Il semble qu’on a discuté sur IRC, si c’est bien ce problème là, tu
peux employer la méthode que je t’y ait expliqué. Virer le :update de
ton link_to_remote. Tu utilises ensuite du RJS. Une vue RJS du nom de
ton action où tu fais tes modif’ de ton div genre :

page.replace_html ‘div_a_modifier’, @contenu

Bonne soirée.

Nicolas C.

Merci Nicolas pour ta réponse,

mais en fait je ne comprends pas ton message d’un point de vue
technique.

Tu me dis d’utiliser du RJS car ma solution est obsolète, mais qu’est ce
que le RJS va m’apporter dans ce cas là ?

Merci encore

Nicolas C. a écrit :

Désolé pour le bruit, j’aurais d’abord du passer par la case “cherche
par toi même”.

Je viens de le faire, j’ai compris plus de chose, mais çà ne va pas
mieux … :stuck_out_tongue:

Tout d’abord, j’ai un problème pour tester, j’ai en effet lu qu’il
fallait la version Edge de rails pour faire fonctionner les rjs, mais
dans la mesure où je veux transférer cette appli sur dreamhost, est ce
que çà ne va pas me poser de problème ? Ou est ce qu’il y a une autre
façon de faire fonctionner les RJS dans ma version stable de rails ?

D’autre part, je me pose la question sur mon exemple : je veux cliquer
sur mon lien link_to_remote et afficher une liste dans un div.

J’ai donc fais un test pour faire un list.rjs à la place de mon
list.rhtml. Mais je me pose une question, est ce que je transforme tout
mon code rhtml en javascript ? Ou je fais une erreur d’interprétation ?

Merci beaucoup,

Edouard

edouard cante a écrit :

Parfois, il est bien plus simple d’essayer par soi-meme que de poser la question sur la liste

oui, bien sur, je le reconnais.

pour ma décharge, j’ai pas Ruby sous la main (-;

mais ma 2e question était plutot dans le sens "pourquoi diable est-ce
qu’il ajoute un ‘\n’ alors qu’on n’a pas mis de
<%= " ? il doit bien y avoir une bonne raison bien fine (je leur fais
confiance), mais je vois pas pourquoi il rajoute
un \n alors qu’on n’a pas écrit de code générant un quelconque affichage…

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau S723

Encore une fois, la fin de ligne est dans la partie “statique” de ton
template, pas dans le code Ruby à l’intérieur des délimiteurs ERb.

d’accoooooord !!!

merci bcp à tous les 2 pour vos explications enrichissantes (-:

gUI


Pour la santé de votre ordinateur, préférez les logiciels libres !

Guillaume B. : (05 61) 19 40 65 / bureau S723

Hello,

Guillaume B. a écrit :

mais ma 2e question était plutot dans le sens "pourquoi diable est-ce
qu’il ajoute un ‘\n’ alors qu’on n’a pas mis de <%= " ? il doit bien

C’est plutôt l’inverse : il ne rajoutera pas de ligne vierge après un
<%=, puisqu’une telle structure (une “expression” Erb) est conçue pour
une utilisation “inline”, généralement dans un corps de texte.

En revanche, pour <% (“scriptlet” Erb), il s’agit de fragments de code,
et là c’est comme pour une scriptlet dans d’autres langages (PHP, JSP,
etc.) : il maintient le saut de ligne qui suit le %>, lequel fait
normalement partie du template.

Si tu veux l’éviter (afin de garder un découpage lisible dans ton source
sans balancer plein de lignes vides dans le résultat généré), tu
termines par “-%>”.

y avoir une bonne raison bien fine (je leur fais confiance), mais je
vois pas pourquoi il rajoute un \n alors qu’on n’a pas écrit de code
générant un quelconque affichage…

Encore une fois, la fin de ligne est dans la partie “statique” de ton
template, pas dans le code Ruby à l’intérieur des délimiteurs ERb. Dans
le template suivant :

«

Your items:

<% if items.empty? %>

No items so far.

<% else %> <% end %> »

Tu as un saut de ligne après chaque “%>”… Étant hors des blocs Erb,
il font partie intégrante du template, au même titre que ceux après les

”. Mais Erb reconnaît que ceux après des fragments de scriptlets
sont probablement là pour mieux formatter le source du template, pas
le résultat final : quand c’est le cas, tu termines avec “-%>” pour
lui dire de dégager le saut de ligne qui suit.

Merci beaucoup, cette explication était très claire !!

J’ai avancé sur ajax et je capte de plus en plus l’intérêt. J’ai pas mal
compris ces derniers jours la puissance de prototype/effects et rjs.

J’y retourne d’ailleurs …

Edouard

Nicolas C. a écrit :

Le 12 déc. 06 à 20:41, edouard cante a écrit :

qu’il y a une autre façon de faire fonctionner les RJS dans ma
version stable de rails ?

L’article que tu as lu doit être obsolète, RJS est disponible dans la
version stable de Rails, depuis 1.1.

D’autre part, je me pose la question sur mon exemple : je veux
cliquer sur mon lien link_to_remote et afficher une liste dans un div.

J’ai donc fais un test pour faire un list.rjs à la place de mon
list.rhtml. Mais je me pose une question, est ce que je transforme
tout mon code rhtml en javascript ? Ou je fais une erreur
d’interprétation ?

Tu fais une erreur d’interprétation :-). Il faut transformer ton code
HTML en code Ruby, ce même code Ruby sera ensuite transformé en code
JS par Rails puis interprété par Prototype. Dans ton RJS, tu vas
pouvoir modifier un élément DOM, lui appliquer des effets visuels, etc.

Ici tu veux remplacer le contenu d’un DIV. Tu vas donc créer un
partial (que tu peux extrapoler de ta vue RHTML actuelle) et tu vas
l’utiliser depuis ton RJS en faisant :

page.replace_html ‘ton_div’, :partial => ‘le_nom_du_partial’

A chaque click sur ton lien XHR, ton RJS sera appelé et le contenu de
ton DIV remplacé par le morceau de code (RHTML) disponible dans ton
partial.

En espérant que c’est plus clair …

Nicolas C.