Aufbau Array attrfilter ?

Guten Abend,

wie ist das Array attrfilter aufgebaut? Wie kann ich es modifizieren? Ich möchte eine Suche über Attribute filtern (Ajax-basiert). Dazu möchte ich nicht die funktion “oxid.form.send” verwenden, sondern eine eigene Funktion verwenden.

Dazu muss ich jedoch in das Array attrfilter schreiben und dies dann per POST an index.php senden. Stimmt das?

Ich finde nirgendwo eine Beschreibung des Arrays.

Würde mich über Antwort freuen!

Lass es Dir mit var_dump ausgeben, dann weißt Du wie es aufgebaut ist.

Was soll denn die index.php denn damit tun?

Schau einfach in die Referenz und vielleicht vorher in die Grundlagen.

Hallo rubbercut,
vielen Dank für die Antwort. Habe über ein [{debug}] im smarty mir das Array einmal anzeigen lassen.
Ich möchte gern über einen jQuery-Schieberegler, der die Attribute der Produkte auswertet, eine Listenansicht der Produkte eingrenzen (Also quasi eine Art Konfigurator). Dazu bin ich nach den Infos hier: http://www.oxid-esales.com/forum/showthread.php?t=4702 vorgegangen. Es wird standardmäßig in der list.tpl die Listenansicht nach Aufruf der Attribute über die Funktion oxid.form.send(’_filterlist’) neu erstellt.
Ich möchte nun verstehen, wie ich ohne den Aufruf oxid.form.send(’_filterlist’) meine Attributauswahl an die Listenfunktion von OXID senden kann, um dann meine gefilterte Produktliste zurückzubekommen.

Ohne reload mit AJAX.

Ansonsten: Über <FORM> kannst Du z.B. Deine eigene Klasse ansprechen und die entsprechenden Dateien laden (cl="").

Zu: “Ohne reload mit AJAX.”

Meinst Du damit, dass ich einmal alle Produkte lade, und diese bereits geladenen filtere & anzeige? Damit erübrigt sich natürlich ein nachladen. Das geht doch dann aber nur bei überschaubaren Produktmengen, oder?

Mit “Ajax-Reload” bezeichnete ich den Vorgang, wenn nur Teilbereiche der Website neu geladen werden. In meinem Fall wäre das das Produktlisting.
Sorry, wenn ich mich unverständlich ausdrücke.

Nö. Ajax geht immer. Man kann damit natürlich auch ganze TPLs nachladen bzw. überladen.

Selberessen macht dick.

Habe jetzt meine Lösung gefunden: Für oben beschriebenes Problem ist es für mich NICHT notwendig, ein eigenes Modul zu schreiben. Die Funktionalität wird bereits mit der Klasse aList geliefert. Allerdings muss der view angepasst werden, damit beim Aufruf des Filters nicht die komplette Seite zurück geliefert wird, sondern nur der Bereich, der mittels Ajax ausgetauscht werden soll.

  1. Erkenntnis: views müssen nicht als Module definiert und registriert werden im admin-Backend. Das geht viel einfacher. Hinweise hierzu in: http://www.oxid-esales.com/forum/showthread.php?t=5682

  2. Erkenntnis: Der eben verwiesene Forumsbeitrag funktioniert so nicht. Ein view muss entsprechend initiiert werden. Siehe dazu hier: http://www.oxid-esales.com/en/news/blog/how-extend-oxid-eshop-part2

Die bei Link 1 gemachten Angaben stimmen. Der Inhalt einer in views hinterlegten Klasse (wie unter 1 genannt)

class ajaxlist extends alist
{
    protected $_sThisTemplate = 'ajaxlist.tpl';
}

benötigt nur eine Datei ajaxlist.tpl, in der quasi alles stehen kann, um ohne Reload zu ladene Inhalte darzustellen. Mit AJAX spricht man über cl=ajaxlist und den zu übertragenden Werten (per Post oder GET) die Datei und Klasse(n) an. Nun kann man bestehende Funktionen direkt zum Empfang der Werte anpassen oder ein Modul schreiben . Fertig.

dann habe ich es wohl doch noch nicht ganz verstanden. Wenn ich meine view nach link 1) erstelle, geht es nicht:

class ajaxlist extends alist
{
protected $_sThisTemplate = ‘ajaxlist.tpl’;
}

Wenn ich die Formulierung aus link 2) nehme:

class ajaxlist extends aList {
public function init()
{
parent::init();
$this->_sThisTemplate = ‘ajaxlist.tpl’;
}
}

geht es.

Warum?

Ich würde mich mit den selben Anforderungen gern in diesen Thread einklinken.

dann habe ich es wohl doch noch nicht ganz verstanden. Wenn ich meine view nach link 1) erstelle, geht es nicht:

class ajaxlist extends alist 
{ 
protected $_sThisTemplate = 'ajaxlist.tpl'; 
}

Das dürfte daran liegen, dass es aList und nicht alist heißen sollte.

Egal, ob ich es mit dieser korrigierten Variante oder mit

class ajaxlist extends aList {
public function init()
{
parent::init();
$this->_sThisTemplate = 'ajaxlist.tpl';
}
}

versuche, ich werde immer kommentarlos (also ohne Fehlermeldung) zur Startseite weitergeleitet (die URL lautet dann Home — Agentur XY GmbH). Habe in der ajaxlist.tpl auch schon den Inhalt von list.tpl 1:1 kopiert, aber auch einfach nur leer gelassen, immer mit dem selben Ergebnis.

Hat einer eine Idee, was ich falsch mache?
Geprüft habe ich:

  • Dateiberechtigung
  • Zeichensatz
  • Dateinamen
  • Ob sich die Dateien in views/ bzw. im tpl-Ordner befinden

Viele Grüße
Pat