[SPIP Zone] [Spip-zone-commit] r27761 - in /_plugins_/_test_/etiquettes: balise/formulaire_etiquettes.php formulaires/etiquettes.php

table_objet($type_objet)
sera beaucoup mieux que l’affreux
preg_replace(‹ /^spip_/i ›, ‹  ›, table_objet_sql($type_objet))

Et sinon
if($type_objet and !in_array(‹ mots_ ›.preg_replace(‹ /^spip_/i ›, ‹  ›, table_objet_sql($type_objet)), $tables_jointures[‹ spip_mots ›]))
n’est pas perenne dans la mesure ou les tables mots_xxx vont etre un jour ou l’autre fusionnees en une seule mots_liens, comme pour les documents.
Il faut te reposer sur la présence de la declaration dans tables_jointures, pas sur le nom de la table qui y est declaree.
Cédric

Le 9 avril 2009 17:26, <vincent@ldd.fr> a écrit :

Author: vincent@ldd.fr
Date: Thu Apr 9 17:26:02 2009
New Revision: 27761

Log:
qu’est ce qu’il ne faut pas faire avec ces noms de table…

Modified:
plugins/test/etiquettes/balise/formulaire_etiquettes.php
plugins/test/etiquettes/formulaires/etiquettes.php

Modified: plugins/test/etiquettes/balise/formulaire_etiquettes.php

plugins/test/etiquettes/balise/formulaire_etiquettes.php (original)
+++ plugins/test/etiquettes/balise/formulaire_etiquettes.php Thu Apr 9 17:26:02 2009
@@ -85,7 +85,6 @@

$id_objet = intval($id_objet);
$type_objet = strtolower($type_objet);

  • $type_objet = preg_replace(‹ ,^spip_|s$, ›, ‹  ›, $type_objet);
    $cle_objet = id_table_objet($type_objet);

// il faut vérifier s’il existe bien cet objet
@@ -121,7 +120,7 @@

// on ne peut pas continuer si le type choisi n’est pas relié à des mots-clés
// autrement dit, s’il n’y a pas de table mots_machin

  • if($type_objet and !in_array(« mots_$type_objet », $tables_jointures[‹ spip_mots ›]))
  • if($type_objet and !in_array(‹ mots_ ›.preg_replace(‹ /^spip_/i ›, ‹  ›, table_objet_sql($type_objet)), $tables_jointures[‹ spip_mots ›]))
    return erreur_squelette(
    _T(‹ etiquettes:zbug_pas_de_table_mots ›,
    array (

Modified: plugins/test/etiquettes/formulaires/etiquettes.php

plugins/test/etiquettes/formulaires/etiquettes.php (original)
+++ plugins/test/etiquettes/formulaires/etiquettes.php Thu Apr 9 17:26:02 2009
@@ -47,7 +47,7 @@

$reponse = sql_select(
‹ mots.titre ›,

  • array(‹ mots › => ‹ spip_mots ›, ‹ liaison › => ‹ spip_mots_ ›.$type_objet),
  • array(‹ mots › => ‹ spip_mots ›, ‹ liaison › => ‹ spip_mots_ ›.preg_replace(‹ /^spip_/i ›, ‹  ›, table_objet_sql($type_objet))),
    array(
    array(‹ = ›, ‹ mots.type ›, sql_quote($groupe)),
    array(‹ = ›, ‹ liaison. ›.$cle_objet, $id_objet),
    @@ -104,7 +104,14 @@
    $etiquettes = trim(_request($name));
    // On utilise la tag-machine avec les millions de paramètres
    include_spip(‹ inc/tag-machine ›);
  • ajouter_liste_mots($etiquettes,$id_objet,$groupe,$type_objet,$cle_objet,$remplacer);
  • ajouter_liste_mots(
  • $etiquettes,
  • $id_objet,
  • $groupe,
  • preg_replace(‹ /^spip_/i ›, ‹  ›, table_objet_sql($type_objet)),
  • $cle_objet,
  • $remplacer
  • );

// Si on a modifié, on renvoie la liste telle quelle, ça évite une requête pour rien
if ($remplacer)


Spip-zone-commit@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone-commit

Le 09.04.2009 18:30, Cédric Morin a écrit :

table_objet($type_objet)
sera beaucoup mieux que l'affreux
preg_replace('/^spip_/i', '', table_objet_sql($type_objet))

Si seulement c'était vrai.
table_objet('article') donne 'articles' => spip_mots_articles existe
table_objet('forum') donne 'forums' => spip_mots_forums n'existe pas

C'est marqué clairement dans le code même de SPIP (de table_objet) que c'est pourri ("hum hum") et que seul table_objet_sql('forum') permet de retomber sur 'spip_forum' sans s.

Donc faudrait savoir.
Moi je ne demande que ça d'utiliser une fonction qui marche sans exception, pérenne, etc, hein.

Pour que ça marche avec ce cas bizarre des forums, je ne vois pas quoi faire d'autre.

Pour ça :

Il faut te reposer sur la présence de la declaration dans tables_jointures, pas sur le nom de la table qui y est declaree.

Tu veux dire qu'il faut que je fasse le contraire donc : est-ce qu'il existe 'mots' dans $table_jointures[table_objet_sql($type_objet)] ?

Je suis d'accord.
Mais ça ne résout pas le problème précédent lorsque (pour l'instant) je dois faire mes requêtes sur les tables 'spip_mots_TRUC'.

--
RastaPopoulos