So,
ich habe mir die Funktion nun nochmal angeschaut und angepasst:
protected function _getFilterIdsSql( $sCatId, $aFilter )
{
$sO2CView = getViewName( 'oxobject2category' );
$sO2AView = getViewName( 'oxobject2attribute' );
$sFilter = '';
$iCnt = 0;
$oDb = oxDb::getDb();
$aSessionFilter = oxSession::getVar( 'session_attrfilter' );
foreach ( $aSessionFilter as $CatID => $catidtsm ) {
foreach ( $catidtsm as $sAttrId => $sValue ) {
foreach ( $sValue as $sWerte => $sWert ) {
if ( $sWerte ) {
if ( $sFilter ) {
$sFilter .= ' or ';
}
$sAttrWert = $oDb->quote( $sWerte );
$sAttrIds = $oDb->quote( $sAttrId );
$sFilter .= "( oa.oxattrid = {$sAttrIds} and oa.oxvalue = {$sAttrWert} )";
$iCnt++;
}
}
}
}
if ( $sFilter ) {
$sFilter = "WHERE $sFilter ";
}
$sFilterSelect = "select oc.oxobjectid as oxobjectid, count(*) as cnt from ";
$sFilterSelect.= "(SELECT * FROM $sO2CView WHERE $sO2CView.oxcatnid = '$CatID' GROUP BY $sO2CView.oxobjectid, $sO2CView.oxcatnid) as oc ";
$sFilterSelect.= "INNER JOIN $sO2AView as oa ON ( oa.oxobjectid = oc.oxobjectid ) ";
return $sFilterSelect . "{$sFilter} GROUP BY oa.oxobjectid HAVING cnt = $iCnt ";
}
und
public function executefilter()
{
$iLang = oxRegistry::getLang()->getBaseLanguage();
// store this into session
$aFilter = oxConfig::getParameter( 'attrfilter', 1 );
$sActCat = oxConfig::getParameter( 'cnid' );
$sAjax = oxConfig::getParameter( 'ajax' );
if (isset($aFilter) && $aFilter != "" && $sAjax == "1") {
$content = array();
foreach( $aFilter as $host => $value ) {
foreach( $value as $get_key => $get ) {
$content[$sActCat] = $aFilter;
}
}
oxSession::setVar( 'session_attrfilter', $content );
if ($_POST["delfilter"] == "button2") {
unset( $_SESSION['session_attrfilter'] );
}
} else {
unset( $_SESSION['session_attrfilter'] );
}
}
Ausgelagert in einer Extra Datei (mit Bootstrap eingebunden) liefert mir die Funktion _getFilterIdsSql() den gewünschten Query.
Im Shop wird aber nur das erste ausgewählte Attribut berücksichtigt (zBsp. Attribut rot ausgewählt - es werden alle roten Artikel angezeigt).
Wenn aber >1 Attribute ausgewählt sind werden wieder alle Artikel angezeigt.
Kann mir von euch einer auf die Sprünge helfen?
Es geht um den Einbau des Multifilters in Oxid CE 4.7.3
VG Thomas