Bonjour a tous,
Je suis actuellement en train de travailler sur un plugin de type search me permettant de rechercher des articles dans un flux XML donné.
Tout cela fonctionne très bien sauf que lorsque j'affiche la pages des résultats, les articles que je remonte avec mon plugin sont séparés du reste des autres articles et s'affichent en premier au lieux d'être mélé avec le plugin de com_content.
En simple ma page de résultat affiche les articles dans cet ordre :
Résultat de mon plugin{
Article 1
Article 2
Article 3
}
Résultat de plgContent{
Article 1
...
Article n
}
Voici le code du plugin :
l'array $articles est un tableau d'objet construit de cette maniere :
Je suis plus habitué à la création de composant que de plugin, il y a donc très certainement des particularité qui m'ont échappé.
Que faudrait-il que je fasse pour que le tableau d'article que je renvoie ce mélange avec les autres résultats ?
En espérant avoir été suffisamment clair.
Merci d'avance.
Je suis actuellement en train de travailler sur un plugin de type search me permettant de rechercher des articles dans un flux XML donné.
Tout cela fonctionne très bien sauf que lorsque j'affiche la pages des résultats, les articles que je remonte avec mon plugin sont séparés du reste des autres articles et s'affichent en premier au lieux d'être mélé avec le plugin de com_content.
En simple ma page de résultat affiche les articles dans cet ordre :
Résultat de mon plugin{
Article 1
Article 2
Article 3
}
Résultat de plgContent{
Article 1
...
Article n
}
Voici le code du plugin :
Code PHP:
<?php
defined('_JEXEC') or die;
require_once JPATH_SITE . '/components/com_content/router.php';
class PlgSearchArticleReader extends JPlugin
{
/**
* @return array An array of search areas
*/
public function onContentSearchAreas()
{
static $areas = array(
'articlereader' => 'JGLOBAL_ARTICLES'
);
return $areas;
}
/**
* Content Search method
* The sql must return the following fields that are used in a common display
* routine: href, title, section, created, text, browsernav
* @param string Target search string
* @param string mathcing option, exact|any|all
* @param string ordering option, newest|oldest|popular|alpha|category
* @param mixed An array if the search it to be restricted to areas, null if search all
*/
public function onContentSearch($text, $phrase = '', $ordering = '', $areas = null)
{
require_once(JPATH_SITE."/plugins/search/articlereader/XmlParser.php");
require_once JPATH_SITE . '/components/com_content/helpers/route.php';
require_once JPATH_ADMINISTRATOR . '/components/com_search/helpers/search.php';
$app = JFactory::getApplication();
$user = JFactory::getUser();
$groups = implode(',', $user->getAuthorisedViewLevels());
$tag = JFactory::getLanguage()->getTag();
$componentParams = JComponentHelper::getParams('com_articlereader');
$param = $componentParams->get('remoteOrLocal');
$parserXML = new XmlParser(JPATH_SITE."components/com_articlereader/web-contents.xml",$param);
$words = explode(" ",$text);
//Switch en fonction du type de recherche
switch ($phrase) {
// Search exact
case 'exact':
$articles = $parserXML->getExact($text);
break;
// Search all or any
case 'any':
$articles = $parserXML->getAny($words);
break;
case 'all':
// Set default
default:
$articles = $parserXML->getAll($words);
break;
}
// Ordering of the results
switch ( $ordering ) {
//Alphabetic, ascending
case 'alpha':
function string_compare($a, $b)
{
return strcasecmp($a->title, $b->title);
}
usort($articles, 'string_compare');
break;
// Oldest first
case 'oldest':
function date_compare($a, $b)
{
$t1 = strtotime($a->created);
$t2 = strtotime($b->created);
return $t1 - $t2;
}
usort($articles, 'date_compare');
break;
// Popular first
case 'category':
function string_compare($a, $b)
{
return strcasecmp($a->section, $b->section);
}
usort($articles, 'string_compare');
break;
// Newest first
case 'newest':
function date_compare($a, $b)
{
$t1 = strtotime($a->created);
$t2 = strtotime($b->created);
return $t2-$t1;
}
usort($articles, 'date_compare');
break;
// Default setting: alphabetic, ascending
default:
}
return $articles;
}
}
Code PHP:
$articles[] = (object) array(
'href' => "lien",
'title' => "Titre article",
'section' => "catégorie",
'created' =>"date",
'text' => "contenue",
'browsernav' => '0'
);
Que faudrait-il que je fasse pour que le tableau d'article que je renvoie ce mélange avec les autres résultats ?
En espérant avoir été suffisamment clair.
Merci d'avance.