Ergebnis 1 bis 12 von 12

Thema: Filter bei Detailansicht

  1. #1
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard Filter bei Detailansicht

    Hallo zusammen,

    ich hab grad ein etwas verwirrendes Problem beim Anlegen eines Detailseitenfilters. Ich würde mich sehr freuen, wenn mir jemand helfen könnte.

    Ausgangslage:
    Itemliste inkl. referenced items in der Liste
    Über eines der referenced Items ist bereits eine Navigation aufgebaut.

    Ich suche nun einen Filter, welcher mir referenced Items ausbelendet, wenn ein beliebiger Seitenalias aufgerufen wird.

    Über einen kleinen Schubs würd ich mich freuen, da ich das Problem aktuell über eine unsaubere Abfrage im Template erledigen muss:
    Code:
    global $objPage; $alias=$objPage->alias.'.html'; $requestalias=$this->replaceInsertTags('{{env::request}}'); if ($alias == $requestalias):
    "Übersetzt" sollte der Filter folgende Funktion haben:

    • Zeige mich nicht an, sobald irgend ein alias eines beliebigen Metamodels gewählt wurde
    • Zeige mich an, wenn kein Seitenalias gewählt ist


    Ich habe versucht, aus:
    Code:
    SELECT id 
    FROM {{table}}
    WHERE season IN (
      SELECT id 
      FROM mm_season 
      WHERE
      alias={{param::get?name=auto_item}})
    den entsprechenden Filter zusammen zu bauen - jedoch kann ich über
    Code:
    {{param::get?name=auto_item}}
    lediglich einen get-parameter aus dem aktuellen Metamodel ansprechen und nicht den get-parameter aus dem Referenced item ;-(


    Hat jemand eine Idee?

    Gruß
    Hauge

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

    Standard

    Zitat Zitat von Hauge Beitrag anzeigen

    Ich suche nun einen Filter, welcher mir referenced Items ausbelendet, wenn ein beliebiger Seitenalias aufgerufen wird.
    ... hab ich noch nicht verstanden - was soll passieren?

  3. #3
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    Hi Zonky,

    1. ich habe eine Liste mit items (mm_zimmerkategorien)
    2. Jedes Item in der Liste besitzt referenced items mit 2 Ausgabefunktionen innerhalb des Templates (mm_zimmerpreise) > ausgangssituation.jpg
    Rufe ich diese Seite auf ist bis hier her alles paletti:Ausgabefunktion 1 der Referenced items ruft wie gewünscht die referenzierten items gemäß eingestelltem Filter auf (aktuelle Preise) :
    Code:
            /*Start Funktion Filter 1*/
                function getFilter1ByCustomer($strAlias, $format='html5')
                {
                  $objMetaModel = \MetaModels\Factory::byTableName('mm_zimmerpreise');
                  $objFilter = $objMetaModel->prepareFilter(78, array());
                  $objFilter->addFilterRule(new \MetaModels\Filter\Rules\SearchAttribute($objMetaModel->getAttribute('zimmerpid'), $strAlias, $objMetaModel->getAvailableLanguages()));
                  $objItems = $objMetaModel->findByFilter($objFilter);
                  return $objItems->parseAll($format, $objMetaModel->getView(62));
                  
                }
            /*Ende Funktion Filter 1*/
    
    foreach....bla bla
                            /* Ausgabe der Funktionen "Preisliste" innerhalb der Zimmeransicht */
                                /* Start Ausgabe Funktion Filter 1 */
                                    $leistung='NULL';
                                    foreach (getFilter1ByCustomer($arrItem['raw']['alias']) as $arrFilter1): 
                                        if ($leistung == $arrFilter1[$this->getFormat()]['inklusivleistungen']): 
                                        elseif ($leistung == 'NULL'):
                                            echo '<div class="groupheadline filter1">Preise '.$arrFilter1[$this->getFormat()]['inklusivleistungen'].':</div><ul class="group  filter1">';
                                            $leistung = $arrFilter1[$this->getFormat()]['inklusivleistungen'];
                                            else:
                                                $leistung = $arrFilter1[$this->getFormat()]['inklusivleistungen'];
                                            endif;                                        
                                        echo '<li><span class="label">'.$arrFilter1[$this->getFormat()]['price_category'].'</span>'.$arrFilter1[$this->getFormat()]['price'].'/'.$arrFilter1[$this->getFormat()]['aufenthaltsdauer'].'/'.$arrFilter1[$this->getFormat()]['personenzahl'].'</li>';
                                    endforeach;
                                        echo '</ul>';
                                /* Ende Ausgabe Funktion Filter 1 */
    Ausgabefunktion 2 der Referenced items ist über einen Filter so eingestellt, dass über mm_saisonkategorien (siehe Punkt 3) zunächst ein alias aufgerufen werden muss und wird somit nicht angezeigt:
    Code:
            /*Start Funktion Filter 2*/
                function getFilter2ByCustomer($strAlias, $format='html5')
                {
                  $objMetaModel = \MetaModels\Factory::byTableName('mm_zimmerpreise');
                  $objFilter = $objMetaModel->prepareFilter(86, array());
                  $objFilter->addFilterRule(new \MetaModels\Filter\Rules\SearchAttribute($objMetaModel->getAttribute('zimmerpid'), $strAlias, $objMetaModel->getAvailableLanguages()));
                  $objItems = $objMetaModel->findByFilter($objFilter);
                  return $objItems->parseAll($format, $objMetaModel->getView(62));
                  
                }
            /*Ende Funktion Filter 2*/
    foreach...bla bla
                                /* Start Ausgabe Funktion Filter 2 
                                !Achtung! -> Hier sollten wir nach einer besseren Lösung suchen!
                                */
                                    global $objPage; 
                                    $alias=$objPage->alias.'.html';
                                    $requestalias=$this->replaceInsertTags('{{env::request}}');
                                    if ($alias == $requestalias):
                                        $leistung='NULL';
                                        foreach (getFilter2ByCustomer($arrItem['raw']['alias']) as $arrFilter2): 
                                            if ($leistung == $arrFilter2[$this->getFormat()]['inklusivleistungen']): 
                                            elseif ($leistung == 'NULL'):
                                                echo '<div class="groupheadline filter2">Preise '.$arrFilter2[$this->getFormat()]['inklusivleistungen'].':</div><ul class="group  filter2">';
                                                $leistung = $arrFilter2[$this->getFormat()]['inklusivleistungen'];
                                                else:
                                                    $leistung = $arrFilter2[$this->getFormat()]['inklusivleistungen']; 
                                            endif;
                                            echo '<li><span class="label">'.$arrFilter2[$this->getFormat()]['price_category'].'</span>'.$arrFilter2[$this->getFormat()]['price'].'/'.$arrFilter2[$this->getFormat()]['aufenthaltsdauer'].'/'.$arrFilter2[$this->getFormat()]['personenzahl'].'</li>';
                                        endforeach; 
                                            echo '</ul>';
                                    endif;
                                /* Ende Ausgabe Funktion Filter 2 */

    3. Es gibt nun aber ein 3. mm (mm_saisonzeiträume) auf welches Ausgabefunktion 2 der Referenced items reagiert. > saisonzeitraeume.jpg
    • Ausgabefunktion 2 der Referenced Items (Preise nach Auswahl des Saisonzeitraumes) reagiert auch völlig korrekt und gibt bei der Auswahl eines Saisonzeitraumes die passenden Daten aus.
    • Ausgabefunktion 1 der Referenced items sollte nun ausgeblendet werden -> und genau hierfür benötige ich einen Filter, da ich diese sonst unschön über das Template killen muss (orange markierter Bereich oben in Ausgabe Funktion Filter2).


    Uff- ich hoffe Du kannst mir da folgen....
    Geändert von Hauge (08.03.2015 um 19:25 Uhr)

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

    Standard

    Zitat Zitat von Hauge Beitrag anzeigen

    3. Es gibt nun aber ein 3. mm (mm_saisonzeiträume) auf welches Ausgabefunktion 2 der Referenced items reagiert. > saisonzeitraeume.jpg
    • Ausgabefunktion 2 der Referenced Items (Preise nach Auswahl des Saisonzeitraumes) reagiert auch völlig korrekt und gibt bei der Auswahl eines Saisonzeitraumes die passenden Daten aus.
    • Ausgabefunktion 1 der Referenced items sollte nun ausgeblendet werden -> und genau hierfür benötige ich einen Filter, da ich diese sonst unschön über das Template killen muss (orange markierter Bereich oben in Ausgabe Funktion Filter2).
    was ich aus dem Block gelesen habe, dass die Preise von den Saisons abhängig sind...

    wen ja, muss entweder

    a) die Schleife im Template das Berücksichtigen

    z.B. erst Saison abfragen und je nach Ergebnis _anschließend_ per if-then die Preise

    oder

    b) in Deinem (gesamt) MetaModel

    z.B. über eine Referenzierung von Saison -> Preise bzw. Zimmer -> Saison -> Preise

    ggf. auch

    Zimmer -> Preise -> Varianten je Saison

  5. #5
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    was ich aus dem Block gelesen habe, dass die Preise von den Saisons abhängig sind...

    wen ja, muss entweder

    a) die Schleife im Template das Berücksichtigen

    z.B. erst Saison abfragen und je nach Ergebnis _anschließend_ per if-then die Preise

    oder

    b) in Deinem (gesamt) MetaModel

    z.B. über eine Referenzierung von Saison -> Preise bzw. Zimmer -> Saison -> Preise

    ggf. auch

    Zimmer -> Preise -> Varianten je Saison
    Ok, das wird jetzt für einen Pixelschubser wie mich eine Herausforderung
    Ich hätte eigentlich gerne das Ganze über einen Filter in den Filtereinstellungen gelöst per sql-Abfrage mit "Case" oder so, dann würde könnte man sich bei Änderungen die Sucherei im Template sparen.-> jedoch hab ich da noch kein zufriedenstellendes Ergebnis, da ich innerhalb sql die Abfrage nicht hinbekomme

    Nun gut, sei es wie es ist, die aktuelle Lösung von mir ist nicht wirklich zufriedenstellend und ich werde mal versuchen, Deinen Vorschlag in die Tat umzusetzen.
    Ich werde dies dann - sofern ich das lösen kann - hier posten.
    Das wird vermutlich (wie an zweiter Stelle hier im Forum) evtl. ein bisschen Zeit in Anspruch nehmen.

    Wieder mal vielen Dank für Deine Hilfe!

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

    Standard

    die ganzen Einstellungen sind natürlich von etlichen Sachen abhängig, die ich nicht kenne...

    z.B.

    * sollen sich die Preise generell je nach Saison umstellen - also aktuell noch Winter und ab 01.04. 00:00h erscheinen die Preise für Frühling
    oder
    * Preise für Winter, Frühling usw. stehen schon fest und je nach Auswahl des Buchungs-Datums wird anderer Preis angezeigt

    da gibt es viele "wenn, dann"`s, die man beachten könnte => ergo: gute Planung und Modell machen ;-)

  7. #7
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    * sollen sich die Preise generell je nach Saison umstellen - also aktuell noch Winter und ab 01.04. 00:00h erscheinen die Preise für Frühling
    oder
    * Preise für Winter, Frühling usw. stehen schon fest und je nach Auswahl des Buchungs-Datums wird anderer Preis angezeigt
    Hallo Zonky, exakt - Teil 1 (Preise nach aktueller Jahreszeit) ist bereits mit dem Filter von referenz 1 eingebaut.
    Da hab ich dann "Witterung aufgenommen".
    Teil 2 ist ein super hinweis! -> da habt Ihr hier ja irgendwo einen Thread auf mit "get-Parameter für Filter verwenden" oder so.

    Perfekt - da gibt es in der nächsten Zeit ne Menge zu entdecken! Danke.

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

    Standard

    Zitat Zitat von Hauge Beitrag anzeigen
    Teil 2 ist ein super hinweis! -> da habt Ihr hier ja irgendwo einen Thread auf mit "get-Parameter für Filter verwenden" oder so.
    zu GET-Parameter: habe das bisher nur in "Eigenes SQL" eingesetzt => Beispiele in der Hilfe beim Query-Eingabefeld {{param::filter...}}

    zu Teil 2: man muss irgendwie ein "Fallback" bauen, für eine Buchungszeit, die noch nicht eingepflegt ist - z.B. Datum nicht wählbar, unverb. "Defaultpreis", Fehlermeldung...

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

    Standard

    zu Teil 1: die Sache ist nicht trivial... ich habe eine ähnliche Aufgabenstellung bei einer Speisenkarte, in der sich monatlich einige - nicht alle - Preise ändern und einige Speisen sich austauschen (Monatsangebot).

    Bei Dir ist das ein "saisonaler Grundpreis" und ggf. noch Zu-/Abschläge oder Sonderkonditionen.

    sowas http://www.oxidmodule.com/OXID-Profe...r-Oxid-PE.html wäre ggf. ein ganz gute Ansatz

  10. #10
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    Hallo Zonky,
    im Prinzip wäre das auch in einfacher Form auf den typischen Pizzafall übertragbar wobei die Zutaten lediglich mit unterschiedlichen Variablen ersetzt werden (Zeiträume, Aufenthaltsdauer, (Allergene ), etc.).

    Bei Isotope hat sich hier in letzter Zeit über den neuen Options-Manager was getan - jedoch ist dieser für meinen Fall im Backend nicht userfreundlich genug, da es sich ja nicht um einen Produktshop handelt und die Ladezeit im FE explodiert dadurch geradezu.

    Ich werde mir jetzt mal die Möglichkeiten des Filters näher ansehen.

    Eine Frage am Rande: lässt Du die Speisekarte vom User über eine Merkliste zusammen bauen?

    Gruß
    Hauge

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

    Standard

    Zitat Zitat von Hauge Beitrag anzeigen
    im Prinzip wäre das auch in einfacher Form auf den typischen Pizzafall übertragbar wobei die Zutaten lediglich mit unterschiedlichen Variablen ersetzt werden (Zeiträume, Aufenthaltsdauer, (Allergene ), etc.).
    Die Preisberechnung bezüglich unterschiedlicher Daten scheint mir komplexer zu sein und ich glaube, mit den "Pizza-Optionen" kommt man da nicht weit.

    In Deinem Fall kann es ja durchaus den Fall geben, dass z.B. ab 01.06.2015 die Sommerpreise gelten bis zum 30.09.2015. 01.10.2015 bis 30.11.2015 Herbst und 01.12.2015 bis.... Winter...

    ...wenn man aber bis zum 15.05.2015 für 01.06. bis 30.06.15 bucht, bekommt man 15% Rabatt...

    usw.

    ach und Speisenkarte: da habe ich bisher nur die Allergene in MM - beim Rest bin ich noch am überlegen...

  12. #12
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard

    Code:
    ...wenn man aber bis zum 15.05.2015 für 01.06. bis 30.06.15 bucht, bekommt man 15% Rabatt...
    ...da hast wieder mal Recht: Frühbucher, Last-Minute, Restplätze usw. sind da noch gar nicht berücksichtigt.
    Das wäre dann sozusagen die "rabattierte Saisonpizza mit Sondernachlass"

    Mhh, nun gut - ich bin jetzt auf alle Fälle schon mal ganz froh, dass mm den aktuellen Stand hergibt und ich mich nun langsam aber sicher ohne Bugs an komplexere Strukturen wagen kann...

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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