Huhu Jungs,
ich hab eine kleine Anpassung programmiert die die automatische Anzeige von Artikeln in Hauptkategorien aus Unterkategorien ermöglicht.
Dabei ist es völlig egal wie viele Unterkategorien eine Hauptkategorie hat.
Artikel werden auch nicht doppelt angezeigt wenn diese nochmal in einer übergeordneten Kategorie definiert werden.
Getestet wurde das ganze mit einer Oxid Version 4.2.xxxx!
1.)
"[B]/core/axarticlelist.php[/B]"
Zeile: 422 “public function loadCategoryArticles”
//public function loadCategoryArticles( $sCatId, $aSessionFilter, $iLimit = null )
public function loadCategoryArticles( $sCatId, $aSessionFilter, $iLimit = null, $subCats = array() )
Zeile: 444 “public function loadCategoryArticles”
[B]unter[/B]
if ($iLimit = (int) $iLimit) {
$sSelect .= " LIMIT $iLimit";
}
if( !empty($subCats) && is_array($subCats) ) {
$sSearch = " and oc.oxcatnid = '". $sCatId ."'";
$sReplaceList = array();
$sReplaceList[] = "oc.oxcatnid = '". $sCatId ."'";
foreach($subCats as $key => $val) {
$sReplaceList[] = "oc.oxcatnid = '". $val['id'] ."'";
}
$sReplace = " and ( ". implode(" OR ", $sReplaceList) ." )";
$sSelect = str_replace($sSearch, $sReplace, $sSelect);
}
2.)
"[B]/view/alist.php[/B]"
Zeile: 350 " protected function _loadArticles( $oCategory ) "
[B]unter[/B]
$sActCat = oxConfig::getParameter( ‘cnid’ );
$subCatList = $this->getSubCatList();
foreach($subCatList as $key => $val) {
if( $val->oxcategories__oxactive->rawValue == 1 && $val->oxcategories__oxhidden->rawValue == 0 ) {
$subCats[] = array(
'id' => $val->oxcategories__oxid->value,
'pid' => $val->oxcategories__oxparentid->value,
'name' => $val->oxcategories__oxtitle->value,
);
}
$subCatsPlus = $this->getCatSubcat($val);
// Array Merge
$subCats = array_merge($subCats, $subCatsPlus);
}
//print_r($subCats);
//$this->_iAllArtCnt = $oArtList->loadCategoryArticles( $sActCat, $aSessionFilter );
$this->_iAllArtCnt = $oArtList->loadCategoryArticles( $sActCat, $aSessionFilter, null, $subCats );
Zeile: 377
[B]unter[/B]
protected function _loadArticles( $oCategory )
neue Funktion
function getCatSubcat($data) {
// Default
$output = array();
// List
foreach($data->_aSubCats as $key => $val) {
// Val
$output[] = array(
'id' => $val->oxcategories__oxid->value,
'pid' => $val->oxcategories__oxparentid->value,
'name' => $val->oxcategories__oxtitle->value,
);
if( isset($val->_aSubCats) && !empty($val->_aSubCats) ) {
$subCatsPlus = $this->getCatSubcat($val);
$output = array_merge($output, $subCatsPlus);
}
}
// Return
return $output;
}
Viel Spaß damit
mfg, Sebastian
P.s. Der Code ist völlig frei und die Nutzung ist auf eigene Gefahr.