Ergebnis 1 bis 9 von 9

Thema: Attribute-loop im Frontend

  1. #1
    Contao-Nutzer Avatar von pixxer
    Registriert seit
    22.06.2011.
    Ort
    Wetzikon CH
    Beiträge
    54

    Standard Attribute-loop im Frontend

    Hallo zusammen


    Ich arbeite zur Zeit an einem Shop der viele unterschiedliche Produkte verkaufen wird. Für all die unterschiedlichen Produkte habe ich entsprechende Attribute erfasst. Nun möchte ich aber nicht zig unterschiedliche Templates für all die Attribute generieren sondern ein einzelnes Reader-Template in dem ich an einer Position eine Tabelle oder Liste mit all den Attributen ausgeben möchte die noch nicht gerendert wurden.

    So dass ich Name, Bilder, Teaser, Beschreibung usw. - also alles was bei jedem Produkt vorkommt fix im Template positionieren kann und dann in einer zusätzlichen Box eine Art Auflistung je nach Produkttyp. Und in dieser Auflistung sämtliche Attribute abzufragen und wenn nicht null dann ausgeben scheint mir nicht die sauberste Lösung zu sein.

    Ich hoffe ihr versteht was ich meine und könnt mich auf den Richtigen Weg bringen.


    MfG

  2. #2
    Contao-Nutzer Avatar von Monique Hahnefeld
    Registriert seit
    22.11.2011.
    Ort
    Berlin
    Beiträge
    173

    Frage

    Hallo pixxer,

    das geht auf jeden Fall zu machen. Was genau ist deine Frage? Oder was genau fehlt dir zur Umsetzung deiner Vorstellung?
    Achso Contao- und Isotope-Version wären noch interessant
    Curiosity killed the cat

  3. #3
    Contao-Nutzer Avatar von pixxer
    Registriert seit
    22.06.2011.
    Ort
    Wetzikon CH
    Beiträge
    54

    Standard

    Hallo Monique


    Danke für die schnelle Rückmeldung. Also ich arbeite mit Contao 3.2.9 (ich weiss, müsste mal ein update machen) und Isotope 2.1.0.

    Also, zu meiner Frage, bzw. Problem.

    Wenn ich ein print_r auf $this mache sehe ich schön alle Werte die ich benötige im Array [arrData: protected].
    Nun müsste ich eine möglichkeit haben sämtliche Attribute die ich noch nicht explizit gerendert habe (Titel, Bilder, Beschreibung, Art.-Nr., Preis sind im Teplate bereits ausgegeben) in einer foreach auszugeben. Evtl. noch mit der Möglichkeit sachen die ich nicht benötige auszuschliessen.

    Ich sehe einfach eine grosse Menge an unterschiedlichen Attributen pro Produkt(Typ) auf mich zu kommen und möchte eigentlich mit einem Template für alles arbeiten ohne dass ich jedes Attribut explizit abfragen muss ob es vorhanden bzw. nicht leer ist.


    Gruss claudio

  4. #4
    Contao-Nutzer Avatar von Monique Hahnefeld
    Registriert seit
    22.11.2011.
    Ort
    Berlin
    Beiträge
    173

    Computer

    Hi pixxer,

    ich habe hier mal eine Schleife geschrieben.
    Mit $this->product->getAttributes(),$this->product->getVariantAttributes() gibt dir Isotope Arrays aus wo nur die Attribute drin sind die der jeweilige Produkttyp hat.
    PHP-Code:
    <?php 
    foreach(array_unique(array_merge($this->product->getAttributes(),$this->product->getVariantAttributes())) as $attr){
        if(
    $this->$attr&&$this->$attr!==""){
            if(
    $attr=='published'||$attr=='type'){    continue;}
            echo 
    'LABEL:'.$GLOBALS["TL_LANG"]["tl_iso_product"][$attr][0].'<br>';
            
    //RAW gibt ID aus falls eine existiert, wie bei type
            //entspricht auch $this->product->$attr und $this->arrData[$attr]);
            
    echo 'RAW '.$attr.':'.$this->raw[$attr].'<br>';
            if(
    $attr=='images'){
                echo 
    $this->getGallery('images')->generateMainImage();     
                continue;}
            if(
    $attr=='price'){
                echo 
    $this->generatePrice(); 
                continue;
            }    
            echo 
    'GENERATE '.$attr.': '.$this->generateAttribute($attr) .'<br>';
            
        }
        
    }
    Reicht das für dein Vorhaben oder fehlt da noch was?

    Grüße
    Geändert von Monique Hahnefeld (18.02.2015 um 19:31 Uhr)
    Curiosity killed the cat

  5. #5
    Contao-Nutzer Avatar von pixxer
    Registriert seit
    22.06.2011.
    Ort
    Wetzikon CH
    Beiträge
    54

    Standard

    Hallo Monique

    Endlich komme ich mal wieder dazu an meinem Projekt weiter zu arbeiten.
    Danke für deinen Ansatz mit den Attributen. Ich habe auf deiner Basis beinahe mein gewünschtes Ziel erreicht.
    Mit dem unten angefügten Code schlaufe ich durch sämtliche Attribute welche nicht zum Allgemeinen Produkt gehören und ich noch nicht direkt im Template ausgebe.
    Damit kann ich eine schöne Auflistung erstellen - klar, muss ich sobald die Ausgabe klappt noch mehr als ein <br> zum stylen nehmen .

    Einzig das Label bleibt noch Leer in dieser Schlaufe da ja nun nur noch selbst erfasste Attribute ausgegeben werden (und diese unter dem "$GLOBALS["TL_LANG"]..."-Befehl nicht gefunden werden.
    Gibt es da noch eine Möglichkeit an das Label bzw. den Namen des Attributes zu kommen welchen ja man beim Erstellen eines Attributes als erste Feld erfasst? "$this->getName($attr)" oder so funktioniert leider nicht


    PHP-Code:
    <?php  
        
    foreach(array_unique(array_merge($this->product->getAttributes(),$this->product->getVariantAttributes())) as $attr){ 
            if(
    $this->$attr
            
    &&$this->$attr!==""
            
    &&$attr!='sku'
            
    &&$attr!='alias'
            
    &&$attr!='name'
            
    &&$attr!='description'
            
    &&$attr!='images'
            
    &&$attr!='teaser'
            
    &&$attr!='price'
            
    &&$attr!='start'
            
    &&$attr!='stop'){
                if(
    $attr=='published'||$attr=='type'){    continue;}
                echo 
    'LABEL:'.$GLOBALS["TL_LANG"]["tl_iso_product"][$attr][0].'<br>'
                echo 
    'RAW '.$attr.':'.$this->raw[$attr].'<br>';  
                echo 
    'GENERATE '.$attr.': '.$this->generateAttribute($attr) .'<br>'
                
            } 
             
        }
    ?>
    Gruss claudio

  6. #6
    Contao-Nutzer Avatar von pixxer
    Registriert seit
    22.06.2011.
    Ort
    Wetzikon CH
    Beiträge
    54

    Standard

    So, ich habe die Lösung:
    Hier also den Finalen Code. Danke für euere Mithilfe.

    HTML-Code:
    <table class="table table-condensded table-striped">
    	<tbody>
    		<?php foreach(array_unique(array_merge($this->product->getAttributes(),$this->product->getVariantAttributes())) as $attr): ?>
    			<?php if($this->$attr
    			    &&$this->$attr!==""
    			    &&$attr!='sku'
    			    &&$attr!='alias'
    			    &&$attr!='name'
    			    &&$attr!='description'
    			    &&$attr!='images'
    			    &&$attr!='teaser'
    			    &&$attr!='price'
    			    &&$attr!='start'
    			    &&$attr!='stop'
    			    &&$attr!='published'
    			    &&$attr!='type'): ?>
    			    <?php $objAttribute = $GLOBALS['TL_DCA']['tl_iso_product']['attributes'][$attr]; ?>
    			    <tr>
    			        <td><?php echo $objAttribute->name; ?></td>
    			        <td><?php echo $this->generateAttribute($attr); ?></td>
    			    </tr>
                <?php endif; ?>
    		<?php endforeach; ?>
    	</tbody>
    </table>

  7. #7
    Contao-Nutzer Avatar von cgreiss
    Registriert seit
    02.05.2011.
    Ort
    Lübeck
    Beiträge
    16

    Standard Isotope Attribut als Select-Menü, wie an die labels der Options kommen?

    Hallo,

    das ist eine schöne Sache soweit, die gut funktioniert. Bei Select-Menüs als Attribut fehlt ein wenig und ich finds nicht raus...

    Ich nutze Contao 3.4.4 und isotope 2.2

    Ich habe keine Varianten, aber ein Attribute "farbe" mit einem Select-Menü mit 3 Optionen (Rot, grün, blau).

    Der Code gibt mir nun aus: Farbe.......3

    Die 3 ist die id in der Tabelle tl_iso_attribute_option. In dieser Tabelle steckt auch das Feld "label", da steht dann "grün" drinne.

    Auch der inserttag {{product::farbe}} liefert eine 3 anstatt des entsprecheneden Labels.

    Wie kommt man an das/die label der options der sttribute ran???

    In den templatevars finde ich auch nur die "3". Wahrscheinlich ist die Frage ganz allgemein zu beantworten, indem man einfach diese Tabellenrelation auflöst, aber auch das weiß ich nicht.

    Vielen Dank für die Hilfe!

  8. #8
    Contao-Nutzer
    Registriert seit
    14.10.2013.
    Beiträge
    8

    Standard

    Zitat Zitat von cgreiss Beitrag anzeigen
    Hallo,

    Auch der inserttag {{product::farbe}} liefert eine 3 anstatt des entsprecheneden Labels.

    Wie kommt man an das/die label der options der sttribute ran???

    Vielen Dank für die Hilfe!
    Würde mich auch interessieren. Gibt es da zwischenzeitlich eine Lösung?

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

    Standard

    Zitat Zitat von cgreiss Beitrag anzeigen
    Hallo,

    Ich habe keine Varianten, aber ein Attribute "farbe" mit einem Select-Menü mit 3 Optionen (Rot, grün, blau).

    Der Code gibt mir nun aus: Farbe.......3

    Die 3 ist die id in der Tabelle tl_iso_attribute_option. In dieser Tabelle steckt auch das Feld "label", da steht dann "grün" drinne.
    kleine zus. Funktion: https://community.contao.org/de/show...l=1#post355958

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
  •