SPIP ecureuil




Thème de ce forum :

Doublons articles/documents



momax
Doublons articles/documents
6 mai 2008 14:05

Bonjour à tous,

Je souhaiterais que la boucle document de ma page article ne me liste pas les documents insérer dans l’article en tant que lien. est ce possible ?

Rechercher dans les forums:
 

denisb
6 mai 2008 14:36
Doublons articles/documents

tu ajoutes le critère {doublons} à ta boucle ARTICLES puis tu le reprends dans ta boucle DOCUMENTS :

<BOUCLE_a(ARTICLES) {doublons} ...
...
<BOUCLE_d(DOCUMENTS) {doublons} ...
...
</BOUCLE_d>
...
</BOUCLE_a>

ainsi, les documents affichés par les retours de ARTICLES seront exclus des retours de DOCUMENTS

momax
6 mai 2008 17:23
Doublons articles/documents

merci de ta réponse, mais c’est bien ce que j’ai fait. est-ce que cela peut venir du fait que ces documents ne sont pas affichés mais sont pointés par un lien ?

denisb
6 mai 2008 17:57
Doublons articles/documents

ah oui des liens [tralala->docxx]
euh... je passe...

denisb
7 mai 2008 08:43
Doublons articles/documents [si, si...]

- on considère que les liens qui nous intéressent, placés directement dans le corps d’un texte, contiennent la forme :
-> un tiret suivi obligatoirement d’un signe supérieur à
\s* suivi ou non d’un ou plusieurs espace
(doc|emb|im|image|img) suivi obligatoirement de doc ou emb ou img ou im ou image
(\d+) suivi obligatoirement d’au moins un chiffre
(\s*|(\|\w+)*) suivi soit d’un ou plusieurs espace, soit d’un ou plusieurs pipe suivi de lettres,
] suivi obligatoirement d’un crochet fermant
- ce qui permet de reconnaitre les liens du type :
->; doc25]
->im12 ]
->  doc467|blabla ]
etc

- on va récupérer les liens de #TEXTE,
puis en extraire les numéros (les id) des documents,
puis les assembler dans une chaine du type (25|12|467)
- enfin on passera cette chaine en critère

{id_document!==^(#TEXTE*|liens_inclus)$}

à notre boucle DOCUMENTS

- la fonction à poser dans mes_fonctions.php :

//  extrait les ID des documents passes en liens dans un texte
//  et les retourne sous forme de liste
//  (44|25|12|5)
function liens_inclus($texte) {
 $liste = '';
 $liens = preg_match_all(",->\s*(doc|emb|im|image|img)(\d+)(\s*|(\|\w+)*)],", $texte, $r);
 if (!empty($r[2])) {
   $l_ex   = array_unique($r[2]);
   $liste  = implode("|", $l_ex);
 }
 return '(' . $liste . ')';
}

cette fonction-filtre est à appeler dans la boucle DOCUMENTS elle-même incluse dans la boucle ARTICLES par :

<BOUCLE_doc(DOCUMENTS) {id_article} {id_document!==^(#TEXTE*|liens_inclus)$}>

la requête générée sera du type :

SELECT documents.id_document
 FROM `base_dev`.spip_documents AS `documents`
WHERE NOT(documents.id_document REGEXP '^(44|25|12|5)$')
  AND (documents.taille > 0 OR documents.distant="oui")

cqfd

momax
7 mai 2008 11:07
Doublons articles/documents

whaoo j’en reste bouche bée. quelle maitrise.

Bon je teste ça et je dis quoi !!

encore merci

momax
7 mai 2008 11:19
[RESOLU]Doublons articles/documents

c’est tout bon, génial

encore merci

RSS






squelette