[spip-dev] spip 1.9 et tables perso

Je suis en train de m'arracher les cheveux sur une boucle perso.
  Ça marche nickel en 1.8.2 mais pas en 1.9, et je ne comprend plus rien
à ce qu'on doit avoir dans tables_principales si on veut forcer la
déclaration.

  Le but du jeu c'est de faire une boucle permettant d'itérer sur un
tableau (http://www.spip-contrib.net/ecrire/articles.php3?id_article=1131)
  Comme il n'y a pas de table associée, il faut forcer la déclaration, donc :

$tableau = array(
  "var" => "varchar(100)",
  "cle" => "varchar(100)",
  "valeur" => "varchar(100)"
);
$tableau_key = array(
  "PRIMARY KEY" => "cle"
);
$GLOBALS['tables_principales']['tableau'] =
  array('field' => &$tableau, 'key' => &$tableau_key);

  Mais, soit je met 'spip_tableau' et il ne trouve plus les #CLE et #VALEUR,
soit je met 'tableau' et j'ai une erreur ligne 535 de inc-criteres
(sur le «if (!array_key_exists($col, $desc['field']))» quand il analyse
le critere {var=...} (mais le résultat obtenu est correct !)
  Cette même écriture marche nickel en 1.8.2

  Dans trouver_def_table, si j'ajoute
if ($desc = $tables_principales[$nom])
    return array($nom, $desc);
  juste après le
if ($desc = $tables_principales['spip_' . $nom])
    return array('spip_' . $nom, $desc);
  ça marche nickel, mais est-ce que ça pose un problème ailleurs dans ce cas ?
Le mail d'annonce de cette évolution avait l'air de dire qu'il fallait utiliser
une notation spip_.., doit bien y avoir une raison ???

  Help :frowning: (je sais, j'l'ai déjà faite hier soir celle là ...)

Salut,

Avec SPIP 1.9 alpha il n'est plus n'écessaire de déclarer les tables. SPIP les reconnait tout seul.
http://listes.rezo.net/archives/spip-core/2005-08/msg00005.html

Voir aussi ici pour les jointure de table:
http://listes.rezo.net/archives/spip-core/2005-08/msg00006.html

Pierre

pif a écrit :

Je ne garantis pas que le code marche pour une boucle non servie par SQL,
mais il me semble que tu as oublié aussi ça:

$GLOBALS['table_des_tables']['tableau'] = 'tableau';

Déesse A.

J'avais tenté quelques variantes autour de ça, mais sans succès.
  Je viens de reprendre ça (le ventre plein ça va mieux), et
effectivement, cette combinaison marche :
$GLOBALS['tables_principales']['spip_tableau'] =
  array('field' => &$tableau, 'key' => &$tableau_key);
$GLOBALS['table_des_tables']['tableau'] = 'tableau';

  C'est quand même pas très intuitif :slight_smile:

  Merci bien pour le tuyau !