in der 4.8.x (und wahrscheinlich auch schon früher) bis einschließlich 4.8.13 (aktuelle Version) ist ein gravierender aber leicht behebbarer Fehler in der Suche:
In der Datei /contenido/classes/class.search.php ist (ab Zeile 1147) die Funtion getSubTree() falsch aufgebaut.
Bei folgendem Aufbau
Code: Alles auswählen
Cat. 34
Cat. 2
Cat. 3
Cat. 13
Cat. 26
Cat. 8
Die Lösung ist denkbar einfach: Contenido hat bereits eine passende, global verfügbare Funktion DIE FUNKTIONIERT.
Ich habe das Problem gelöst indem ich eine Zeile in der nachfolgenden Funktion getSearchableArticles() "ausgetauscht" habe:
Code: Alles auswählen
function getSearchableArticles($search_range)
{
$cat_range = array();
if (array_key_exists('cat_tree', $search_range) AND is_array($search_range['cat_tree']))
{
if (count($search_range['cat_tree']) > 0)
{
foreach($search_range['cat_tree'] as $cat)
{
# $cat_range = array_merge($cat_range, $this->getSubTree($cat)); <-- Aufruf der fehlerhaften Funktion raus
$cat_range = array_merge($cat_range, conDeeperCategoriesArray($cat)); <-- Aufruf der fehlerfreien Funktion rein
}
}
}
if (array_key_exists('categories', $search_range) AND is_array($search_range['categories']))
{
if (count($search_range['categories']) > 0)
{
$cat_range = array_merge($cat_range, $search_range['categories']);
}
}
$cat_range = array_unique($cat_range);
$sCatRange = implode("','", $cat_range);
Generell wäre bei der Suche eine Prüfung der Berechtigung wünschenswert.
Diese habe ich vorerst provisorisch ins Modul integriert, wobei die Liste der inkludierten Kategorien gegen die erlaubten Kategorien bereinigt wird.
Leider sind hiervon natürlich keine Unterkategorien betroffen, weshalb dies nur auf eine Ebene funktioniert.
Der Ansatz:
Code: Alles auswählen
#Settings
$oArticleProp = new Article_Property($db, $cfg);
$iArtspecReference = 2;
$cApiClient = new cApiClient($client);
$sSearchRange = $cApiClient->getProperty('searchrange', 'include');
$aSearchRange = explode(',', $sSearchRange);
# Spider IT Deutschland - Rene Mansveld :: NUR Includes fuer den User ->
$oFeNav = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
$oFeNav->setAuth($auth);
$aSubCategories = $oFeNav->getSubCategories(34, false, false, 3); <-- Hier steht die idcat aus dem Beispiel oben fest drin (nicht schoen)
$aNewSearchRange = array();
for ($i = 0; $i < count($aSearchRange); $i ++) {
if (in_array($aSearchRange[$i], $aSubCategories)) {
$aNewSearchRange[] = $aSearchRange[$i];
}
}
#var_dump($aNewSearchRange);
# Spider IT Deutschland - Rene Mansveld :: NUR Includes fuer den User <-
#Multilingual settings
$sYourSearchFor = mi18n("Ihre Suche nach");
$sMore = mi18n("mehr");
René