[spip-dev] différence de comportement 1.8b1 v 1.7.2

Pour arriver à mes fins multilingue, j'ai des squelettes (toujours en
évolution) assez compliqués.

Je vois que les squelettes identiques, établis parfois par tâtonnements sur
1.7.2 ne donnent pas la même chose sur 1.8b1.

Comparer, par exemple,
http://www.taize.ch/spip/en_article82.html?lang=nl (1.7.2 - tout à sa
place, avec tout ce qui entoure la page en néerlandais)
avec
http://www.taize.ch/spip18/en_article82.html?lang=nl (1.8 - un peu différent
! - et tout ce qui entoure la page en anglais [la langue par défaut du
site])

Le squelette dans les deux cas : t_artnorm.html

Est-ce que 1.8 est toujours buggé à cet égard, ou ai-j'utilisé des choses
non-standard dans les squelettes et faut-il que je recommence?

merci, Paolo

http://www.taize.ch/spip/en_article82.html?lang=nl (1.7.2 - tout à sa
http://www.taize.ch/spip18/en_article82.html?lang=nl (1.8 - un peu différent

Le squelette dans les deux cas : t_artnorm.html

Est-ce que 1.8 est toujours buggé à cet égard, ou ai-j'utilisé des choses
non-standard dans les squelettes et faut-il que je recommence?

Ne change pas tes squelettes, je pense que c'est le bug multilingue qui est
revenu dans la 1.8b1. Je vais regarder ce qui se passe

-- Fil

http://www.taize.ch/spip/en_article82.html?lang=nl (1.7.2 - tout à sa
http://www.taize.ch/spip18/en_article82.html?lang=nl (1.8 - un peu différent

La deuxième page affiche "erreur sur le site" ; en tant qu'admin tu dois
pouvoir lire cette erreur ; par ailleurs pourquoi est-ce que la page
article82 ne fonctionne pas, alorss que, par exemple,
http://www.taize.ch/spip18/hr_article607.html a l'air correct ?

Utilises-tu $forcer_lang ?

-- Fil

Fil wrote:

Ne change pas tes squelettes, je pense que c'est le bug multilingue qui
est
revenu dans la 1.8b1. Je vais regarder ce qui se passe

Merci !
Pour comprendre ces squelettes, cela peut aider de savoir que mon principe
est le suivant :

- il y a un secteur dans chaque langue avec des articles (certains liés par
des liens de traduction). Chaque secteur a 9 sous-rubriques. Ces "chapitres"
s'affichent en permanence à travers le site juste en dessous de la bannière
orange.

- en plus il y a un secteur (il se trouve qu'il a le numéro 586) avec des
articles "partagés". Ce secteur possède les mêmes 9 sous-rubriques. La
langue de ce secteur est anglais aui est aussi la langue par défaut du site.

- A cause du manque des liens de traduction des rubriques, chacun de ces 9
chapîtres est marqué avec un mot-clé à travers tous les secteurs.

Quand on est "dans" un chapitre le squelette cherche à afficher un menu à
gauche de la manière suivante:
1. Montrer l'arboresence des articles dans cette langue dans ce chapitre.
2. Ensuite chercher si dans ce chapitre il y a aussi des articles dans le
secteur 586.
3. Si oui, on teste chacun de ces articles, avec les liens de traduction,
pour voir si une traduction dans la langue en cours existe. Si oui, pas la
peine de l'afficher. Mais dans le cas contraire l'article est ajouté au
menu.

Quand le visiteur clique sur un de ces articles "partagés", cela devient
plus compliqué. Il veut garder la langue en cours mais juste regarder
l'article partagé. Pour pouvoir faire cela, j'ai choisi dans ce cas de
passer lang=xx dans l'URL.

Le problème qu'on voit avec mes squelettes sous 1.8 se produit dans le cas
où l'article en cours est dans ce secteur partagé (no. 586). On voit le même
chose avec un autre squelette:
http://www.taize.ch/spip/en_article260.html?lang=it (affiche bien)

http://www.taize.ch/spip18/en_article260.html?lang=it (n'affiche rien)

Ces articles utilisent le squelette t_music.html.

Paolo

Fil wrote:

La deuxième page affiche "erreur sur le site"

Je n'ai pas cela. J'ai la page rempli d'abord des #Titres de toutes les
secteurs dans chaque langue.

en tant qu'admin tu dois pouvoir lire cette erreur

J'ai ajouté un login:
login : amis
mdp : testeur
pour que tu puisses y regarder si tu veux.

; par ailleurs pourquoi est-ce que la page
article82 ne fonctionne pas, alorss que, par exemple,
http://www.taize.ch/spip18/hr_article607.html a l'air correct ?

Correct - oui. (sauf que l'admin hr ne comprends pas encore comment mettre
les chiffres devant le titres :wink:

Les deux articles utilisent le même squelette (t_artnorm.html). Seulement
hr_article607.html est "natif" au secteur croate, tandis que
en_article82.html?lang=hr est un article dans le secteur 586, qui contient
les articles à afficher dans toutes les langues, le lang=hr dans l'URL doit
être pris par le squelette pour mettre les menus et d'autres textes (même
parfois le titre de l'article - avec l'usage de <multi>) en croate.
Alors le deuxième article passe par les boucles dans le squelette qui
testent pour {id_secteur=586}.

Utilises-tu $forcer_lang ?

Non, pas du tout. Mais un peu de {!lang_select} dans certaines boucles.

Paolo

http://www.taize.ch/spip/en_article82.html?lang=nl (1.7.2 - tout à sa
place, avec tout ce qui entoure la page en néerlandais)
avec
http://www.taize.ch/spip18/en_article82.html?lang=nl (1.8 - un peu différent
! - et tout ce qui entoure la page en anglais [la langue par défaut du
site])

Je crois qu'il faut distinguer deux différences de comportement :

- la première, c'est que lang=nl ne modifie pas la langue de la page ; ça,
  c'est une modification normale, et tu peux rattraper le coup en mettant
  dans le fichier d'appel article.php3 une ligne du genre
        if ($lang) $forcer_lang = true;

Tu le constates rapidement en faisant
http://www.taize.ch/spip18/en_article82.html?lang=nl&forcer_lang=oui ; là tu
vois bien apparaitre "Nederlands" dans le menu, et "Zoeken" dans la
recherche.

(mais ce serait une mauvaise idée de laisser trainer des forcer_lang dans les
urls)

- la seconde, c'est que la liste des rubriques qui se trouve juste sous le
bandeau coloré contient 200 entrées au lieu de 10 ; là, je cherche encore ;

Le <INCLURE(ti_hmenu.php3){id_rubrique}{lang}> est censé se traduire par
l'équivalent de
http://www.taize.ch/spip18/ti_hmenu.php3?id_rubrique=465&lang=nl
qui donnerait bien le menu désiré.

Mais il est apparemment appelé autant de fois qu'il y a de langues !

Peux-tu ajouter (sur les deux sites !) des balises #ID_MOT et #ID_RUBRIQUE à
l'intérieur de la boucle _kword2 et _id, respectivement, de manière à
savoir laquelle des deux "bégaie" ?

Là où tu as <BOUCLE_kword2(MOTS){id_rubrique}{type=SectionLogo}>, ajoute,
juste après : <!-- _kword2 #ID_MOT -->

de même dans la boucle _id ajoute <!-- _id #ID_RUBRIQUE -->

-- Fil

Mais il est apparemment appelé autant de fois qu'il y a de langues !

Ah oui, je crois que j'ai compris :

tu as :

<BOUCLE_id(RUBRIQUES){id_mot}{id_secteur!=586}{tout}>
        <INCLURE(ti_hmenu.php3){id_rubrique}{lang}>
</BOUCLE_id>

Cela signifie : "prendre la liste des rubriques (hors secteur 586) qui ont
le mot-clé id_mot" => ça te donne toutes les rubriques en question.

Ensuite, *pour chacune de ces langues*, tu demandes
        <INCLURE(ti_hmenu.php3){id_rubrique}{lang}>

Il suffit donc que {lang} ait un peu changé de signification entre la 1.7.2
(où il était encore buggué) et la 1.8 pour que ta boucle "bégaie".

Essaie de mettre à la place :

<BOUCLE_id(RUBRIQUES){id_mot}{id_secteur!=586}{lang}{tout}>
        <INCLURE(ti_hmenu.php3){id_rubrique}>
</BOUCLE_id>

(Autrement dit : sélectionner la bonne rubrique, puis appeler le menu, au
lieu d'appeler le menu pour chaque rubrique et d'espérer que le menu ne
s'affiche que s'il est appelé avec la bonne langue en paramètre)

-- Fil

Fil wrote:

Mais il est apparemment appelé autant de fois qu'il y a de langues !

Oui - ce qui veut dire pas mal de fois ! Une erreure. Merci pour tout ce
débuggage !
J'ai mis maintenant :

<BOUCLE_id(RUBRIQUES){id_mot}{id_secteur!=586}{lang}{tout}>
        <INCLURE(ti_hmenu.php3){id_rubrique}{lang}>
</BOUCLE_id>

car l'INCLURE a aussi besoin d'avoir {lang} passé dans l'appel, il semble.

Avec la ligne dans article.php3 que tu suggères, cela améliore les choses
sensiblement. Je pense qu'il y a encore des choses tordues. Je vais pouvoir
regarder de plus près, changer les autres squelettes et faire des tests,
lundi après-midi.

Encore un grand merci,
Paolo

> Mais il est apparemment appelé autant de fois qu'il y a de langues !

Oui - ce qui veut dire pas mal de fois ! Une erreure. Merci pour tout ce
débuggage !
J'ai mis maintenant :

<BOUCLE_id(RUBRIQUES){id_mot}{id_secteur!=586}{lang}{tout}>
        <INCLURE(ti_hmenu.php3){id_rubrique}{lang}>
</BOUCLE_id>

car l'INCLURE a aussi besoin d'avoir {lang} passé dans l'appel, il semble.

Non, regarde, si tu appelles
http://www.taize.ch/spip18/en_article82.html?lang=nl&recalcul=oui

le menu a disparu, à cause du {lang} dans le inclure.

-- Fil

Fil wrote:

Non, regarde, si tu appelles
http://www.taize.ch/spip18/en_article82.html?lang=nl&recalcul=oui
le menu a disparu, à cause du {lang} dans le inclure.

OK, mais si je l'enlève, comme je l'ai fait il y a quelque temps, la langue
(nl) n'est plus passée à l'inclure et le menu horizontal est en anglais, au
lieu d'être en néerlandais.
J'ai essayé plusieurs choses pour passer la langue, mais ne vois pas du tout
comment le faire.
J'ai ajouté les commentaires que tu suggérais hier dans les boucles.

Paolo

Bonsoir !

Je travaille toujours avec
http://www.taize.ch/spip18/en_article82.html?lang=nl&recalcul=oui

et j'ai bourré les boucles de commentaires debug de cette façon :

<B_checkshared1>
   <!-- Article is shared; lang = #LANG ; forcer_lang = <?php echo
$forcer_lang; ?> -->
   <BOUCLE_checkshared1(ARTICLES){id_article}{id_secteur=586}{!lang_select}>
    <!-- _checkshared; lang = #LANG ; forcer_lang = <?php echo $forcer_lang;
?> -->
    <BOUCLE_main2(HIERARCHIE){id_article}{1,1}{!lang_select}>
    <!-- _main2; lang = #LANG ; forcer_lang = <?php echo $forcer_lang;
?> -->
    <BOUCLE_kword2(MOTS){id_rubrique}{type=SectionLogo}>
    <!-- _kword2 #ID_MOT; lang = #LANG ; forcer_lang = <?php echo
$forcer_lang; ?> -->
     <BOUCLE_id(RUBRIQUES){id_mot}{id_secteur!=586}{tout}{lang}>
      <!-- _id Rubrique: #ID_RUBRIQUE ; lang = #LANG ; forcer_lang = <?php
echo $forcer_lang; ?> -->
      <INCLURE(ti_hmenu.php3){id_rubrique}>
     </BOUCLE_id>
    </BOUCLE_kword2>
    </BOUCLE_main2>
</BOUCLE_checkshared1>

Ce qui donne dans la source :

<!-- Article is shared; lang = nl ; forcer_lang = 1 -->
<!-- _checkshared; lang = en ; forcer_lang = 1 -->
<!-- _main2; lang = en ; forcer_lang = 1 -->
<!-- _kword2 17; lang = en ; forcer_lang = 1 -->
<!-- _id Rubrique: 44 ; lang = en ; forcer_lang = 1 -->

Ce que je ne comprends pas, c'est pourquoi est-ce que la boucle
_checkshared1 change la valeur de #LANG ?
Il y a et $forcer_lang=true et {!lang_select} pour l'empêcher d'agir de
cette façon.

Est-ce un bug, ou y a-t-il quelque chose qui se passe que je ne comprends
pas ?

merci, Paolo

Ce que je ne comprends pas, c'est pourquoi est-ce que la boucle
_checkshared1 change la valeur de #LANG ?
Il y a et $forcer_lang=true et {!lang_select} pour l'empêcher d'agir de
cette façon.

Oui, mais l'idée est que *même si tu ne veux pas modifier la langue de
travail de SPIP*, #LANG représente toujours la langue de l'objet... et
{lang} correspond à la langue de l'objet. A mon avis c'est plus sain comme
ça, mais effectivement ça fait planter ton exemple.

Il va falloir trouver une astuce et modifier les squelettes, ou inventer un
nouveau critère d'inclusion. Mais ça demande un peu de réflexion.

-- Fil

Fil wrote:

#LANG représente toujours la langue de l'objet... et {lang} correspond à
la langue de l'objet.

C'est sûr que j'aimerais un critère qui répresente une langue sur lequel
j'ai plus de prise. Car je ne sais pas comment je vais arriver au bout
sinon...

Il va falloir trouver une astuce et modifier les squelettes,

Je promets de continuer à réfléchir !

ou inventer un nouveau critère d'inclusion. Mais ça demande un peu de
réflexion.

J'espère que tu feras de même !

merci, Paolo

Fil wrote:

l'idée est que *même si tu ne veux pas modifier la langue de
travail de SPIP*, #LANG représente toujours la langue de l'objet.

Je vise à l'aveuglette : cette "langue de travail de Spip" - Spip doit le
connaître quelque part.
Et si elle pourrait être rendu disponible sous forme de balise, ne
pourrait-on écrire - avec les nouvelles possibilités de Spip 1.8 - quelque
chose comme:
    <INCLURE(ti_hmenu.php3){id_rubrique}{lang = #LANG_SPIP>

?

Paolo

> l'idée est que *même si tu ne veux pas modifier la langue de
> travail de SPIP*, #LANG représente toujours la langue de l'objet.

Je vise à l'aveuglette : cette "langue de travail de Spip" - Spip doit le
connaître quelque part.
Et si elle pourrait être rendu disponible sous forme de balise, ne
pourrait-on écrire - avec les nouvelles possibilités de Spip 1.8 - quelque
chose comme:
    <INCLURE(ti_hmenu.php3){id_rubrique}{lang = #LANG_SPIP>

A la réflexion, la situation actuelle est un bug : en effet avec
forcer_lang, on veut que la langue de l'URL soit prise comme langue "forcée"
pour tous les éléments, donc y compris pour les INCLURE. C'est ça qu'il faut
changer... à tout à l'heure :slight_smile:

-- Fil