Ich habe gerade im Search Controller gesehen, dass man die Hersteller mit einbeziehen könnte (evtl. Sidebar). Hat da jemand schon mal was gebaut?
Geht das vielleicht etwas ausführlicher?
Um welches Modul gehts?
Welche Shop Version?
Welches Template?
Inwiefern “einbeziehen”? Anzeigen? Oder anhand der Hersteller suchen / filtern?
Im allgemeinen. CE 4.9.6 Jetzt bin ich aber schon fast durch.
Das man in den Suchergebnissen, in der Sidebar noch die Hersteller zum filtern hat
Leffty das kannst du in einer alten Shopversion im Basic Theme nachschauen wie das verwendet wurde: http://oxid-tpl-debug.stahlwarenhaus-hebsacker.de/basic. Ist einfach ein Dropdown mit Kategorien und eins mit Herstellern. Weil hier aber einfach immer alle Kategorien drinstehen, erhält man oft “Keine Artikel gefunden” bei einer Auswahl.
Mit unseren Modulen “Search XL” und “Multifilter XL” erhältst du Kategorie und Herstellerfilter für die Suche die sich am aktuellen Suchergebnis orientieren: http://zunderweb.de/demoshops/multifilter_xl/.
Wenn du nur einen Herstellerfilter bauen willst der dynamisch auf das Suchergebnis reagiert, müsstest du im Suchergebnis schauen welche Hersteller enthalten sind und das Hersteller-Dropdown damit aufbauen.
Ich danke Dir.
Ich hab es mir jetzt so gebaut
Das Model oxSearch und den Controller Search erweitert
'extend'
=> array(
'oxSearch' => 'leffty/models/lefftyoxSearch',
'Search' => 'leffty/controllers/lefftySearch',
)
Das Model lefftyoxSearch
<?php
class lefftyoxSearch extends oxSearch
{
protected $_aIds = null;
public function __construct()
{
parent::__construct();
oxRegistry::set("lefftyoxSearch", $this);
}
public function prepareArticlesSearchIds($sSearchParamForQuery = false, $sInitialSearchCat = false, $sInitialSearchVendor = false, $sInitialSearchManufacturer = false)
{
$sSelect = $this->_getSearchSelect($sSearchParamForQuery, $sInitialSearchCat, $sInitialSearchVendor, $sInitialSearchManufacturer, false);
$this->_aIds= "";
$aIds = array();
if ($sSelect)
{
$sPartial = substr($sSelect, strpos($sSelect, ' from '));
$sSelect = "select DISTINCT( " . getViewName('oxarticles', $this->_iLanguage) . ".oxid ) $sPartial LIMIT 1000";
$aIdsResult = oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getAll($sSelect);
if ($aIdsResult)
{
$n = count($aIdsResult);
for($i = 0; $i < $n; $i++)
{
$aIds[] = oxDb::getDb()->quote($aIdsResult[$i]["OXID"]);
}
}
}
$this->_aIds = implode(",", $aIds);
}
public function getManufacturers()
{
if (!$this->_aIds) {
return array();
}
$oxManufacturersTable = getViewName('oxmanufacturers', $this->_iLanguage);
$oxArticlesTable = getViewName('oxarticles', $this->_iLanguage);
$sSelect = "SELECT $oxManufacturersTable.OXID, $oxManufacturersTable.OXTITLE FROM $oxManufacturersTable INNER JOIN $oxArticlesTable ON $oxManufacturersTable.OXID = $oxArticlesTable.OXMANUFACTURERID";
$sSelect .= " WHERE $oxManufacturersTable.oxactive = 1 AND $oxArticlesTable.OXID IN(" . $this->_aIds . ") GROUP BY $oxManufacturersTable.OXID";
return oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getAll($sSelect);
}
public function getCategories()
{
if (!$this->_aIds) {
return array();
}
$oxCategoriesTable = getViewName('oxcategories', $this->_iLanguage);
$oxArticlesTable = getViewName('oxarticles', $this->_iLanguage);
$sSelect = "SELECT $oxCategoriesTable.OXID, $oxCategoriesTable.OXTITLE FROM $oxCategoriesTable";
$sSelect .= " INNER JOIN oxobject2category ON $oxCategoriesTable.OXID = oxobject2category.OXCATNID";
$sSelect .= " WHERE oxobject2category.OXOBJECTID IN(" . $this->_aIds . ")";
$sSelect .= " AND $oxCategoriesTable.OXACTIVE = 1";
$sSelect .= " GROUP BY $oxCategoriesTable.OXID";
return oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getAll($sSelect);
}
}
Und den Controller lefftySearch
<?php
class lefftySearch extends Search
{
public function init()
{
parent::init();
$oConfig = oxRegistry::getConfig();
$sSearchParamForQuery = trim($oConfig->getRequestParameter('searchparam', true));
// searching in category ?
$sInitialSearchCat = $this->_sSearchCatId = rawurldecode($oConfig->getRequestParameter('searchcnid'));
// searching in vendor #671
$sInitialSearchVendor = rawurldecode($oConfig->getRequestParameter('searchvendor'));
// searching in Manufacturer #671
$sInitialSearchManufacturer = rawurldecode($oConfig->getRequestParameter('searchmanufacturer'));
$searchModel = oxRegistry::get("lefftyoxSearch");
$searchModel->prepareArticlesSearchIds($sSearchParamForQuery, $sInitialSearchCat, $sInitialSearchVendor, $sInitialSearchManufacturer);
}
public function getManufacturers()
{
$searchModel = oxRegistry::get("lefftyoxSearch");
return $searchModel->getManufacturers();
}
public function getCategories()
{
$searchModel = oxRegistry::get("lefftyoxSearch");
return $searchModel->getCategories();
}
}
Dann die Templates in die Sidebar einbinden
Z.b. Manufacturer
<div class="manufacturerBox sidebarBox">
<h3 class="sideBar">[{oxmultilang ident="MANUFACTURERS" }]</h3>
<ul>
[{foreach from=$manufacturers item=manufacturer}]
[{assign var="mOxid" value=$manufacturer.OXID }]
<li><a href="[{$oView->getBaseLink()|oxaddparams:"searchmanufacturer=$mOxid"}]" title="[{ $manufacturer.OXTITLE }]">[{ $manufacturer.OXTITLE }]</a></li>
[{/foreach}]
</ul>
</div>
Was meint Ihr?
Na das ist doch viel sinnvoller als das was im Basic-Theme war. Das Template als Block einfügen und ein zurück-Link sollten noch rein. Kannst du das bei Github hochladen?
Jo mach ich, kein Thema.
Momentan kämpf ich mit der Fehlermeldung “EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND”… wenn in dem Sucheingabefeld nix eingeben ist.