Précisions sur le contexte de SPIP

Bonjour,

J'ai défini la boucle PRODUITS comme suit :

<?php

global $table_des_tables;
$table_des_tables['produits'] = 'produits';

$spip_produits = array(
"id_produit" => "BIGINT(21) NOT NULL",
"id_rubrique" => "BIGINT(21) NOT NULL DEFAULT '0'",
"id_secteur" => "BIGINT(21) NOT NULL DEFAULT '0'",
"titre" => "TEXT NOT NULL",
"texte" => "LONGBLOB NOT NULL",
"lang" => "VARCHAR(10) DEFAULT '' NOT NULL"
);

$spip_produits_key = array(
"PRIMARY KEY" => "id_produit",
"KEY id_rubrique" => "id_rubrique",
"KEY id_secteur" => "id_secteur",
"KEY lang" => "lang"
);

global $tables_principales;
$tables_principales['spip_produits'] = array('field' => &$spip_produits, 'key' => &$spip_produits_key);

?>

Voilà le squelette produit.html :

<BOUCLE_produit(PRODUITS) {id_produit}>
<INCLURE {fond=inc_haut} {id_produit} {id_rubrique} {lang}>
<h1>#TITRE</h1>
<p>#LANG</p>
<a href="#URL_PRODUIT"><:ajouter_au_panier:></a>
<INCLURE {fond=inc_bas} {lang}>
</BOUCLE_produit>

Le produit est dans un secteur anglais (la valeur de lang dans mysql vaut en), la langue principale du site est le français. Les 2 inclusions (contenant des chaînes de langue) et <:ajouter_au_panier:> s'affichent en français, alors que #LANG affiche "en"...

En debug, pour la première inclusion j'ai :
fond : inc_haut
id_produit : 76
id_rubrique : 60
lang : fr
C'est plutôt bizarre non ?

SPIP devrait aller chercher la valeur de lang dans le contexte, ici la table spip_produits (dans ce cas "en") puisque c'est la boucle englobante, mais ce n'est pas le cas. Je sais qu'en rajoutant &lang=en à l'url du produit le squelette reprend un comportement cohérent. Cependant j'aimerais me passer de cette astuce.

Avez-vous des pistes ?

Cordialement,

Pierre.

pierrot wrote:

Avez-vous des pistes ?

Bonjour,

Moi j'essayerais :
<INCLURE {fond=inc_haut} {id_produit} {id_rubrique} {lang=#LANG}>

Paolo

pierrot a écrit :

Bonjour,

J'ai défini la boucle PRODUITS comme suit :

<?php

global $table_des_tables;
$table_des_tables['produits'] = 'produits';

$spip_produits = array(
"id_produit" => "BIGINT(21) NOT NULL",
"id_rubrique" => "BIGINT(21) NOT NULL DEFAULT '0'",
"id_secteur" => "BIGINT(21) NOT NULL DEFAULT '0'",
"titre" => "TEXT NOT NULL",
"texte" => "LONGBLOB NOT NULL",
"lang" => "VARCHAR(10) DEFAULT '' NOT NULL"
);

$spip_produits_key = array(
"PRIMARY KEY" => "id_produit",
"KEY id_rubrique" => "id_rubrique",
"KEY id_secteur" => "id_secteur",
"KEY lang" => "lang"
);

global $tables_principales;
$tables_principales['spip_produits'] = array('field' => & $spip_produits, 'key' => &$spip_produits_key);

?>

Voilà le squelette produit.html :

<BOUCLE_produit(PRODUITS) {id_produit}>
<INCLURE {fond=inc_haut} {id_produit} {id_rubrique} {lang}>
<h1>#TITRE</h1>
<p>#LANG</p>
<a href="#URL_PRODUIT"><:ajouter_au_panier:></a>
<INCLURE {fond=inc_bas} {lang}>
</BOUCLE_produit>

Le produit est dans un secteur anglais (la valeur de lang dans mysql vaut en), la langue principale du site est le français. Les 2 inclusions (contenant des chaînes de langue) et <:ajouter_au_panier:> s'affichent en français, alors que #LANG affiche "en"...

En debug, pour la première inclusion j'ai :
fond : inc_haut
id_produit : 76
id_rubrique : 60
lang : fr
C'est plutôt bizarre non ?

SPIP devrait aller chercher la valeur de lang dans le contexte, ici la table spip_produits (dans ce cas "en") puisque c'est la boucle englobante, mais ce n'est pas le cas. Je sais qu'en rajoutant &lang=en à l'url du produit le squelette reprend un comportement cohérent. Cependant j'aimerais me passer de cette astuce.

Avez-vous des pistes ?

Cordialement,

Pierre.

#ENV{lang}

Oui je suis d'accord que #ENV{lang} ou #LANG (ou encore &lang=#LANG dans l'url) peuvent résoudre le problème. Seulement, je trouve que c'est un peu de la bricole : on a pas besoin de "forcer la main" à SPIP pour les articles ou rubriques, j'aimerais savoir pourquoi j'ai un comportement différent...

Le 27 sept. 07 à 19:08, jo@ki-learning.fr a écrit :

pierrot a écrit :

Bonjour,

J'ai défini la boucle PRODUITS comme suit :

<?php

global $table_des_tables;
$table_des_tables['produits'] = 'produits';

$spip_produits = array(
"id_produit" => "BIGINT(21) NOT NULL",
"id_rubrique" => "BIGINT(21) NOT NULL DEFAULT '0'",
"id_secteur" => "BIGINT(21) NOT NULL DEFAULT '0'",
"titre" => "TEXT NOT NULL",
"texte" => "LONGBLOB NOT NULL",
"lang" => "VARCHAR(10) DEFAULT '' NOT NULL"
);

$spip_produits_key = array(
"PRIMARY KEY" => "id_produit",
"KEY id_rubrique" => "id_rubrique",
"KEY id_secteur" => "id_secteur",
"KEY lang" => "lang"
);

global $tables_principales;
$tables_principales['spip_produits'] = array('field' => & $spip_produits, 'key' => &$spip_produits_key);

?>

Voilà le squelette produit.html :

<BOUCLE_produit(PRODUITS) {id_produit}>
<INCLURE {fond=inc_haut} {id_produit} {id_rubrique} {lang}>
<h1>#TITRE</h1>
<p>#LANG</p>
<a href="#URL_PRODUIT"><:ajouter_au_panier:></a>
<INCLURE {fond=inc_bas} {lang}>
</BOUCLE_produit>

Le produit est dans un secteur anglais (la valeur de lang dans mysql vaut en), la langue principale du site est le français. Les 2 inclusions (contenant des chaînes de langue) et <:ajouter_au_panier:> s'affichent en français, alors que #LANG affiche "en"...

En debug, pour la première inclusion j'ai :
fond : inc_haut
id_produit : 76
id_rubrique : 60
lang : fr
C'est plutôt bizarre non ?

SPIP devrait aller chercher la valeur de lang dans le contexte, ici la table spip_produits (dans ce cas "en") puisque c'est la boucle englobante, mais ce n'est pas le cas. Je sais qu'en rajoutant &lang=en à l'url du produit le squelette reprend un comportement cohérent. Cependant j'aimerais me passer de cette astuce.

Avez-vous des pistes ?

Cordialement,

Pierre.

#ENV{lang}

Bonjour,

Je cherche à créer un modèle de type :
<diaporama|images=14,16,17,18>
où les chiffres sont des id d'image dans un article (ou une rubrique).

Je voudrais le récupérer dans le genre
<BOUCLE_lesimages(DOCUMENTS){id_document IN #ENV{images}}>
ici je génère le diaporama en javascript ou flash
</BOUCLE>

Mais tel quel il ne récupère que le premier id et ignore les autres.

Quelqu'un a une idée ?

Je cherche d'autre part un diaporama flash qui ne necessite pas de fichier xml (avec les adresses de fichier dans la chaine envoyée à l'application flash, genre ?files=IMG/jpg/01.jpg|IMG/jpg/02.jpg|IMG/jpg/03.jpg

Merci

Stéphane Noël

Stephane corsaires <stephane.noel.stock@gmail.com> wrote:

Bonjour,

Je cherche à créer un modèle de type :
<diaporama|images=14,16,17,18>
où les chiffres sont des id d'image dans un article (ou une rubrique).

Je voudrais le récupérer dans le genre
<BOUCLE_lesimages(DOCUMENTS){id_document IN #ENV{images}}>
ici je génère le diaporama en javascript ou flash
</BOUCLE>

Mais tel quel il ne récupère que le premier id et ignore les autres.

Quelqu'un a une idée ?

Je cherche d'autre part un diaporama flash qui ne necessite pas de
fichier xml (avec les adresses de fichier dans la chaine envoyée à
l'application flash, genre
?files=IMG/jpg/01.jpg|IMG/jpg/02.jpg|IMG/jpg/03.jpg

Bonjour

Conseil : puisque le sujet est différent, ne pas poster à la suite ou en
réponse d'un fil déjà existant mais faire un nouveau message.

Pour ta question il faut déjà récupérer le contexte des documents de
l'article en question.
Le mieux dans ce cas est de mettre les image en document joint (à voir
dans ton cas)

<BOUCLE_lesimages(DOCUMENTS) {id_article} {mode = document} {extension
IN jpg,png,gif} {par num titre, date} {doublons}>
.......
</BOUCLE_lesimages>

Voir dans les squelettes d'article de la dist il y a un exemple de
galerie avec récupération des images en document joint.
Si tu veux garder tes images en mode image (par "ajouter une image") il
suffit que tu mettes {mode=vignette} comme critère de la boucle à la
place de {mode=document}

--
Dominique
http://wojylac.free.fr

Dominique a écrit :

Stephane corsaires <stephane.noel.stock@gmail.com> wrote:

Bonjour,

Je cherche à créer un modèle de type :
<diaporama|images=14,16,17,18>
où les chiffres sont des id d'image dans un article (ou une rubrique).

Je voudrais le récupérer dans le genre
<BOUCLE_lesimages(DOCUMENTS){id_document IN #ENV{images}}>
ici je génère le diaporama en javascript ou flash
</BOUCLE>

Mais tel quel il ne récupère que le premier id et ignore les autres.

Quelqu'un a une idée ?

Je cherche d'autre part un diaporama flash qui ne necessite pas de fichier xml (avec les adresses de fichier dans la chaine envoyée à l'application flash, genre ?files=IMG/jpg/01.jpg|IMG/jpg/02.jpg|IMG/jpg/03.jpg

Bonjour

Conseil : puisque le sujet est différent, ne pas poster à la suite ou en
réponse d'un fil déjà existant mais faire un nouveau message.

Pour ta question il faut déjà récupérer le contexte des documents de
l'article en question.
Le mieux dans ce cas est de mettre les image en document joint (à voir
dans ton cas)

<BOUCLE_lesimages(DOCUMENTS) {id_article} {mode = document} {extension
IN jpg,png,gif} {par num titre, date} {doublons}>
.......
</BOUCLE_lesimages>

Voir dans les squelettes d'article de la dist il y a un exemple de
galerie avec récupération des images en document joint.
Si tu veux garder tes images en mode image (par "ajouter une image") il
suffit que tu mettes {mode=vignette} comme critère de la boucle à la
place de {mode=document}

Ce que je cherche est un peu plus précis que tous les documents de l'article de type image : ce serait de permettre à l'utilisateur de fabriquer un diaporama sur base d'images en mode vignette sélectionnées par lui : il pourrait ainsi illustrer un texte indifferamment avec des images ou avec un diaporama, et même plusieurs diaporamas . J'ai donc besoin pour ça de récupérer les images sélectionné par le rédacteur : <diaporama|images=1|2|3> suivi dans le même article de : <diaporama|images=4,2,7> par exemple.

Désolé pour le nom du sujet, c'est Thunderbird qui a gardé le sujet alors que je l'avais supprimé.

Stéphane

Stephane corsaires <stephane.noel.stock@gmail.com> wrote:

Ce que je cherche est un peu plus précis que tous les documents de
l'article de type image : ce serait de permettre à l'utilisateur de
fabriquer un diaporama sur base d'images en mode vignette sélectionnées
par lui : il pourrait ainsi illustrer un texte indifferamment avec des
images ou avec un diaporama, et même plusieurs diaporamas . J'ai donc
besoin pour ça de récupérer les images sélectionné par le rédacteur :
<diaporama|images=1|2|3> suivi dans le même article de :
<diaporama|images=4,2,7> par exemple.

Suggestions
Mettre les images en document joint dans un autre article et recupérer
dans ton modèle l'id de cet article. (Cet article n'a même pas besoin
d'être déclaré publié en ligne, son texte, son titre et sa rubrique de
rattachement n'ont pas d'importance). J'ai utilisé cela pour un plugin
diaporama fait avec un javascript. Mais c'est sur que si on utilise
beaucoup cette fonctionalité, la gestion peut devenir délicate.

autre suggestion passer ton paramètre avec les id des images séparées
par un caractère particulier.
<diaporama|images=4 2 7> par exemple
dans ton modèle (je suppose que diaporama est un modèle) utiliser du php
qui permette de faire une boucle (utilisation de la fonction php
explode() pour tranformer les données en tableau).

<?php
$images = '[(#ENV{images}|texte_script)]';
$les_images = explode(' ',$images);
?>
Après je ne sais pas si on peut récupérer directement le contenu du
tableau ainsi crée comme critère d'une boucle ??

Sinon une piste ici...
http://www.cent20.net/spip.php?article159

--
http://wojylac.free.fr
Un proverbe chinois dit que lorsqu'on a rien à dire
on cite généralement un proverbe chinois.

Dominique a écrit :

Stephane corsaires <stephane.noel.stock@gmail.com> wrote:

Ce que je cherche est un peu plus précis que tous les documents de l'article de type image : ce serait de permettre à l'utilisateur de fabriquer un diaporama sur base d'images en mode vignette sélectionnées
par lui : il pourrait ainsi illustrer un texte indifferamment avec des
images ou avec un diaporama, et même plusieurs diaporamas . J'ai donc
besoin pour ça de récupérer les images sélectionné par le rédacteur :
<diaporama|images=1|2|3> suivi dans le même article de : <diaporama|images=4,2,7> par exemple.
    
Suggestions
Mettre les images en document joint dans un autre article et recupérer
dans ton modèle l'id de cet article. (Cet article n'a même pas besoin
d'être déclaré publié en ligne, son texte, son titre et sa rubrique de
rattachement n'ont pas d'importance). J'ai utilisé cela pour un plugin
diaporama fait avec un javascript. Mais c'est sur que si on utilise
beaucoup cette fonctionalité, la gestion peut devenir délicate.

autre suggestion passer ton paramètre avec les id des images séparées
par un caractère particulier.
<diaporama|images=4 2 7> par exemple
dans ton modèle (je suppose que diaporama est un modèle) utiliser du php
qui permette de faire une boucle (utilisation de la fonction php
explode() pour tranformer les données en tableau).

<?php $images = '[(#ENV{images}|texte_script)]';
$les_images = explode(' ',$images);
?>
Après je ne sais pas si on peut récupérer directement le contenu du
tableau ainsi crée comme critère d'une boucle ??

Sinon une piste ici...
http://www.cent20.net/spip.php?article159

La piste du lien semble la bonne, dans les forums de l'article Cent20. Merci donc.

Stéphane

Stephane corsaires <stephane.noel.stock@gmail.com> wrote:

La piste du lien semble la bonne, dans les forums de l'article Cent20.
Merci donc.

Effectivement

dans un modèle "diaporama.html"

#SET{images, #ARRAY{0,0}}
[(#ENV{im1}|?{#SET{images,#GET{images}|array_merge{#ARRAY{1,#ENV{im1}}}}
,''})]
[(#ENV{im2}|?{#SET{images,#GET{images}|array_merge{#ARRAY{2,#ENV{im2}}}}
,''})]
[(#ENV{im3}|?{#SET{images,#GET{images}|array_merge{#ARRAY{3,#ENV{im3}}}}
,''})]
[(#ENV{im4}|?{#SET{images,#GET{images}|array_merge{#ARRAY{4,#ENV{im4}}}}
,''})]

<BOUCLE_diaporama (DOCUMENTS) {id_document IN #GET{images}}
{mode=vignette}>
        #FICHIER<br />
</BOUCLE_diaporama>

et dans l'article
<diaporama| im1=xxx|im2=yyy|im3=zzz>

xxx, yyy, et zzz les id des images en mode images
Bon il faut déclarer une variable par image et on est limité en nombre
mais c'est effectivement assez souple et dans le modèle on peut bien
prévoir une dizaine d'images pour se garder une marge

Ca fonctionne même si on oublie une des variables
<diaporama|im1=xxx|im3=zzz>

Par contre j'ai déjà remarqué dans d'autres cas, un petit soucis suivant
la place des espaces pour rendre les choses plus lisibles

<diaporama| im1=xxx| im3=zzz> ne fonctionne pas
<diaporama|im1=xxx |im3=zzz > si

--
http://wojylac.free.fr
Un proverbe chinois dit que lorsqu'on a rien à dire
on cite généralement un proverbe chinois.

Dominique <dwojylac@free.fr> wrote:

Stephane corsaires <stephane.noel.stock@gmail.com> wrote:

> La piste du lien semble la bonne, dans les forums de l'article Cent20.
> Merci donc.

Effectivement

dans un modèle "diaporama.html"

#SET{images, #ARRAY{0,0}}
[(#ENV{im1}|?{#SET{images,#GET{images}|array_merge{#ARRAY{1,#ENV{im1}}}}
,''})]
......

On peut faire mieux encore par rapport à ma proposition précédente
et en reprenant l'idée avec explode (mais il fallait séparer le php du
modèle).

On passe tous les numéros d'image dans un seul paramètre
<diaporama|images=xxx,yyy,zzz,...> comme appel au modèle diaporama.

Dans le modèle diaporama.html

#SET{les_images, (#ENV{images}|texte_vers_tableau)}
<BOUCLE_diaporama (DOCUMENTS) {id_document IN #GET{les_images}}
{mode=vignette}>
        #FICHIER<br />
        ....
</BOUCLE_diaporama>

avec dans mes_fonctions.php la fonction
function texte_vers_tableau ($texte, $caractere=',') {
        $tableau = array();
        $tableau = explode ($caractere, $texte);
        return $tableau;
}

On peut ainsi passer les numéros d'images désirées dans le paramètre
"images" et on n'est pas limité en nombre contrairement à la proposition
précédente.

Comme on ne peut pas appeler directement la fonction php explode
(puisque le premier paramètre n'est pas la chaine sur laquelle le filtre
doit opérer) il faut l'inclure dans un filtre qui ne fait finalement que
remettre les paramètres dans le bon ordre.

le filtre |texte_vers_tableau peut fonctionner dans d'autres cas et on
peut préciser le caractère de séparation (par défaut c'est une virgule)

si images=xxx;yyy;zzz

alors on aura |texte_vers_tableau{';'}

--
http://wojylac.free.fr
Un proverbe chinois dit que lorsqu'on a rien à dire
on cite généralement un proverbe chinois.