Salut,
si vous avez un peu de temps aujourd’hui, vous pourriez en consacrer un peu pour la bonne cause.
J’ai modifié le snippet ajaxsearch pour étendre la recherche aux contenu des TVs.
Bizarrement cela n’a pas été trop difficile aussi j’aurai besoin de testeurs pour confirmer le bon fonctionnement.
J’ai testé chez moi et cela marche plutot bien.
Toutefois notez que si votre base est encodée en UTF-8 la question des caractères accentués n’est pas résolue.
(gerard comme terme de recherche ne retourne pas gérard par exemple)
tout ce que vous avez à faire c’est ouvrir le fichier AjaxSearch.inc.php dans /assets/snippets/AjaxSearch/
et remplacer la fonction doSearch par celle ci
<?php
function doSearch($searchString,$searchStyle,$useAllWords,$ajaxSearch,$docgrp) {
if ($ajaxSearch) {
$table_prefix = connectForAjax();
} else {
global $modx;
}
$search = explode(" ", $searchString);
if ($ajaxSearch) {
$tbl_sc = $table_prefix . "site_content";
$tbl_stc = $table_prefix . "site_tmplvar_contentvalues";//helio
$tbl_dg = $table_prefix . "document_groups";
} else {
$tbl_sc = $modx->dbConfig['dbase'] . "." . $modx->dbConfig['table_prefix'] . "site_content";
$tbl_stc = $modx->dbConfig['dbase'] . "." . $modx->dbConfig['table_prefix'] . "site_tmplvar_contentvalues";//helio
$tbl_dg = $modx->dbConfig['dbase'] . "." . $modx->dbConfig['table_prefix'] . "document_groups";
}
if ($docgrp) {
$tbl_sql = " LEFT JOIN $tbl_stc stc ON sc.id = stc.contentid ";//helio
$tbl_sql .= " LEFT JOIN $tbl_dg dg ON sc.id = dg.document";
$qry_sql = "(ISNULL(dg.document_group) OR dg.document_group IN ($docgrp)) AND ";
} else {
$tbl_sql = " LEFT JOIN $tbl_stc stc ON sc.id = stc.contentid ";//helio
$qry_sql = "sc.privateweb = 0 AND ";
}
if ($searchStyle == 'partial'){
$sql = "SELECT DISTINCT sc.id, sc.pagetitle, sc.description, sc.content ";
$sql .= "FROM $tbl_sc sc" . $tbl_sql . " WHERE ";
if (count($search)>1 && $useAllWords){
foreach ($search as $searchTerm){//helio
$sql .= "(sc.pagetitle LIKE '%$".$searchString."%' OR sc.description LIKE '%$searchString%' OR sc.content LIKE '%$searchTerm%' OR stc.value LIKE '%$searchTerm%') AND ";
// $sql .= "(sc.pagetitle LIKE '%$".$searchString."%' OR sc.description LIKE '%$searchString%' OR sc.content LIKE '%$searchTerm%') AND ";
}
} else {
$sql .= "(sc.pagetitle LIKE '%$searchString%' OR sc.description LIKE '%$searchString%' OR sc.content LIKE '%$searchString%' OR stc.value LIKE '%$searchString%') AND ";
//$sql .= "(sc.pagetitle LIKE '%$searchString%' OR sc.description LIKE '%$searchString%' OR sc.content LIKE '%$searchString%') AND ";
}
$sql .= $qry_sql . "sc.published = 1 AND sc.searchable=1 AND sc.deleted=0;";
} else {
$sql = "SELECT DISTINCT sc.id, sc.pagetitle, sc.description, sc.content ";
$sql .= "FROM $tbl_sc" . $tbl_sql . " sc WHERE ";
if (count($search)>1 && $useAllWords){
foreach ($search as $searchTerm){
//$sql .= "MATCH (sc.pagetitle, sc.longtitle, sc.introtext, sc.description, sc.content) AGAINST ('$searchTerm') AND ";
$sql .= "MATCH (sc.pagetitle, sc.longtitle, sc.introtext, sc.description, sc.content, stc.value) AGAINST ('$searchTerm') AND ";
}
} else {
//$sql .= "MATCH (sc.pagetitle, sc.longtitle, sc.introtext, sc.description, sc.content) AGAINST ('$searchString') AND ";
$sql .= "MATCH (sc.pagetitle, sc.longtitle, sc.introtext, sc.description, sc.content, stc.value) AGAINST ('$searchString') AND ";
}
$sql .= $qry_sql . "sc.published = 1 AND sc.searchable=1 AND sc.deleted=0;";
}
if ($ajaxSearch) {
$rs = mysql_query($sql) or die ("Cannot query the database ($sql)");
} else {
$rs = $modx->dbQuery($sql);
}
return $rs;
}
Merci à ceux qui testent
:-)