08/09/2011, 16:16:44
Ayant cherché un peu partout comment indexer et rechercher des données via le module Search en dehors du contenu du CMS, je pense que ce post pourra intéresser.
Donc pour résumer, j'ai une table Mysql qui contient un catalogue produit réalisé hors CMSMS que je souhaite indexer et dont je veux voir afficher les résultats lors d'une recherche.
Exemple, ma table s'appelle "produits", possède entre autre une colonne "plante" et un enregistrement de cette table a comme valeur de plante "cacao du Brésil". Je souhaite que lorsque l'internaute saisisse "cacao", il obtienne non seulement des résultats pointant vers les articles du CMS mais obtienne aussi un lien vers la fiche produit qui contient le mot "cacao".
Pour arriver à mes fins, j'ai ajouté 2 portions de codes dans 2 fichiers différents du dossier /modules/Search (cmsms1.6.7)
1/ Partie Indexation, fichier search.tools.php - à la dernière ligne de la fonction search_Reindex(&$module)
en gros, on parcourt la table et on ajoute ligne par ligne, un identifiant du produit, tout le texte à indexer ainsi qu'un marqueur constant (cataproduit)
2/ Partie recherche, fichier action.dosearch.php - dans la boucle d'ajout de résultats à la collection while ($result && !$result->EOF) on ajoute un bloc elseif :
les blocs elseif servant à ajouter des cas en fonction de la provenance, on greffe le notre qui ajoutera à la collection les résultats du catalogue produit externe au CMS. A noter que AddItem() permet de stocker à la fois la variable à utiliser mais aussi l'url d'accès à la ressource. Cette url est bien entendue personnalisée puisqu'elle est censée affichée une fiche produit en dehors de CMSMS.
Si vous avez une problématique connexe, sachez que je me suis inspiré du travail de snyderp http://forum.cmsmadesimple.org/viewtopic.php?t=33025 qui présente une méthode similaire mais appliquée à un module maison.
Donc pour résumer, j'ai une table Mysql qui contient un catalogue produit réalisé hors CMSMS que je souhaite indexer et dont je veux voir afficher les résultats lors d'une recherche.
Exemple, ma table s'appelle "produits", possède entre autre une colonne "plante" et un enregistrement de cette table a comme valeur de plante "cacao du Brésil". Je souhaite que lorsque l'internaute saisisse "cacao", il obtienne non seulement des résultats pointant vers les articles du CMS mais obtienne aussi un lien vers la fiche produit qui contient le mot "cacao".
Pour arriver à mes fins, j'ai ajouté 2 portions de codes dans 2 fichiers différents du dossier /modules/Search (cmsms1.6.7)
1/ Partie Indexation, fichier search.tools.php - à la dernière ligne de la fonction search_Reindex(&$module)
Code :
$sql_produit = "SELECT * FROM produits";
$produit = mysql_query($sql_produit);
while ($la_ligne_produit = mysql_fetch_array($produit)) {
$texte_pour_indexation = $la_ligne_produit["nom"].$la_ligne_produit["nom_latin"].$la_ligne_produit["plante"].$la_ligne_produit["indication"].$la_ligne_produit["descriptif"].$la_ligne_produit["histoire"];
$module->AddWords('Search', $la_ligne_produit['id_produit'], 'cataproduit', $texte_pour_indexation, NULL);
}
en gros, on parcourt la table et on ajoute ligne par ligne, un identifiant du produit, tout le texte à indexer ainsi qu'un marqueur constant (cataproduit)
2/ Partie recherche, fichier action.dosearch.php - dans la boucle d'ajout de résultats à la collection while ($result && !$result->EOF) on ajoute un bloc elseif :
Code :
else if ($result->fields['extra_attr'] == 'cataproduit') {
$id_produit = $result->fields['content_id'];
$sql_recherche_produit = "SELECT * FROM arko_produits WHERE id_produit=".$id_produit;
$recherche_produit = mysql_query($sql_recherche_produit);
$la_ligne_recherche_produit = mysql_fetch_array($recherche_produit);
$lurl = '/index.php?page=produit&id_produit='.$id_produit;
$col->AddItem($la_ligne_recherche_produit['nom'], $lurl, 'product file', $result->fields['total_weight']);
}
les blocs elseif servant à ajouter des cas en fonction de la provenance, on greffe le notre qui ajoutera à la collection les résultats du catalogue produit externe au CMS. A noter que AddItem() permet de stocker à la fois la variable à utiliser mais aussi l'url d'accès à la ressource. Cette url est bien entendue personnalisée puisqu'elle est censée affichée une fiche produit en dehors de CMSMS.
Si vous avez une problématique connexe, sachez que je me suis inspiré du travail de snyderp http://forum.cmsmadesimple.org/viewtopic.php?t=33025 qui présente une méthode similaire mais appliquée à un module maison.