Jump to content
xt:Commerce Community Forum

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.

Link to comment
Share on other sites

  • 8 months later...

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

Link to comment
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

Link to comment
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

Link to comment
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

Link to comment
Share on other sites

  • 1 year later...

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

Link to comment
Share on other sites

  • 7 months later...

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

Link to comment
Share on other sites

  • 3 weeks later...

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

Link to comment
Share on other sites

  • 5 months later...

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

Link to comment
Share on other sites

  • 3 weeks later...

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

Link to comment
Share on other sites

  • 2 months later...

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}

Link to comment
Share on other sites

  • 1 year later...

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! :)

Link to comment
Share on other sites

  • 2 weeks later...

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... :-)

Link to comment
Share on other sites

  • 2 weeks later...

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...