Jump to content

Edit History

SITOLOG - F Bugnet

SITOLOG - F Bugnet

Bonjour,

Cet article de 2015 est encore d'actualité, je viens d’implémenter cette modif sur un site en 1.6.1.24 pour proposer une base de connaissance. Merci pour  Web-M.

Dans un soucis de partage, si vous souhaitez que la recherche s'effectue aussi dans le contenu des catégories CMS, voici ce qu'il faut modifier au code proposé par Web-M :

1/dans l'override du Searchcontroller, il faut exécuter deux fois la fonction searchCMS, avec un paramètre de plus ("cms" ou "cms_catgory), et retourner deux tableaux de résultats comme ceci :

public function process()
	{
		parent::process();
		$search_query_faq = Tools::getValue('search_query_faq');

		if($search_query_faq){
			$this->n = abs((int)(Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE'))));
			$this->p = abs((int)(Tools::getValue('p', 1)));
			
			$result_cms = Search::searchCMS((int)(self::$cookie->id_lang), $search_query_faq, "cms",false,	 $this->p, $this->n, 'position', 'desc');	
			$nb_result_cms = ($result_cms) ? count($result_cms) : 0;
			
			$result_cms_category = Search::searchCMS((int)(self::$cookie->id_lang), $search_query_faq, "cms_category",false,	 $this->p, $this->n, 'position', 'desc');
			$nb_result_cms_category = ($result_cms_category) ? count($result_cms_category) : 0;
			
			//$nb_result=$nb_result_cms+$nb_result_cms_category;
			//$result=array_merge($result_cms,$result_cms_category);
				
			self::$smarty->assign(array(
				//'nb_result' => $nb_result,
				//'result' => $result,
				'nb_result_cms' => $nb_result_cms,
				'result_cms' => $result_cms,
				'nb_result_cms_category' => $nb_result_cms_category,
				'result_cms_category' => $result_cms_category,
			));
		}
	 
	}

 

Pour le Search.PHP, il faut modifier le code pour traiter ce paramètre supplémentaire et selon sa valeur, chercher dans les tables cms ou cms_category. On aurait pu faire deux routines par copier coller, j'ai préféré paramétrer le code avec la variable $table dans la requete sql, qui vaut soit cms, soit cms_category.

A noter que j'ai également modifié ce code pour rechercher non seulement dans le champ "content" (ou "description" pour les catégories, mais également dans les champs "name" et "summary", des champs que j'ai ajouté aux 2 classes. Re-simplifiez le code si vous n'avez pas ces champs :

<?php

class Search extends SearchCore
{
	public static function searchCMS($id_lang, $query, $table, $count = false, $pageNumber = 0, $pageSize = 10, $orderBy = false, $orderWay = false)
	{
		 global $cookie;

		if (!is_numeric($pageNumber) OR !is_numeric($pageSize) OR !Validate::isBool($count) OR !Validate::isValidSearch($query)
		OR $orderBy AND !$orderWay OR ($orderBy AND !Validate::isOrderBy($orderBy))	OR ($orderWay AND !Validate::isOrderBy($orderWay)))
			return false;

		if ($pageNumber < 1) $pageNumber = 1;
		if ($pageSize < 1) $pageSize = 10;

		$words = explode(" ", $query);
		$where = '
		WHERE cms.`active` = 1
		AND l.id_lang = '.(int)($id_lang).'
		 AND ((1=1 ';
		reset($words);
		if($table=="cms_category"){
			while(list($key, $data) = each($words))
			{
				$where .= " AND l.`description` LIKE '%" . pSQL($data) . "%' ";  
			}
		}
		else
		{
			while(list($key, $data) = each($words))
			{
				$where .= " AND l.`content` LIKE '%" . pSQL($data) . "%' ";  
			}
		}
		reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`summary` LIKE '%" . pSQL($data) . "%' ";  
		}
		reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`meta_keywords` LIKE '%" . pSQL($data) . "%' ";  
		}
		reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`name` LIKE '%" . pSQL($data) . "%' ";  
		}
		$where .= "))";
		
		$search_query='
		SELECT DISTINCT cms.*, l.*
		FROM `'._DB_PREFIX_.$table.'` cms
		JOIN `'._DB_PREFIX_.$table.'_lang` l ON (cms.id_'.$table.' = l.id_'.$table.')'.$where.'
		ORDER BY position DESC'.($orderBy ? ', '.$orderBy : '').($orderWay ? ' '.$orderWay : '').'
		LIMIT '.(int)(($pageNumber - 1) * $pageSize).','.(int)$pageSize;
		
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($search_query);
		
		
		if (!$result) return false;

		return $result;
	}
	
	
}

?>

 

Et enfin, au niveau du theme (tpl), il faut mettre deux blocs d'affichages, un pour les produits trouvés un autre pour les catégories :

<form id="searchboxfaq" action="#" method="post">
			<p>
				<label for="search_query_faq">{l s='Rechercher dans la FAQ'}</label>
			</p>
			<div style="clear:both;"></div>
			<p>
				<input type="hidden" value="position" name="orderby">
				<input type="hidden" value="desc" name="orderway">
				<input id="search_query_faq" class="search_query ac_input" type="text" value="" name="search_query_faq" autocomplete="off">
				<input class="button" type="submit" value="Rechercher" name="submit_search_faq">
			</p>
		</form>

		{if isset($nb_result_cms_category)}

			{if $nb_result_cms_category > 0}
				<p>{$nb_result_cms_category} {l s='category(ies) found.'}</p>
				<ul class="bullet">
					{foreach from=$result_cms_category item=cmscategory}
						<li>
							<a href="{$link->getCMSCategoryLink($cmscategory.id_cms_category, $cmscategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$cmscategory.name|escape:'htmlall':'UTF-8'}</a>
						</li>
					{/foreach}
				</ul>
			{else}
				<p>{l s='We found no category matching your query'}</p>
			{/if}
		{/if}
		{if isset($nb_result_cms)}

			{if $nb_result_cms > 0}
				<p>{$nb_result_cms} {l s='article(s) found.'}</p>
				<ul class="bullet">
					{foreach from=$result_cms item=cmspage}
						<li>
							<a href="{$link->getCMSLink($cmspage.id_cms, $cmspage.link_rewrite)|escape:'htmlall':'UTF-8'}">{$cmspage.name|escape:'htmlall':'UTF-8'}</a>
						</li>
					{/foreach}
				</ul>
			{else}
				<p>{l s='We found no article matching your query'}</p>
			{/if}
		{/if}

Ce qui donne qcq chose comme cela (il faudra adapter le CSS), car c'est moche en l'état, mais ça fonctionne :

image.png.ae29c3bcfa402aa55a06d2df98e84188.png

 

Bon codage...

Crdlt

Franck

SITOLOG - F Bugnet

SITOLOG - F Bugnet

Bonjour,

Cet article de 2015 est encore d'actualité, je viens d’implémenter cette modif sur un site en 1.6.1.24 pour proposer une base de connaissance. Merci pour  Web-M.

Dans un soucis de partage, si vous souhaitez que la recherche s'effectue aussi dans le contenu des catégories CMS, voici ce qu'il faut modifier au code proposé par Web-M :

1/dans l'override du Searchcontroller, il faut exécuter deux fois la fonction searchCMS, avec un paramètre de plus ("cms" ou "cms_catgory), et retourner deux tableaux de résultats comme ceci :

public function process()
	{
		parent::process();
		$search_query_faq = Tools::getValue('search_query_faq');

		if($search_query_faq){
			$this->n = abs((int)(Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE'))));
			$this->p = abs((int)(Tools::getValue('p', 1)));
			
			$result_cms = Search::searchCMS((int)(self::$cookie->id_lang), $search_query_faq, "cms",false,	 $this->p, $this->n, 'position', 'desc');	
			$nb_result_cms = ($result_cms) ? count($result_cms) : 0;
			
			$result_cms_category = Search::searchCMS((int)(self::$cookie->id_lang), $search_query_faq, "cms_category",false,	 $this->p, $this->n, 'position', 'desc');
			$nb_result_cms_category = ($result_cms_category) ? count($result_cms_category) : 0;
			
			//$nb_result=$nb_result_cms+$nb_result_cms_category;
			//$result=array_merge($result_cms,$result_cms_category);
				
			self::$smarty->assign(array(
				//'nb_result' => $nb_result,
				//'result' => $result,
				'nb_result_cms' => $nb_result_cms,
				'result_cms' => $result_cms,
				'nb_result_cms_category' => $nb_result_cms_category,
				'result_cms_category' => $result_cms_category,
			));
		}
	 
	}

 

Pour le Search.PHP, il faut modifier le code pour traiter ce paramètre supplémentaire et selon sa valeur, chercher dans les tables cms ou cms_category. On aurait pu faire deux routines par copier coller, j'ai préféré paramétrer le code avec la variable $table dans la requete sql, qui vaut soit cms, soit cms_category.

A noter que j'ai également modifié ce code pour rechercher non seulement dans le champ "content" (ou "description" pour les catégories, mais également dans les champs "name" et "summary", des champs que j'ai ajouté aux 2 classes. Re-simplifiez le code si vous n'avez pas ces champs :

<?php

class Search extends SearchCore
{
	public static function searchCMS($id_lang, $query, $table, $count = false, $pageNumber = 0, $pageSize = 10, $orderBy = false, $orderWay = false)
	{
		 global $cookie;

		if (!is_numeric($pageNumber) OR !is_numeric($pageSize) OR !Validate::isBool($count) OR !Validate::isValidSearch($query)
		OR $orderBy AND !$orderWay OR ($orderBy AND !Validate::isOrderBy($orderBy))	OR ($orderWay AND !Validate::isOrderBy($orderWay)))
			return false;

		if ($pageNumber < 1) $pageNumber = 1;
		if ($pageSize < 1) $pageSize = 10;

		$words = explode(" ", $query);
		$where = '
		WHERE cms.`active` = 1
		AND l.id_lang = '.(int)($id_lang).'
		 AND ((1=1 ';
		reset($words);
		if($table=="cms_category"){
			while(list($key, $data) = each($words))
			{
				$where .= " AND l.`description` LIKE '%" . pSQL($data) . "%' ";  
			}
		}
		else
		{
			while(list($key, $data) = each($words))
			{
				$where .= " AND l.`content` LIKE '%" . pSQL($data) . "%' ";  
			}
		}
		reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`summary` LIKE '%" . pSQL($data) . "%' ";  
		}
		reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`meta_keywords` LIKE '%" . pSQL($data) . "%' ";  
		}
		reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`name` LIKE '%" . pSQL($data) . "%' ";  
		}
		$where .= "))";
		
		$search_query='
		SELECT DISTINCT cms.*, l.*
		FROM `'._DB_PREFIX_.$table.'` cms
		JOIN `'._DB_PREFIX_.$table.'_lang` l ON (cms.id_'.$table.' = l.id_'.$table.')'.$where.'
		ORDER BY position DESC'.($orderBy ? ', '.$orderBy : '').($orderWay ? ' '.$orderWay : '').'
		LIMIT '.(int)(($pageNumber - 1) * $pageSize).','.(int)$pageSize;
		
		ppp($search_query);
		
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($search_query);
		
		
		if (!$result) return false;

		return $result;
	}
	
	
}

?>

 

Et enfin, au niveau du theme (tpl), il faut mettre deux blocs d'affichages, un pour les produits trouvés un autre pour les catégories :

<form id="searchboxfaq" action="#" method="post">
			<p>
				<label for="search_query_faq">{l s='Rechercher dans la FAQ'}</label>
			</p>
			<div style="clear:both;"></div>
			<p>
				<input type="hidden" value="position" name="orderby">
				<input type="hidden" value="desc" name="orderway">
				<input id="search_query_faq" class="search_query ac_input" type="text" value="" name="search_query_faq" autocomplete="off">
				<input class="button" type="submit" value="Rechercher" name="submit_search_faq">
			</p>
		</form>

		{if isset($nb_result_cms_category)}

			{if $nb_result_cms_category > 0}
				<p>{$nb_result_cms_category} {l s='category(ies) found.'}</p>
				<ul class="bullet">
					{foreach from=$result_cms_category item=cmscategory}
						<li>
							<a href="{$link->getCMSCategoryLink($cmscategory.id_cms_category, $cmscategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$cmscategory.name|escape:'htmlall':'UTF-8'}</a>
						</li>
					{/foreach}
				</ul>
			{else}
				<p>{l s='We found no category matching your query'}</p>
			{/if}
		{/if}
		{if isset($nb_result_cms)}

			{if $nb_result_cms > 0}
				<p>{$nb_result_cms} {l s='article(s) found.'}</p>
				<ul class="bullet">
					{foreach from=$result_cms item=cmspage}
						<li>
							<a href="{$link->getCMSLink($cmspage.id_cms, $cmspage.link_rewrite)|escape:'htmlall':'UTF-8'}">{$cmspage.name|escape:'htmlall':'UTF-8'}</a>
						</li>
					{/foreach}
				</ul>
			{else}
				<p>{l s='We found no article matching your query'}</p>
			{/if}
		{/if}

Ce qui donne qcq chose comme cela (il faudra adapter le CSS), car c'est moche en l'état, mais ça fonctionne :

image.png.ae29c3bcfa402aa55a06d2df98e84188.png

 

Bon codage...

Crdlt

Franck

SITOLOG - F Bugnet

SITOLOG - F Bugnet

Bonjour,

Cet article de 2015 est encore d'actualité, je viens d’implémenter cette modif sur un site en 1.6.1.24 pour proposer une base de connaissance. Merci pour  Web-M.

Dans un soucis de partage, si vous souhaitez que la recherche s'effectue aussi dans le contenu des catégories CMS, voici ce qu'il faut modifier au code proposé par Web-M :

1/dans l'override du Searchcontroller, il faut exécuter deux fois la fonction searchCMS, avec un paramètre de plus ("cms" ou "cms_catgory), et retourner deux tableaux de résultats comme ceci :

public function process()
	{
		parent::process();
		$search_query_faq = Tools::getValue('search_query_faq');

		if($search_query_faq){
			$this->n = abs((int)(Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE'))));
			$this->p = abs((int)(Tools::getValue('p', 1)));
			
			$result_cms = Search::searchCMS((int)(self::$cookie->id_lang), $search_query_faq, "cms",false,	 $this->p, $this->n, 'position', 'desc');	
			$nb_result_cms = ($result_cms) ? count($result_cms) : 0;
			
			$result_cms_category = Search::searchCMS((int)(self::$cookie->id_lang), $search_query_faq, "cms_category",false,	 $this->p, $this->n, 'position', 'desc');
			$nb_result_cms_category = ($result_cms_category) ? count($result_cms_category) : 0;
			
			//$nb_result=$nb_result_cms+$nb_result_cms_category;
			//$result=array_merge($result_cms,$result_cms_category);
				
			self::$smarty->assign(array(
				//'nb_result' => $nb_result,
				//'result' => $result,
				'nb_result_cms' => $nb_result_cms,
				'result_cms' => $result_cms,
				'nb_result_cms_category' => $nb_result_cms_category,
				'result_cms_category' => $result_cms_category,
			));
		}
	 
	}

 

Pour le Search.PHP, il faut modifier le code pour traiter ce paramètre supplémentaire et selon sa valeur, chercher dans les tables cms ou cms_category. On aurait pu faire deux routines par copier coller, j'ai préféré paramétrer le code avec la variable $table dans la requete sql, qui vaut soit cms, soit cms_category.

A noter que j'ai également modifié ce code pour rechercher non seulement dans le champ "content" (ou "description" pour les catégories, mais également dans les champs "name" et "summary", des champs que j'ai ajouté aux 2 classes. Re-simplifiez le code si vous n'avez pas ces champs :

class Search extends SearchCore
{
	public static function searchCMS($id_lang, $query, $table, $count = false, $pageNumber = 0, $pageSize = 10, $orderBy = false, $orderWay = false)
	{
		 global $cookie;

		if (!is_numeric($pageNumber) OR !is_numeric($pageSize) OR !Validate::isBool($count) OR !Validate::isValidSearch($query)
		OR $orderBy AND !$orderWay OR ($orderBy AND !Validate::isOrderBy($orderBy))	OR ($orderWay AND !Validate::isOrderBy($orderWay)))
			return false;

		if ($pageNumber < 1) $pageNumber = 1;
		if ($pageSize < 1) $pageSize = 10;

		$words = explode(" ", $query);
		$where = '
		WHERE cms.`active` = 1
		AND l.id_lang = '.(int)($id_lang).'
		 AND (1=1 ';
		reset($words);
		if($table=="cms_category"){
			while(list($key, $data) = each($words))
			{
				$where .= " AND l.`description` LIKE '%" . pSQL($data) . "%' ";  
			}
		}
		else
		{
			while(list($key, $data) = each($words))
			{
				$where .= " AND l.`content` LIKE '%" . pSQL($data) . "%' ";  
			}
		}
			reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`summary` LIKE '%" . pSQL($data) . "%' ";  
		}
		reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`name` LIKE '%" . pSQL($data) . "%' ";  
		}
		$where .= ")";
		
		$search_query='
		SELECT DISTINCT cms.*, l.*
		FROM `'._DB_PREFIX_.$table.'` cms
		JOIN `'._DB_PREFIX_.$table.'_lang` l ON (cms.id_'.$table.' = l.id_'.$table.')'.$where.'
		ORDER BY position DESC'.($orderBy ? ', '.$orderBy : '').($orderWay ? ' '.$orderWay : '').'
		LIMIT '.(int)(($pageNumber - 1) * $pageSize).','.(int)$pageSize;
		
		//ppp($search_query);
		
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($search_query);
		
		
		if (!$result) return false;

		return $result;
	}
	
	
}

 

Et enfin, au niveau du theme (tpl), il faut mettre deux blocs d'affichages, un pour les produits trouvés un autre pour les catégories :

<form id="searchboxfaq" action="#" method="post">
			<p>
				<label for="search_query_faq">{l s='Rechercher dans la FAQ'}</label>
			</p>
			<div style="clear:both;"></div>
			<p>
				<input type="hidden" value="position" name="orderby">
				<input type="hidden" value="desc" name="orderway">
				<input id="search_query_faq" class="search_query ac_input" type="text" value="" name="search_query_faq" autocomplete="off">
				<input class="button" type="submit" value="Rechercher" name="submit_search_faq">
			</p>
		</form>

		{if isset($nb_result_cms_category)}

			{if $nb_result_cms_category > 0}
				<p>{$nb_result_cms_category} {l s='category(ies) found.'}</p>
				<ul class="bullet">
					{foreach from=$result_cms_category item=cmscategory}
						<li>
							<a href="{$link->getCMSCategoryLink($cmscategory.id_cms_category, $cmscategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$cmscategory.name|escape:'htmlall':'UTF-8'}</a>
						</li>
					{/foreach}
				</ul>
			{else}
				<p>{l s='We found no category matching your query'}</p>
			{/if}
		{/if}
		{if isset($nb_result_cms)}

			{if $nb_result_cms > 0}
				<p>{$nb_result_cms} {l s='article(s) found.'}</p>
				<ul class="bullet">
					{foreach from=$result_cms item=cmspage}
						<li>
							<a href="{$link->getCMSLink($cmspage.id_cms, $cmspage.link_rewrite)|escape:'htmlall':'UTF-8'}">{$cmspage.name|escape:'htmlall':'UTF-8'}</a>
						</li>
					{/foreach}
				</ul>
			{else}
				<p>{l s='We found no article matching your query'}</p>
			{/if}
		{/if}

Ce qui donne qcq chose comme cela (il faudra adapter le CSS), car c'est moche en l'état, mais ça fonctionne :

image.png.ae29c3bcfa402aa55a06d2df98e84188.png

 

Bon codage...

Crdlt

Franck

SITOLOG - F Bugnet

SITOLOG - F Bugnet

Bonjour,

Cet article de 2015 est encore d'actualité, je viens d’implémenter cette modif sur un site en 1.6.1.24 pour proposer une base de connaissance. Merci pour  Web-M.

Dans un soucis de partage, si vous souhaitez que la recherche s'effectue aussi dans le contenu des catégories CMS, voici ce qu'il faut modifier au code proposé par Web-M :

1/dans l'override du Searchcontroller, il faut exécuter deux fois la fonction searchCMS, avec un paramètre de plus ("cms" ou "cms_catgory), et retourner deux tableaux de résultats comme ceci :

public function process()
	{
		parent::process();
		$search_query_faq = Tools::getValue('search_query_faq');

		if($search_query_faq){
			$this->n = abs((int)(Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE'))));
			$this->p = abs((int)(Tools::getValue('p', 1)));
			
			$result_cms = Search::searchCMS((int)(self::$cookie->id_lang), $search_query_faq, "cms",false,	 $this->p, $this->n, 'position', 'desc');	
			$nb_result_cms = ($result_cms) ? count($result_cms) : 0;
			
			$result_cms_category = Search::searchCMS((int)(self::$cookie->id_lang), $search_query_faq, "cms_category",false,	 $this->p, $this->n, 'position', 'desc');
			$nb_result_cms_category = ($result_cms_category) ? count($result_cms_category) : 0;
			
			//$nb_result=$nb_result_cms+$nb_result_cms_category;
			//$result=array_merge($result_cms,$result_cms_category);
				
			self::$smarty->assign(array(
				//'nb_result' => $nb_result,
				//'result' => $result,
				'nb_result_cms' => $nb_result_cms,
				'result_cms' => $result_cms,
				'nb_result_cms_category' => $nb_result_cms_category,
				'result_cms_category' => $result_cms_category,
			));
		}
	 
	}

 

Pour le Search.PHP, il faut modifier le code pour traiter ce paramètre supplémentaire et selon sa valeur, chercher dans les tables cms ou cms_category. On aurait pu faire deux routines par copier coller, j'ai préféré paramétrer le code avec la variable $table dans la requete sql, qui vaut soit cms, soit cms_category.

A noter que j'ai également modifié ce code pour rechercher non seulement dans le champ "content" (ou "description" pour les catégories, mais également dans les champs "name" et "summary", des champs que j'ai ajouté aux 2 classes. Re-simplifiez le code si vous n'avez pas ces champs :

class Search extends SearchCore
{
	public static function searchCMS($id_lang, $query, $table, $count = false, $pageNumber = 0, $pageSize = 10, $orderBy = false, $orderWay = false)
	{
		 global $cookie;

		if (!is_numeric($pageNumber) OR !is_numeric($pageSize) OR !Validate::isBool($count) OR !Validate::isValidSearch($query)
		OR $orderBy AND !$orderWay OR ($orderBy AND !Validate::isOrderBy($orderBy))	OR ($orderWay AND !Validate::isOrderBy($orderWay)))
			return false;

		if ($pageNumber < 1) $pageNumber = 1;
		if ($pageSize < 1) $pageSize = 10;

		$words = explode(" ", $query);
		$where = '
		WHERE cms.`active` = 1
		AND l.id_lang = '.(int)($id_lang).'
		 AND (1=1 ';
		reset($words);
		if($table=="cms_category"){
			while(list($key, $data) = each($words))
			{
				$where .= " AND l.`description` LIKE '%" . pSQL($data) . "%' ";  
			}
		}
		else
		{
			while(list($key, $data) = each($words))
			{
				$where .= " AND l.`content` LIKE '%" . pSQL($data) . "%' ";  
			}
		}
			reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`summary` LIKE '%" . pSQL($data) . "%' ";  
		}
		reset($words);
		$where .= ") OR (1=1";
		while(list($key, $data) = each($words))
		{
			$where .= " AND l.`name` LIKE '%" . pSQL($data) . "%' ";  
		}
		$where .= ")";
		
		$search_query='
		SELECT DISTINCT cms.*, l.*
		FROM `'._DB_PREFIX_.$table.'` cms
		JOIN `'._DB_PREFIX_.$table.'_lang` l ON (cms.id_'.$table.' = l.id_'.$table.')'.$where.'
		ORDER BY position DESC'.($orderBy ? ', '.$orderBy : '').($orderWay ? ' '.$orderWay : '').'
		LIMIT '.(int)(($pageNumber - 1) * $pageSize).','.(int)$pageSize;
		
		//ppp($search_query);
		
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($search_query);
		
		
		if (!$result) return false;

		return $result;
	}
	
	
}

 

Et enfin, au niveau du theme (tpl), il faut mettre deux blocs d'affichages, un pour les produits trouvés un autre pour les catégories :

<form id="searchboxfaq" action="#" method="post">
			<p>
				<label for="search_query_faq">{l s='Rechercher dans la FAQ'}</label>
			</p>
			<div style="clear:both;"></div>
			<p>
				<input type="hidden" value="position" name="orderby">
				<input type="hidden" value="desc" name="orderway">
				<input id="search_query_faq" class="search_query ac_input" type="text" value="" name="search_query_faq" autocomplete="off">
				<input class="button" type="submit" value="Rechercher" name="submit_search_faq">
			</p>
		</form>

		{if isset($nb_result_cms_category)}

			{if $nb_result_cms_category > 0}
				<p>{$nb_result_cms_category} {l s='category(ies) found.'}</p>
				<ul class="bullet">
					{foreach from=$result_cms_category item=cmscategory}
						<li>
							<a href="{$link->getCMSLink($cmscategory.id_cms_category, $cmscategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$cmscategory.name|escape:'htmlall':'UTF-8'}</a>
						</li>
					{/foreach}
				</ul>
			{else}
				<p>{l s='We found no category matching your query'}</p>
			{/if}
		{/if}
		{if isset($nb_result_cms)}

			{if $nb_result_cms > 0}
				<p>{$nb_result_cms} {l s='article(s) found.'}</p>
				<ul class="bullet">
					{foreach from=$result_cms item=cmspage}
						<li>
							<a href="{$link->getCMSLink($cmspage.id_cms, $cmspage.link_rewrite)|escape:'htmlall':'UTF-8'}">{$cmspage.name|escape:'htmlall':'UTF-8'}</a>
						</li>
					{/foreach}
				</ul>
			{else}
				<p>{l s='We found no article matching your query'}</p>
			{/if}
		{/if}

Ce qui donne qcq chose comme cela (il faudra adapter le CSS), car c'est moche en l'état, mais ça fonctionne :

image.png.ae29c3bcfa402aa55a06d2df98e84188.png

 

Bon codage...

Crdlt

Franck

×
×
  • Create New...