Ergebnis 1 bis 8 von 8

Thema: Zwei FE-Listen - gruppiert - eine Pagination

  1. #1
    Contao-Nutzer
    Registriert seit
    29.12.2011.
    Beiträge
    109

    Standard Zwei FE-Listen - gruppiert - eine Pagination

    Hallo,

    ich habe sämtliche Themen im Forum gelesen doch leider keine Lösung für meine Anforderung gefunden.


    Es gibt 2 Metamodels:

    mm_unternehmen (parent)
    mm_produkte (child)

    Die Einträge von mm_unternehmen bekommen über ein Select-Attribut ein Tarif zugeordnet (Basic oder Premium).


    Die Listen-Ansicht

    Es sollen die Einträge von mm_produkte gruppiert ausgegeben werden.

    1. Gruppe (sortiert nach Entfernung) - Einträge deren Elternelement einen Premium-Tarif hat.
    2. Gruppe (sortiert nach Entfernung) - Einträge deren Elternelement einen Basic-Tarif hat.


    Beide Gruppen werden auf einer Seite ausgegeben und werden über ein Filter-Set angesprochen: Umkreissuche + Mehrfachauswahl



    Folgende Kombinationen habe ich bereits getestet:

    1. Versuch

    Je Gruppe eine CE-Liste mit der Option "Filtereinstellungen überschreiben"

    Hier müsste jedem Produkt ein Tarif zugeordnet sein.
    Wechselt das Elternelement den Tarif, müsste bei allen Produkten der Tarif angepasst werden.

    Optimal wäre hier ein Filter "Einfache Abfrage" der auf die Daten des Elternelementes zugreifen kann.

    Zudem habe ich hier Probleme beim Einrichten der Pagination.
    Es wird für jede Liste eine Pagination ausgegeben - gewünscht ist jedoch nur eine für beide Listen.



    2. Versuch

    Je Gruppe eine CE-Liste. Über referenced items gebe ich nur die Produkte aus,
    deren Elternelement einen Premium-Tarif (1.Liste) oder Basic-Tarif (2.Liste) zugeordnet ist.

    PHP-Code:
    <?php     
        
    function getBasic($strPid)
        {
            
    $objMetaModel = \MetaModels\Factory::byTableName('mm_unternehmen');
            
    $objFilter $objMetaModel->getEmptyFilter();
            
    $objFilter $objMetaModel->prepareFilter(162, array());
            
    $objFilter->addFilterRule(new \MetaModels\Filter\Rules\SearchAttribute($objMetaModel->getAttribute('alias_id'), $strPid$objMetaModel->getAvailableLanguages()));
            
    $objItems $objMetaModel->findByFilter($objFilter);
            return 
    $objItems->parseAll(text$objMetaModel->getView(2));  
        }        
    ?>

    <?php if (count($this->data)): ?>
      <?php foreach ($this->data as $arrItem): ?>    
        <?php foreach (getBasic($arrItem['raw']['pid']) as $arrBasic): ?>    
          <?php if ($arrBasic['raw']['id'] = $arrItem['raw']['pid']): ?>    
            <?php echo $arrItem['text']['name']; ?>
          <?php endif; ?>
        <?php endforeach; ?>
      <?php endforeach; ?>
    <?php 
    endif; ?>
    Ich denke, dass diese Variante viele Datenbankabfragen verursacht.
    Zudem habe ich hier Probleme beim Einrichten der Pagination.
    Es wird für jede Liste eine Pagination ausgegeben - gewünscht ist jedoch nur eine für beide Listen.
    Es werden mehr Seiten angezeigt als Produkte vorhanden sind.



    Ich denke ich müsste die Produkte mit nur einer CE-Liste ausgeben.
    Nur wie bekomme ich das hin?
    Ist es möglich die Items im Template zu gruppieren?

    Hat von euch jemand eine Idee, Denkanstoß für mich?

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.925
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von bastlwastl Beitrag anzeigen
    Ist es möglich die Items im Template zu gruppieren?
    ja, geht... über die Suche hier im Forum und "gruppieren" findest Du (sicher) was...

    Prinzipielles Vorgehen:
    * Reihenfolge festlegen z.B. per eig. SQL gruppieren
    * in der Schleife im Template dein Gruppierungs-Attribut abfragen und wenn es sich zum vorherigen Schleifendurchlauf geändert hat (temp-Variable einsetzen), ist eine neue Kategorie dran

  3. #3
    Contao-Nutzer
    Registriert seit
    29.12.2011.
    Beiträge
    109

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    * Reihenfolge festlegen z.B. per eig. SQL gruppieren
    Dann würde ich zwei Filter-Sets haben.?.
    Ich muss jedoch beide Listen mit einem Filter-Set ansprechen.


    Zitat Zitat von zonky Beitrag anzeigen
    * in der Schleife im Template dein Gruppierungs-Attribut abfragen und wenn es sich zum vorherigen Schleifendurchlauf geändert hat (temp-Variable einsetzen), ist eine neue Kategorie dran
    Ja, diesen Hinweis von dir habe ich schon in einem anderen Thema gelesen. Dies ist wahrscheinlich genau das was ich machen muss.
    Ich habe leider nur keine Ahnung wie ich da ran gehen soll.

    Lässt sich das aus folgendem Link ableiten?
    http://de.contaowiki.org/Catalog_Tem...Items_darunter



    Gruß Bastain

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.925
    User beschenken
    Wunschliste

    Standard

    Du hast geschrieben
    Es sollen die Einträge von mm_produkte gruppiert ausgegeben werden.
    d.h. du hast eine Liste mit einem Filterset

    mit
    Code:
    SELECT id FROM {{table}} ORDER BY tarif_attribut, entfernungs_attribut
    sollten die Werte geordnet nach Tarif und Anschließend nach Entfernung auftauchen - kannst Du ja in phpMyAdmin testen...

    Du musst in dem Schleifendurchlauf nur den Moment abpassen, wenn der Wechsel des Tarifes stattfindet und dort eine Überschrift reinzaubern

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.925
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von bastlwastl Beitrag anzeigen
    Ich habe leider nur keine Ahnung wie ich da ran gehen soll.
    * PHP lernen
    * jemanden einkaufen - dafür gibt es im Forum die Rubrik "Kleinaufträge"... da das primär nix mit MM zu tun hat, sollte jemand zu finden sein

  6. #6
    Contao-Nutzer
    Registriert seit
    29.12.2011.
    Beiträge
    109

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    mit
    Code:
    SELECT id FROM {{table}} ORDER BY tarif_attribut, entfernungs_attribut
    sollten die Werte geordnet nach Tarif und Anschließend nach Entfernung auftauchen - kannst Du ja in phpMyAdmin testen...
    Soweit war ich schon. Das Problem ist, dass es keine Spalte entfernungs_attribut gibt.
    Ich weiß nicht genau wie das mit dem attribute_geodistance gemacht wird.

    Ich kann nach tarif_attribut sortieren. Sobald jedoch die Umkreissuche benutzt wird geht die Sortierung verloren und es wird nach Entfernung sortiert.

    Ich könnte ja die Sortierung mit einem URL-Parameter beeinflussen.
    Die Spalte nach der Sortiert werden soll (tarif_attribut) befindet sich jedoch in der Eltern-Tabelle.

  7. #7
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.925
    User beschenken
    Wunschliste

    Standard

    du könntest Dir das Ausgabearray im Template nochmal umsortieren - aber inkl. Paginierung wird das nicht gehen bzw. Du müsstest zus. eine eigene Paginierung einbauen

    btw:

    PHP-Code:
    <?php if ($arrBasic['raw']['id'] == $arrItem['raw']['pid']): ?>

  8. #8
    Contao-Nutzer
    Registriert seit
    29.12.2011.
    Beiträge
    109

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    aber inkl. Paginierung wird das nicht gehen bzw. Du müsstest zus. eine eigene Paginierung einbauen
    Genau diese Erfahrung habe ich gemacht.

    Ich habe mir jetzt die Sortierung ziemlich dirty in der GeoDistance.php festgelegt.
    Funktioniert nun auch tadellos.

    Ich denke für eine saubere Umsetzung werde ich die Sache in Auftrag geben müssen.

    Somit hat sich das hier erstmal erledigt.

    Danke

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •