{{{L'API inc/rechercher}}}
Avec cette API SPIP dispose de trois fonctions :
-- <code>liste_des_tables()</code> indique la liste standard des
tables et des champs dans lesquels on peut faire une recherche
textuelle.
-- <code>recherche_en_base($recherche)</code> retourne la liste des
objets dont l'un des champs "matche" la recherche (au sens de
preg_match).
Cette liste est sous la forme d'un tableau de tableaux, listant, pour
chaque type d'objets, les objets concernés (avec leur id et les champs
concernés, ceux qui ont un "match").
<code>
recherche_en_base('toto') =>
array (
'article' => array (
123 => array (
id_article => 123,
texte => 'toto...'
),
125 => etc,
'rubrique' => array (
12 => array (
id_rubrique => 12
descriptif => 'Rubrique toto'
)
)
)
</code>
On peut passer comme deuxième paramètre un array correspondant à
<code>liste_des_tables()</code> : soit pour faire une recherche dans
un champ non standard, soit pour ajouter un type de table, soit pour
retirer un type de table.
Par exemple pour chercher partout sauf dans les documents et forums :
<code>
$tables = liste_des_tables();
unset($tables['document']);
unset($tables['forum']);
recherche_en_base('toto', $tables);
</code>
Le troisième paramètre est un tableau d'options.
- toutvoir pour eviter autoriser(voir)
- flags pour eviter les flags regexp par defaut (UimsS)
Exemple :
<code>
recherche_en_base('A.*B', NULL, array('toutvoir'=>true, 'flags'=>'UmsS');
</code>
-- <code>remplace_en_base($recherche, $remplace)</code> permet de
faire un preg_replace() général sur l'ensemble de la base. Il utilise
recherche_en_base puis, pour chaque objet « matché », effectue le
preg_replace() correspondant, et réinjecte le tout dans la base de
données en utilisant l'API <code>inc/modifier</code>.
Exemple : chercher "toto" et remplacer par "tata" :
<code>
var_dump(recherche_en_base('toto'));
remplace_en_base('toto', 'tata');
var_dump(recherche_en_base('tata'));
</code>
Son troisième est la liste des tables et champs concernés.
Son quatrième paramètre correspond aux options de recherche_en_base(),
avec, en plus, l'option 'toutmodifier' pour éviter
autoriser(modifier).
{{Attention}} ces fonctions peuvent être relativement lentes.
