[SPIP Zone] ajouter une table externe aux critères de recherche

Bonjour
j'essaie de rajouter des champs au critère "recherche" cela fonctionne très bien
pour les tables de spip auxquelles j'ai rajouté des champs.
Comment faire pour rajouter des champs de tables supplémentaires à ce critère de
recherche? Mes essais ne fonctionnent pas en utilisant le pipe line.
ma fonction rajoutée au pipeline "rechercher_liste_des_champs"
est

function ajouter_champs($tables)
{
$tables['breve']['blocnotes']=1;

$tables['action']['titre']=1;
return $tables;
}

cela fonctionne pour le champ blocnotes rajouté à la table brèves, mais rien ne
marche pour le champ titre de la table action....

Merci aux différents tutos que j'ai utilisés surtout celui-ci

http://programmer.spip.org/rechercher_liste_des_champs

donc a Matthieu

Cordialement
MJ

Le 11/04/2009 10:25, Michel JORDA a écrit :

j'essaie de rajouter des champs au critère "recherche" cela fonctionne très
cela fonctionne pour le champ blocnotes rajouté à la table brèves, mais rien ne
marche pour le champ titre de la table action....

Ben si, c'est bien dans les deux pipelines dédiés à la recherche qu'il faut mettre ça. J'ai pas mal de tables supplémentaires et ça marche direct.
Peut-être y a-t-il un problème avec la déclaration de tes tables ?

--
RastaPopoulos

RastaPopoulos a écrit :

Le 11/04/2009 10:25, Michel JORDA a écrit :

j'essaie de rajouter des champs au critère "recherche" cela fonctionne très
cela fonctionne pour le champ blocnotes rajouté à la table brèves, mais rien ne
marche pour le champ titre de la table action....

Ben si, c'est bien dans les deux pipelines dédiés à la recherche qu'il faut mettre ça. J'ai pas mal de tables supplémentaires et ça marche direct.
Peut-être y a-t-il un problème avec la déclaration de tes tables ?

il a été dit par exemple
qu'il faut un index sur les tables pour que ça marche...

JL

JLuc <jluc <at> no-log.org> writes:

RastaPopoulos a écrit :
> Le 11/04/2009 10:25, Michel JORDA a écrit :
>> j'essaie de rajouter des champs au critère "recherche" cela fonctionne
>> très
>> cela fonctionne pour le champ blocnotes rajouté à la table brèves,
>> mais rien ne
>> marche pour le champ titre de la table action....
>
> Ben si, c'est bien dans les deux pipelines dédiés à la recherche qu'il
> faut mettre ça. J'ai pas mal de tables supplémentaires et ça marche direct.
> Peut-être y a-t-il un problème avec la déclaration de tes tables ?

il a été dit par exemple
qu'il faut un index sur les tables pour que ça marche...

JL

la table a bien un index (biensur)...

La surprise est dans les PLURIELS: SPIP doit rajouter ou enlever des S aux noms
des tables dans une logique que je n'ai pas bien comprise.

ma table s'appelle "clients_actionS" (AVEC un "S")

il faut déclarer dans le pipeline de recherche (rechercher_liste_des_champs)

$tables[client_action][titre]=1; (SANS le "S")

je ne sais d'ou cela provient....
si je change le nom de la table, je retrouve une insulte dans le mysql.log.

bizarrement, la BOUCLE doit être
<BOUCLE0(CLIENT_ACTIONS)> <!-- AVEC le "S" -->

un bug/feature qui vient des changements de noms "ARTICLE"/"ARTICLES" dans le
nommage de spip ? Déclarer la table, avec ou sans S dans les tables principales,
ne change rien.

en tout cas, difficile à tracer.

Merci à toute l'équipe (je me suis servi des tutos, des pipelines, des logs, et
du debug php "a la mano" dans rechercher.php.... ouf)

Michel

Le 12 avr. 09 à 01:44, Michel JORDA a écrit :

JLuc <jluc <at> no-log.org> writes:

RastaPopoulos a écrit :

Le 11/04/2009 10:25, Michel JORDA a écrit :

j'essaie de rajouter des champs au critère "recherche" cela fonctionne
très
cela fonctionne pour le champ blocnotes rajouté à la table brèves,
mais rien ne
marche pour le champ titre de la table action....

Ben si, c'est bien dans les deux pipelines dédiés à la recherche qu'il
faut mettre ça. J'ai pas mal de tables supplémentaires et ça marche direct.
Peut-être y a-t-il un problème avec la déclaration de tes tables ?

il a été dit par exemple
qu'il faut un index sur les tables pour que ça marche...

JL

la table a bien un index (biensur)...

La surprise est dans les PLURIELS: SPIP doit rajouter ou enlever des S aux noms
des tables dans une logique que je n'ai pas bien comprise.

ma table s'appelle "clients_actionS" (AVEC un "S")

il faut déclarer dans le pipeline de recherche (rechercher_liste_des_champs)

$tables[client_action][titre]=1; (SANS le "S")

oui mais le clientS/client te joue le tour

essaye [clients_action]

Claude

je ne sais d'ou cela provient....
si je change le nom de la table, je retrouve une insulte dans le mysql.log.

bizarrement, la BOUCLE doit être
<BOUCLE0(CLIENT_ACTIONS)> <!-- AVEC le "S" -->

un bug/feature qui vient des changements de noms "ARTICLE"/"ARTICLES" dans le
nommage de spip ? Déclarer la table, avec ou sans S dans les tables principales,
ne change rien.

en tout cas, difficile à tracer.

Merci à toute l'équipe (je me suis servi des tutos, des pipelines, des logs, et
du debug php "a la mano" dans rechercher.php.... ouf)

Michel

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

dlatr <claude.delattre <at> laposte.net> writes:

> il faut déclarer dans le pipeline de recherche
> (rechercher_liste_des_champs)
>
> $tables[client_action][titre]=1; (SANS le "S")

oui mais le clientS/client te joue le tour

essaye [clients_action]

Claude

Bien vu claude,
c'était juste une fôte de frappe....
ca marche presque parfaitement avec [clients_action]

Michel JORDA a écrit :

il faut déclarer dans le pipeline de recherche (rechercher_liste_des_champs)
$tables[clients_action][titre]=1; (SANS le "S")

> Merci à toute l'équipe (je me suis servi des tutos, des pipelines, des logs, et
> du debug php "a la mano" dans rechercher.php.... ouf)

Bravo pour ton enquête !!!!!
(mais sais-tu aussi comment ça se passe si il n'y a pas de s
à la fin du nom de la table ?)

Et est-ce que quelqu'un sait ce qu'est devenu la page
http://www.spip-contrib.net/Sauvegarder-les-tables-d-un-plugin
?

JLuc

Bonjour,

Je suis un peu long à la détente. Mais est-ce que quelqu'un pourrais me
fournir un exemple de code complet de ce pipeline car je suis très intéressé
par appliquer la recherche sur d'autres tables.

Merci d'avance.

Xavier

-----Message d'origine-----
De : JLuc [mailto:jluc@no-log.org]
Envoyé : dimanche 12 avril 2009 10:07
À : spip-zone@rezo.net
Objet : Re: [SPIP Zone] ajouter une table externe aux critères de
recherche[RESOLU]

Michel JORDA a écrit :

il faut déclarer dans le pipeline de recherche

(rechercher_liste_des_champs)

$tables[clients_action][titre]=1; (SANS le "S")

> Merci à toute l'équipe (je me suis servi des tutos, des pipelines, des
logs, et
> du debug php "a la mano" dans rechercher.php.... ouf)

Bravo pour ton enquête !!!!!
(mais sais-tu aussi comment ça se passe si il n'y a pas de s
à la fin du nom de la table ?)

Et est-ce que quelqu'un sait ce qu'est devenu la page
http://www.spip-contrib.net/Sauvegarder-les-tables-d-un-plugin
?

JLuc

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

Le 12 avr. 09 à 12:55, Xébiaut a écrit :

Bonjour,

Je suis un peu long à la détente. Mais est-ce que quelqu'un pourrais me
fournir un exemple de code complet de ce pipeline car je suis très intéressé
par appliquer la recherche sur d'autres tables.

http://programmer.spip.org/Prendre-en-compte-un-nouveau-champ

-----Message d'origine-----
De : JLuc [mailto:jluc@no-log.org]
Envoyé : dimanche 12 avril 2009 10:07
À : spip-zone@rezo.net
Objet : Re: [SPIP Zone] ajouter une table externe aux critères de
recherche[RESOLU]

Michel JORDA a écrit :

il faut déclarer dans le pipeline de recherche

(rechercher_liste_des_champs)

$tables[clients_action][titre]=1; (SANS le "S")
Merci à toute l'équipe (je me suis servi des tutos, des pipelines, des

logs, et

du debug php "a la mano" dans rechercher.php.... ouf)

Bravo pour ton enquête !!!!!
(mais sais-tu aussi comment ça se passe si il n'y a pas de s
à la fin du nom de la table ?)

http://programmer.spip.org/declarer_tables_objets_surnoms

JLuc <jluc <at> no-log.org> writes:

Bravo pour ton enquête !!!!!
(mais sais-tu aussi comment ça se passe si il n'y a pas de s
à la fin du nom de la table ?)

JLuc

Ah eh bien c'est très simple, après quelques heures de tracage et de debugage,

ma conclusion est que les tables doivent TOUJOURS avoir un "S" à la fin, sinon

le pipeline rechercher_liste_des_champs les rajoute.
Je n'ai pas compris pourquoi (bien sur) et je n'ai pas cherché plus longuement

où cela se passait, mais le mysql.log est explicite avec "table xxxxS does'ent

exists".
J'ai du donc rajouter systématiquement un "S" à tous les noms de tables, et les

déclarer sans "S".
Mais peut-être les vrais développeurs seraient plus savants que moi sur le sujet.

JLuc <jluc@no-log.org> a écrit :

Et est-ce que quelqu'un sait ce qu'est devenu la
page
http://www.spip-contrib.net/Sauvegarder-les-tables-d-un-plugin
?

dépublié pour cause de doublonnage avec doc.spip.org (?) cf SPIP-Contrib
Il semblerait que son contenu ait été intégré ici: http://doc.spip.org/@La-base-de-donnees,4391

à bientôt

Pierre Fiches <pierre.fiches <at> free.fr> writes:

Le 12 avr. 09 à 12:55, Xébiaut a écrit :

> Bonjour,
>
> Je suis un peu long à la détente. Mais est-ce que quelqu'un pourrais
> me
> fournir un exemple de code complet de ce pipeline car je suis très
> intéressé
> par appliquer la recherche sur d'autres tables.
>
>

http://programmer.spip.org/Prendre-en-compte-un-nouveau-champ

Très bon tuto, un peu "rapide" à mon gout mais très utilisable (merci a mathieu).

Application chez moi (dans mes_options.php, qui doit être dans le dossier
/config). J'ai mis "1" pour chaque poids car pour le moment je n'ai pas de
besoin particulier.

A NOTER TOUS LES NOMS DE TABLE AU SINGULIER ("breve" pour la table
"spip_breves", "clients_action" pour la table "clients_actions"...)

<?php
$GLOBALS['spip_pipeline']['rechercher_liste_des_champs'] .="|mes_champs";

function mes_champs($tables)
{

  $tables['breve']['ville']=1;
  $tables['breve']['apcomm']=1;
  $tables['breve']['societe']=1;
  $tables['breve']['prenom']=1;
  $tables['breve']['blocnotes']=1;

  $tables['clients_action']['titre']=1;
  $tables['clients_action']['commentaire']=1;
  
  $tables['clients_approche']['type']=1;
  $tables['clients_approche']['commentaire']=1;
  
  $tables['clients_contact']['nom_contact']=1;
  $tables['clients_contact']['prenom_contact']=1;
  $tables['clients_contact']['poste']=1;
  $tables['clients_contact']['tel_contact']=1;
  $tables['clients_contact']['mail_contact']=1;
  $tables['clients_contact']['adresse']=1;
  $tables['clients_contact']['CP']=1;
  $tables['clients_contact']['commune']=1;
  $tables['clients_contact']['commentaire']=1;

  $tables['clients_moyen']['type']=1;
  
  $tables['contact_adr']['adresse']=1;
  
  $tables['chq']['ref_client']=1;
  $tables['chq']['ref_comm']=1;
  
return $tables;
}
?>

Michel Jorda a écrit :

JLuc <jluc <at> no-log.org> writes:
ma conclusion est que les tables doivent TOUJOURS avoir un "S" à la fin, sinon le pipeline rechercher_liste_des_champs les rajoute.
Mais peut-être les vrais développeurs seraient plus savants que moi sur le sujet.

Ou peut-être ils préfèreront la discrétion ? :wink: !
En tout cas j'ai mis à jour la doc

JL

Michel Jorda a écrit :

Ah eh bien c'est très simple, après quelques heures de tracage et de debugage,
ma conclusion est que les tables doivent TOUJOURS avoir un "S" à la fin, sinon
le pipeline rechercher_liste_des_champs les rajoute.
Je n'ai pas compris pourquoi (bien sur) et je n'ai pas cherché plus longuement où cela se passait, mais le mysql.log est explicite avec "table xxxxS does'ent
exists".
J'ai du donc rajouter systématiquement un "S" à tous les noms de tables, et les déclarer sans "S".

Peut être aurais tu t'en passer en déclarant les surnoms des tables :
http://programmer.spip.org/declarer_tables_objets_surnoms
?
JL

Le 14/04/2009 09:49, JLuc a écrit :

Peut être aurais tu t'en passer en déclarant les surnoms des tables :
http://programmer.spip.org/declarer_tables_objets_surnoms
?
JL

Malheureusement non. Ce qu'on déclare dans le pipeline des recherches ne prend pas en compte les surnoms.

J'ai par exemple une table qui se termine par "cas" (un cas, des cas). Ce qui est embêtant c'est que là c'est le singulier qui est particulier (contrairement à jeu/jeux). Or le pipeline des surnoms sert surtout à déclarer des pluriels bizarres.

Bref, pour les recherches j'ai dû déclarer : $tableau['ca'].

Oui c'est moche.
Mais ça marche.

--
RastaPopoulos

Le 14 avr. 09 à 11:11, RastaPopoulos a écrit :

Le 14/04/2009 09:49, JLuc a écrit :

Peut être aurais tu t'en passer en déclarant les surnoms des tables :
http://programmer.spip.org/declarer_tables_objets_surnoms
?
JL

Malheureusement non. Ce qu'on déclare dans le pipeline des recherches ne prend pas en compte les surnoms.

faut proposer un patch au lieu de contourner !
Cédric

Le 14/04/2009 12:06, cedric.morin@yterium.com a écrit :

faut proposer un patch au lieu de contourner !
Cédric

Déjà, ligne 50 de inc/prepare_recherche.php :
- $x = preg_replace(',s$,', '', $table); // eurk
+ $x = objet_type($table);

Ça il faut le faire de toute façon.

Mais ça ne résout pas le problème des singuliers bizarres. C'est-à-dire la recherche de correspondance dans le sens : table (pluriel) ou surnom de boucle (pluriel) vers surnom singulier.

Car dans SPIP il y a TROIS choses :

- Le nom de la table qui est au pluriel : spip_articles, spip_forum, spip_syndic

- Le surnom de boucle qui est au pluriel et qui n'est pas forcément le même que celui de la table (principe du surnom) : ARTICLES, FORUMS, SITES

- Le surnom au singulier qui est le "type" de l'objet : article, forum, site

Si je déclare un singulier/pluriel bizarre dans le pipeline : ici truc_cas => truc_cas qui est identique au singulier et au pluriel. Et bien c'est comme si je n'avais rien déclaré, ça fait le même résultat.

- En faisant table_objet("truc_cas") ça donnera bien le pluriel "truc_cas"
- Mais en faisant table_objet("truc_ca") aussi
- Ce qui fait que objet_type("truc_cas") va demander table_objet("truc_ca") et va obtenir un truc cohérent donc ne va pas aller chercher la clé primaire qui est la deuxième étape lorsque ça ne marche pas.

Je m'y perds un peu.

--
RastaPopoulos