Jump to content
xt:Commerce Community Forum
Sign in to follow this  
badausstattung24.de

In Kategorien nach Hersteller filtern

Recommended Posts

Also bin nun seit Tagen auf der Suche, wie man in den Kategorien nach Herstellen filtern kann. Alle Suche im Forum war vergebens. In der "product_listing_v1.html" steht ja folgendes:

{if $MANUFACTURER_DROPDOWN}
<div class="products_sort">
{if $MANUFACTURER_DROPDOWN}{$MANUFACTURER_DROPDOWN}{/if}
</div>
{/if}

{if $manufacturer}
{$manufacturer.MANUFACTURER.manufacturers_description}
{/if}[/HTML]

Wie oder wo wird den nun der Hersteller bzw der Filter angezeigt?

Danke für Eure Hilfe.

Share this post


Link to post
Share on other sites

Und wie sieht es mit der 12er aus? Da steht die Zeile auch drin aber ich finde absolut nichts, womit dies dann auch so angezeigt wird.

Vielleicht hat ja jemand mittlerweile eine Lösung oder eine Information, ob man die Funktion nun nutzen kann?

LG

Share this post


Link to post
Share on other sites

hi,

auch bei der 12er steht in der class.manufacturers.php noch "toDo" bei der Funktion ...

allerdings stehen Dir in der 12er die Hersteller mit dem Plugin mz_box_hersteller ( hier im Forum zu finden ) im Template als Variable zur Verfügung, damit kannst Du dir selber ein Dropdown machen

machen bzw. auch selektieren .... mit diesem Aufruf:

{box name=mz_box_hersteller type=user manufacturer=$module_data.manufacturers_id}

ich nutze das z.B. im einspaltigen Listing der Suchfunktion und lasse den Hersteller nur bei Gruppenwechsel anzeigen.

Grüsse

Share this post


Link to post
Share on other sites

Hallo! Danke für die Antwort.

Ich habe das Plugin nun genutzt, um mir in der Artikelbeschreibung den Hersteller anzeigen zu lassen. Also einfach nur als Text.

Dazu habe ich das Plugin installiert und in der Template-Datei auskommentiert, dass "Alle Artikel von xxx" ausgegeben wird und nur die Ausgabe des Herstellernamen gemacht.

Nun ist aber die Dropdown Geschichte noch offen, weil im Prinzip nutze ich das Plugin ja jetzt für die Ausgabe des Namen.

Wie kann ich nun so ein Dropdown mit dem Plugin basteln? Im Prinzip müsste man ja irgendwas machen, damit mir nur die Artikel in der Kategorie des jeweiligen Herstellers, welcher im Dropdown ausgewählt wurde, angezeigt wird. Bloß irgendwie habe ich gerade keinen Ansatz... Fällt da jemanden etwas ein? Es wurde ja im Forum auch schon öfters nach so einer Funtkion gefragt...

LG

Share this post


Link to post
Share on other sites

hi,

es stehen Dir ja sämtliche Hersteller zur Verfügung: also ein Form basteln und darin das select mit den Herstellernamen als options füllen.

etwa wie das Sort-Dropdown im Artikel-Listing:

{if $sort_dropdown.options}

<div class="products_sort">

{form type=form name=sort_dropdown action='dynamic' method=get}

{form type=hidden name=page value='categorie'}

{form type=hidden name=cat value=$current_category_id}

{form type=select name=sorting value=$sort_dropdown.options default='' onchange='this.form.submit();'}

{form type=formend}

</div>

{/if}

Hab ich aber selber noch nicht gemacht ... )

Grüsse

Share this post


Link to post
Share on other sites

naja im prinzip müsste ich das dropdown ja in die template datei schreiben, da da die daten bezogen werden, oder? oder kann ich {$_man_data.manufacturers_name|escape:"html"} da zb verwenden, im produktlisten template? naja, ich probier einfach mal =)

Share this post


Link to post
Share on other sites

also es ist auf jeden fall schwieriger als ich dachte. vielleicht versucht man gleich, so eine funktion in die php zu schreiben? also da wo noch TODO steht? Man hat ja im Prinzip die Hersteller-Daten auf der Seite oder? Hmmm.... ach mensch ^^ bin leider nicht so gut in php....

lg

Share this post


Link to post
Share on other sites

moin moin leute,

tja da steh ich nun vor dem selben problem und hätte gerne in dem product-listing ein dropdown mit den herstellern in der aktuellen kategorie. Hab mir schon den kopf zerbrochen und keine wirkliche idee. Klar ausser man kauft ein filter-plugin oder schreibt sich was selber bzw. macht aus dem //TODO in der class.manufacturers.php was schönes :-)

Hatt da jemand ne idee? Ich nutze noch die 4.0.12

viele grüße

Michael

Share this post


Link to post
Share on other sites

Hi!

Ich hatte heute das selbe Problem, wie ihr und ich habe die Funktion ausprogrammiert.

class.manunfacturer.php

	function getManufacturerSortDropdown($default) {
global $_GET, $PHP_SELF, $xtPlugin, $language, $db, $current_category_id;

$sql_manufacturers = new getManufacturerSQL_query();
$sql_manufacturers->setSQL_COLS(' m.manufacturers_id as id, m.manufacturers_name as text', true);
$sql_manufacturers->setSQL_TABLE(" left join xt_products p on m.manufacturers_id = p.manufacturers_id left join xt_products_to_categories cc on cc.products_id = p.products_id ");
$sql_manufacturers->setSQL_WHERE("and m.manufacturers_status = 1 and cc.categories_id = ".$current_category_id );

$sql = $sql_manufacturers->getSQL_query("distinct");
$record = $db->Execute($sql);

$options[] = array("id"=>"", "text" => "Hersteller:");
$options[] = array("id"=>"", "text" => "alle");

if($record->RecordCount() > 0){
while(!$record->EOF){
$options[] = $record->fields;
$record->MoveNext();
}
$record->Close();
}else{
return false;
}
$data['options'] = $options;
return $data;
}[/PHP]

Die Templates habe ich so umgeändert, dass die selektierten Werte vorausgewählt sind. Das erlaubt die Kombination der Sortierung und der Herstellerfilter.

Template:

[HTML]
{if $sort_dropdown.options}
<div class="products_sort" style="float:left;margin:0px;"><div class="floatbox" >
{form type=form name=sort_dropdown action='dynamic' method=get}
{form type=hidden name=page value='categorie'}
{form type=hidden name=cat value=$current_category_id}
{form type=hidden name=filter_id value=$smarty.get.filter_id}
  {form type=select name=sorting value=$sort_dropdown.options default=$smarty.get.sorting onchange='this.form.submit();'}
{form type=formend}
</div>
</div>
{/if}


{if $MANUFACTURER_DROPDOWN.options}
<div class="products_sort" style="float:left;margin:0px;"><div class="floatbox" >

{form type=form name=MANUFACTURER_DROPDOWN action='dynamic' method=get}
{form type=hidden name=page value='categorie'}
{form type=hidden name=cat value=$current_category_id}
{form type=hidden name=sorting value=$smarty.get.sorting}
  {form type=select name=filter_id value=$MANUFACTURER_DROPDOWN.options default=$smarty.get.filter_id onchange='this.form.submit();'}
{form type=formend}
</div>
</div>
{/if}
[/HTML]

Die Joins sind notwendig, damit nur die Hersteller auswählbar sind, deren Produkte auch wirklich vorkommen. Man kann den Quellcode bestimmt noch etwas cleanen; ich habe zum Beispiel die Tabellennamen fix codiert und nicht die Kontanten verwendet.

michael

Edited by mlueft

Share this post


Link to post
Share on other sites

Ich kann natürlich nicht ausschließen, dass mein Kunde eine veraltete Version des Shops hat und sich inzwischen vielleicht das System rtwas geändert hat.

Aber es sollte eine ausreichende Basis bilden um eigene Adaptionen zu erlauben.

lg,

mlueft

Share this post


Link to post
Share on other sites

Sehr interessanter Code, vor allem daher sehr hilfreich, weil ich in php nicht gut bin.

Ich habe mlueft´s code übernommen und ebenfalls mir das mz_box_hersteller plugin eingepflegt und nun folgende Situation. Ich darf im Product_dropdown nach auf und absteigenden Herstellern sortieren lassen (nur sortiert die Funktion nicht).

Gleiches habe ich auch mit dem zusätzlichen manufacturer dropdown menü. Ich darf auch hier nach Herstellern sortieren bzw. auswählen (was auch korrekt funktioniert mit den jeweils nur "aktiven" Herstellern), aber das System "aktualisiert" nicht weiter. Die eigentliche Sortierungshandlung wird hier ebenfalls nicht abschliessend ausgeführt.

Ich halte in der class.manufacturers.php

 $options[] = array("id"=>"", "text" => "Hersteller:");[/PHP]

für falsch, da der Text innerhalb des Dropdowns angezeigt wird und das doch nicht sinnvoll ist.

Ich habe die 12er Version. Ich verstehe nicht, wieso das System die abschliessende Sortierung nicht ausführt. Alles andere ist doch da?

Gruß

13

Share this post


Link to post
Share on other sites

Dickes Danke für den ursprünglichen Code.

Da ich nicht gern in den Core-Files arbeite hab ich das ganze in ein kleines Plugin ausgelagert und ein kleines bißchen angepasst.

Das ganze auf dem Hook "module_categories.php:tpl_data" eingefügt und schon werden die Daten ordentlich gefüllt.

<?php
global $db, $current_category_id;

$sql_manufacturers = new getManufacturerSQL_query();
$sql_manufacturers->setSQL_COLS(' m.manufacturers_id as id, m.manufacturers_name as text', true);
$sql_manufacturers->setSQL_TABLE(" left join xt_products p on m.manufacturers_id = p.manufacturers_id left join xt_products_to_categories cc on cc.products_id = p.products_id ");
$sql_manufacturers->setSQL_WHERE("and m.manufacturers_status = 1 and cc.categories_id = ".$current_category_id );

$sql = $sql_manufacturers->getSQL_query("distinct");
$record = $db->Execute($sql);

$manoptopns = array();
$manoptions[] = array("id"=>"", "text" => "alle");

if($record->RecordCount() > 0){
while(!$record->EOF){
$manoptions[] = $record->fields;
$record->MoveNext();
}
$record->Close();
$mandata['options'] = $manoptions;
$tpl_data['MANUFACTURER_DROPDOWN'] = $mandata;
}[/PHP]

Im Template hab ich dann noch die Ausgabe etwas angepasst:

[HTML] {if $sort_dropdown.options}
{form type=form name=sort_dropdown action='dynamic' method=get}
{form type=hidden name=page value='categorie'}
{form type=hidden name=cat value=$current_category_id}
{form type=hidden name=filter_id value=$smarty.get.filter_id}
{form type=select name=sorting value=$sort_dropdown.options default=$sort_default onchange='this.form.submit();'}
{form type=formend}
{/if}
{if $MANUFACTURER_DROPDOWN.options}
{form type=form name=MANUFACTURER_DROPDOWN action='dynamic' method=get}
{form type=hidden name=page value='categorie'}
{form type=hidden name=cat value=$current_category_id}
{form type=hidden name=sorting value=$smarty.get.sorting}
{form type=select name=filter_id value=$MANUFACTURER_DROPDOWN.options default=$smarty.get.filter_id onchange='this.form.submit();'}
{form type=formend}
{/if}[/HTML]

Den Abschnitt für das "Sorting" hab ich mit gepostet, da ich dort noch das versteckte Feld für die Übernahme des Herstellers eingefügt habe. Theoretisch kann man das ganze sicherlich auch in eine Form packen :)

Vielleicht hilfts dem ein oder anderen weiter.

MfG

Demajo

Share this post


Link to post
Share on other sites

Von Haus aus gibt es auch die (nicht dokumentierte) Funktionalität bei einem Link Hersteller und Kategorie als Parameter zu übergeben und dann nur die Produkte des Herstellers in der Kategorie angezeigt zu bekommen. Der Link muss einfach nach folgendem Schema aufgebaut sein:

/categorie?mnf={$HerstellerId}&cat={$KategorieId}

Oder mit Suma URLs:

/{Suma URL der Kategorie}?mnf={$HerstellerId}

Share this post


Link to post
Share on other sites

Hallo gibt es dafür eine aktuelle Version für Version 4.1?

Leider ist im Core die Funktion noch unter "TODO" - wenn ich den Code einfüg erhalte ich eine Fehlermeldung

Liegt am Core Teil:

global $_GET, $PHP_SELF, $xtPlugin, $language, $db, $current_category_id;

$sql_manufacturers = new getManufacturerSQL_query();
$sql_manufacturers->setSQL_COLS(' m.manufacturers_id as id, m.manufacturers_name as text', true);
$sql_manufacturers->setSQL_TABLE(" left join xt_products p on m.manufacturers_id = p.manufacturers_id left join xt_products_to_categories cc on cc.products_id = p.products_id ");
$sql_manufacturers->setSQL_WHERE("and m.manufacturers_status = 1 and cc.categories_id = ".$current_category_id );

$sql = $sql_manufacturers->getSQL_query("distinct");
$record = $db->Execute($sql);

$options[] = array("id"=>"", "text" => "Hersteller:");
$options[] = array("id"=>"", "text" => "alle");

if($record->RecordCount() > 0){
while(!$record->EOF){
$options[] = $record->fields;
$record->MoveNext();
}
$record->Close();
}else{
return false;
}
$data['options'] = $options;
return $data;[/PHP]

"Leider ist ein Fehler beim Aufruf unserer Webseite aufgetreten.

Bitte versuchen Sie es später noch einmal."

Danke im Voraus! :)

Share this post


Link to post
Share on other sites

Nein, das ist natürlich kein Problem, wäre nur schön, wenn sich ein erfahrenerer Benutzer sich der Thematik für 4.1.1 bzw. der aktuellen Version 4.2 annehmen würde :-)

... eventuell ja auch die Entwicklungsgarde der xt:Commerce - da es ja im Core zumindest schon einmal vorgesehen ist... :-)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...