Ergebnis 1 bis 26 von 26

Thema: Katalogliste mit Accordion

  1. #1
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    293

    Standard Katalogliste mit Accordion

    Hallo,

    ich suche eine Lösung für das folgende Problem:

    Ich möchte die Katalogitems nach Kategorien sortiert als Accordion darstellen. D. h. nach Klick auf die Kategorie werden die Items angezeigt.
    Als Vorlage dient mir ein modifiziertes catalog_simple.tpl.
    Dieses habe ich so angepasst, dass das Accordion erstmal funktioniert.
    Aber das geht nur, solange je Kategorie nur ein Item vorhanden ist. Sobald es mehr sind, funzt das Accordion nicht mehr.
    Mein catalog_simple.tpl sieht im Moment so aus:
    Code:
    <?php if (count($this->entries)): ?>
       <?php $lastcat=''; ?>
       <div class="layout_simple">
       <?php foreach ($this->entries as $entry): ?>
          <?php if ($lastcat!=$entry[data]['Kategorie']['value']): ?>
             <?php $lastcat=$entry[data]['Kategorie']['value']; ?>
             <div class="cat toggler"><?php echo $entry[data]['Kategorie']['value']; ?></div>
             <div class="accordion"><div>
          <?php endif; ?>
          <div class="floatbox item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
          <?php foreach ($entry['data'] as $field=>$data): ?>
             <?php if ($field=='Kategorie') continue; ?>
             <?php if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
                <div class="field <?php echo $field; ?>">
                <div class="label"><?php echo $data['label']; ?></div>
                <div class="value"><?php echo $data['value']; ?></div>
                </div>
             <?php endif; ?>
          <?php endforeach; ?>
          <?php if ($entry['showLink'] && $entry['link']): ?>
             <div class="link"><?php echo $entry['link']; ?></div>
          <?php endif; ?>
          <?php if ($entry['linkEdit']): ?>
             <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
          <?php endif; ?>
          </div></div></div>
       <?php endforeach; ?>
       </div>
    <?php else: ?>
       <?php if ($this->condition): ?>
          <div class="condition"><?php echo $this->condition; ?></div>
       <?php else: ?>
          <p class="info">There are no entries matching your search.</p>
       <?php endif; ?>
    <?php endif; ?>
    Ich bin leider nicht der PHP-Crack und habe bisher nicht herausgefunden wo hier der Haken ist.

    Hier noch der entsprechende Link zur Seite.

    Kann jemand helfen?

    Ignatz

  2. #2
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Hi,
    gibt hier zwei Möglichkeiten:

    1. Der gesamte Katalog wird in einem Accordion dargestellt. (mod_cataloglist muss modifiziert werden)
    2. Die Einträge des Katalogs werden in einem Accordion dargestellt. (catalog_* layout muss modifiziert werden)
    (3). Beides in einem verschachtelten Accordion.

    Du willst 1., richtig?

    PHP-Code:

    <?php if (!$this->searchable): ?>
    <!-- indexer::stop -->
    <?php endif; ?>
    <div class="<?php echo $this->class?> block"<?php echo $this->cssID?><?php if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>
    <?php if ($this->headline): ?>

    <div class="toggler"><<?php echo $this->hl?>><?php echo $this->headline?></<?php echo $this->hl?>></div>
    <?php endif; ?>
    <span class="total"><?php echo $this->total?></span>

    <?php if ($this->editEnable): ?>
    <div class="addUrl"><a href="<?php echo $this->addUrl?>">Add New Item</a></div>
    <?php endif; ?>

    <div class="accordion">
    <?php echo $this->catalog?>
    <?php 
    echo $this->pagination?>
    </div>

    </div>
    <?php if (!$this->searchable): ?>
    <!-- indexer::continue -->
    <?php endif; ?>
    -> Die Überschrift ist der Toggler.

    Das sollte passen.
    Einfach das template in mod_cataloglist_accordion.tpl umbennen, Code rein und im Katalog-Liste Modul auswählen.

    Probier mal obs gleich passt.

    Grüße,
    Tim
    Geändert von Tim G (25.03.2011 um 12:56 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  3. #3
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    293

    Standard

    Hallo Tim G,

    nicht der gesamte Katalog soll ein Accordion sein, sondern nur die Kategorien. Will heißen, wenn ich die Seite aufrufe, sehe ich untereinander die Kategorien. Klicke ich dann auf eine dieser, so öffnet sich das Accordion mit den Items, die zu dieser Kategorie gehören. Also die Kategorie ist der Toggler.

    Nach deiner Beschreibung eigentlich 2.)

    Hoffe, das ist verständlich und nicht verdrückt ausgekehrt.

    Gruß,
    Ignatz

  4. #4
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Ah ok,
    und die Kategorien sind ein Feld innerhalb des Kataloges.

    Ich baus mal schnell um...
    dann warste oben ja schon ganz nah.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  5. #5
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Hi,
    du warst schon auf dem richtigen Weg:

    PHP-Code:
    <?php if (count($this->entries)): ?>
    <?php $togglerFieldName 
    'project_name'?>
    <div class="layout_simple ce_accordion">


    <?php foreach ($this->entries as $entry): ?>
    <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''?>">
    <div class="toggler"><h3><?php echo $entry['data'][$togglerFieldName]['value']; ?></h3></div>

    <div class="accordion">
    <?php foreach ($entry['data'] as $field=>$data): ?>
    <?php 
    if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>

    <?php if($field != $togglerFieldName): ?>
    <div class="field <?php echo $field?>">
        <div class="label"><?php echo $data['label']; ?></div>
        <div class="value"><?php echo $data['value']; ?></div>
    </div>
    <?php endif; ?>

    <?php endif; ?>
    <?php 
    endforeach; ?>

    <?php if ($entry['showLink'] && $entry['link']): ?>
    <div class="link"><?php echo $entry['link']; ?></div>
    <?php endif; ?>
    <?php 
    if ($entry['linkEdit']): ?>
    <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
    <?php endif; ?>
    </div>

    </div>

    <?php endforeach; ?>
    </div>
     
    <?php else: ?>

    <?php if ($this->condition): ?>
    <div class="condition"><?php echo $this->condition?></div>
    <?php else: ?>
    <p class="info">There are no entries matching your search.</p>
    <?php endif; ?>

    <?php endif; ?>
    Ich hab oben eine Variable drin, die den Namen des Feldes beschreibt, das als Toggler dienen soll. In meinem Fall heisst das Feld 'project_name' -> es ist auch das erste der Liste

    In der ersten foreach - Schleife (Abhängig von der Anzahl an Katalog-Einträgen). Wird jeweils mit dem auserkorenen Feldnamen der Toggler gebildet und das accordion div.

    Innerhalb des accordion divs läuft dann die zweite Schleife, die die Felder ausgibt.
    Damit man hier keine Dopplungen mit dem Toggler Feld hat, wird dieses einfach ausgeschlossen. <?php if($field != $togglerFieldName): ?>


    Werd ich gleich mal aufheben das Template

    Grüße,
    Tim

    ps. war noch nen kleiner Schönheitsfehler drin.
    Jetzt werden auch wieder die item divs samt Klasse erstellt.
    Geändert von Tim G (25.03.2011 um 14:06 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  6. #6
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    293

    Standard

    Hallo Tim,

    das sieht schon gut aus!
    Allerdings wird für jedes Item einer Kategorie auch die Kategorie wiederholt.
    Siehe Link im ersten Post.
    Diese soll natürlich nur einmal, quasi als Überschrift angezeigt werden.

    Gruß,
    Ignatz

  7. #7
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Ah ja,
    das wird schwierig.

    Du willst das ganze jetzt noch in die richtigen Schubladen sortiert haben.
    Die Schwierigkeit ist, das wir von oben nach unten, ganz stupide, durchlaufen und immer wenn der bestimmte Eintrag gefunden wurde den toggler erstellen.

    Problem ist. Das erste Element gehört in Kategorie 1, das 2. z.B. in Kategorie 2 und das 3. wieder in 1.

    Man müsste also vorher den kompletten Datensatz sortieren (eine geordnete Liste drausmachen), da das nachträglich in die Schublade legen nicht geht bzw. sehe ich grad nicht wie

    Mal schauen, ob man nicht einfach vorher nach den verwendeten Kategorien sortieren kann und dann arbeiten wir die Liste ab.

    Oder vorher neue Arrays erstellen und diese dann ausgeben, das sollte klappen.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  8. #8
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    293

    Standard

    Hallo Tim,

    danke für deine Mühe. Denke bitte nicht, dass ich dich alleine arbeiten lasse. Ich bin auch weiter dran, habs aber bisher nicht lösen können.
    Dieses Template sortiert ja bereits die Items nach Kategorien, zeigt also eine Kategorie als Überschrift und darunter die zugehörigen Items an.

    Das Ganze wollte ich eben nur als hübsches Accordion anlegen ;-)

    Gruß,
    René

  9. #9
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Cool,
    das ist ja schon mal die halbe Miete.

    Gucken wir uns das mal an. Das war dein erstes Template. Sorry, war ich bissel forsch.
    So etwas ähnliches kann ich eh gebrauchen und für heut ist eh Feierabend - da schadet bissel basteln nicht.

    PHP-Code:
    <?php
    $fieldName 
    'category';
    if (
    count($this->entries)):
       
    $lastcat=''?>
       <div class="layout_simple">
       <?php foreach ($this->entries as $entry):
          if (
    $lastcat!=$entry[data][$fieldName]['value']):
             
    $lastcat=$entry[data][$fieldName]['value']; ?>
             <div class="cat toggler"><?php echo $entry[data][$fieldName]['value']; ?></div>
          <?php endif; ?>
          <div class="accordion">
          <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''?>">
          <?php foreach ($entry['data'] as $field=>$data):
             if (
    $field==$fieldName) continue;
             if (!
    in_array($field, array('catalog_name','parentJumpTo'))): ?>
                <div class="field <?php echo $field?>">
                <div class="label"><?php echo $data['label']; ?></div>
                <div class="value"><?php echo $data['value']; ?></div>
                </div>
             <?php endif;
          endforeach;
          if (
    $entry['showLink'] && $entry['link']): ?>
             <div class="link"><?php echo $entry['link']; ?></div>
          <?php endif;
          if (
    $entry['linkEdit']): ?>
             <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
          <?php endif; ?>
          </div>
          </div>
       <?php endforeach; ?>
       </div>
    <?php else:
       if (
    $this->condition): ?>
          <div class="condition"><?php echo $this->condition?></div>
       <?php else: ?>
          <p class="info">There are no entries matching your search.</p>
       <?php endif;
    endif;
    ?>
    Oben den Feldnamen deiner Kategorie-Felder eintragen.
    Geändert von Tim G (25.03.2011 um 14:55 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  10. #10
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Bei mir verschluckt der Einträge, bei Dir auch?
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  11. #11
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    293

    Standard

    Es wird schon wärmer

    Aber so ganz ist es noch nicht, wo's hin soll.
    Wir haben zwar jetzt einen Toggler, aber darunter mehrere <div class="accordion"....

  12. #12
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Moin,
    ist gelöst!
    Das Script im Wiki ist nicht verkehrt, man muss allerdings die Einträge der Reihe nach anlegen. Alle Einträge für Kat. 1 hintereinander, dann für Kat. 2. Sonst klappt die Sammlung auch nicht und die Liste wird verkehrt erstellt:

    Kat. 1
    Kat. 2
    Kat. 1

    Ich hab das mal grundlegend umgebaut mit einem Array, der erst alle nötigen Kategorien erstellt und dann den jeweiligen Kategorien die Einträge einsortiert.
    So ist es egal ob der erste Eintrag in Kat. 1 ist, der 2. in Kat. 3, der dritte wieder in Kat. 1 und der vierte in Kat. 2. So wie man sich das halt vorstellt.

    Ich reiche dem toggler und dem accordion noch den Namen der Kategorie als Klasse weiter, dann kann man auch sehr komfortabel die styles anpassen.

    Optimal wäre wenn noch wenn ein Wert für die Sortierung mitgeliefert werden würde, dann könnte man die Sortierung noch beinflussen.

    PHP-Code:

    <?php if (count($this->entries)): ?>

    <?php
    $fieldName 
    'category'// field name for creating collections
    $arrCategories = array(); // collects all catalog entries
    $arrSorted = array(); // collects all sorted catalog entries
    $index 0;
    foreach(
    $this->entries as $entry)
    {
        
    $act $entry['data'][$fieldName]['value'];
        
        
    // check if category already exists / or not
        
    if( array_key_exists($actarray_flip($arrCategories) ) )
        {
            
    $arrSorted[$act][] = $entry// fill existing category node
            
    $index++;
        } 
        else 
        {
            if( !
    strlen($act) ) // Incase entry has no categorie selected, build free category
            
    {
                
    $act 'Ohne Kategorie';
            }
            
            
    $arrSorted[$act][0] = $entry// create new category node
        
    }
        
    $arrCategories[] = $entry['data'][$fieldName]['value'];
    }
    ?>

    <?php foreach($arrSorted as $k => $entries): ?>
    <div class="layout_simple block ce_accordion">
        <div class="toggler <?php echo str_replace(' '''$k); ?>"><h3><?php echo $k?></h3></div>
        <div class="accordion <?php echo str_replace(' '''$k); ?>">
        <?php foreach($entries as $entry): ?>
            <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''?>">
            
            <?php foreach($entry['data'] as $field => $data): ?>
            <?php if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
                <?php if($field == $fieldName) continue; ?>            
                <div class="field <?php echo $field?>">
                    <div class="label"><?php echo $data['label']; ?></div>
                    <div class="value"><?php echo $data['value']; ?></div>
                </div>
                
            <?php endif; ?>
            <?php endforeach; ?>
            </div>
            
        <?php endforeach; ?>
        </div>
        
        <?php if ($entry['showLink'] && $entry['link']): ?>
        <div class="link"><?php echo $entry['link']; ?></div>
        <?php endif; ?>
        <?php if ($entry['linkEdit']): ?>
        <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
        <?php endif; ?>
        </div>
        
    <?php endforeach; ?>
    </div>

    <?php else: ?>

    <?php if ($this->condition): ?>
    <div class="condition"><?php echo $this->condition?></div>
    <?php else: ?>
    <p class="info">There are no entries matching your search.</p>
    <?php endif; ?>

    <?php endif; ?>

    Probiers mal aus,
    Tim

    ps. ok man könnte sich das sorting aus der DB saugen.
    Angehängte Dateien Angehängte Dateien
    Geändert von Tim G (26.03.2011 um 09:41 Uhr)
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  13. #13
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Um das ganze komplett zu machen:
    Hier das ganze mit Sortierung nach der Kategorie-Spalte in der tl_taxonomy Tabelle.
    Ganz oben in der Variablen $fieldName den Namen des Kategorie-Feldes eintragen.
    Der Rest sollte von selbst passieren.

    PHP-Code:

    <?php if (count($this->entries)): ?>

    <?php
    $fieldName 
    'category'// field name for creating collections
    $emptyCategoryName 'Ohne Kategorie'// create a seperate category for all items that are not selected in category
    $arrCategories = array(); // collects all catalog entries
    $arrSorted = array(); // collects all sorted catalog entries
    $index 0;
    foreach(
    $this->entries as $entry)
    {
        
    $act $entry['data'][$fieldName]['value'];
        
    // check if category already exists / or not
        
    if( array_key_exists($actarray_flip($arrCategories) ) )
        {
            
    $arrSorted[$act][] = $entry// fill existing category node
            
    $index++;
        } 
        else 
        {
            if( !
    strlen($act) ) // Incase entry has no categorie selected, build free category
            
    {
                
    $act $emptyCategoryName;
            }
            
    $arrSorted[$act][0] = $entry// create new category node
        
    }
        
    $arrCategories[] = $entry['data'][$fieldName]['value'];
    }

    /**
     * Get category sorting from tl_taxonomy
     */
    $catalog $this->entries[0]['tablename'];
    $arrCategorySorted = array();
    foreach(
    $this->entries as $entry)
    {
        
    $this->import('Database');
        
    $objField $this->Database    ->prepare("SELECT $fieldName FROM $catalog WHERE id=?")
                                    ->
    limit(1)
                                    ->
    execute($entry['id']);
        if(!
    $objField->numRows) continue;
        
    $taxId $objField->$fieldName;
        
        
    $objField $this->Database    ->prepare("SELECT sorting, name FROM tl_taxonomy WHERE id=?")
                                       ->
    limit(1)
                                    ->
    execute($taxId);
        if(!
    $objField->numRows) continue;
        
    $sorting $objField->sorting;
        
    $category $objField->name;
        
        if( 
    array_key_exists($category$arrSorted ) )
        {
            
    // Remember sorting number in first element of each category
            
    $arrSorted[$category][0]['data'][$fieldName]['sorting'] = $sorting;
            
    $arrCategorySorted[$sorting] = $arrSorted[$category];
        }
    }

    // Sort
    ksort($arrCategorySorted);
    ?>

    <?php foreach($arrCategorySorted as $key => $entries): ?>
    <div class="layout_simple block ce_accordion">
        <div class="toggler <?php echo str_replace(' '''$key); ?>"><h3><?php echo $entries[0]['data'][$fieldName]['value']; ?></h3></div>
        <div class="accordion <?php echo str_replace(' '''$key); ?>">
        
        <?php foreach($entries as $entry): ?>
            
            <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''?>">
            <?php foreach($entry['data'] as $field => $data): ?>
            <?php if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
                <?php if($field == $fieldName) continue; ?>            
                <div class="field <?php echo $field?>">
                    <div class="label"><?php echo $data['label']; ?></div>
                    <div class="value"><?php echo $data['value']; ?></div>
                </div>
            <?php endif; ?>
            <?php endforeach; ?>
            </div>
            
        <?php endforeach; ?>
        </div>
        
        <?php if ($entry['showLink'] && $entry['link']): ?>
        <div class="link"><?php echo $entry['link']; ?></div>
        <?php endif; ?>
        <?php if ($entry['linkEdit']): ?>
        <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
        <?php endif; ?>
        </div>
        
    <?php endforeach; ?>
    </div>

    <?php else: ?>

    <?php if ($this->condition): ?>
    <div class="condition"><?php echo $this->condition?></div>
    <?php else: ?>
    <p class="info">There are no entries matching your search.</p>
    <?php endif; ?>

    <?php endif; ?>

    Viel Spaß damit,
    Der Tim
    Angehängte Dateien Angehängte Dateien
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  14. #14
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    293

    Standard

    Hallo Tim,

    erst einmal vielen Dank! Das funktioniert tatsächlich. Ich habe dein Template zwar für meine Bedürfnisse etwas angepasst, aber jetzt tut es, was es soll. Ich schätze, das könnte einige interessieren.
    Hier mein angepasstes Template:
    PHP-Code:
    <?php if (count($this->entries)): ?>

    <?php
    $fieldName 
    'Kategorie'// field name for creating collections
    $emptyCategoryName 'Ohne Kategorie'// create a seperate category for all items that are not selected in category
    $arrCategories = array(); // collects all catalog entries
    $arrSorted = array(); // collects all sorted catalog entries
    $index 0;
    foreach(
    $this->entries as $entry)
    {
        
    $act $entry['data'][$fieldName]['value'];
        
    // check if category already exists / or not
        
    if( array_key_exists($actarray_flip($arrCategories) ) )
        {
            
    $arrSorted[$act][] = $entry// fill existing category node
            
    $index++;
        } 
        else 
        {
            if( !
    strlen($act) ) // Incase entry has no categorie selected, build free category
            
    {
                
    $act $emptyCategoryName;
            }
            
    $arrSorted[$act][0] = $entry// create new category node
        
    }
        
    $arrCategories[] = $entry['data'][$fieldName]['value'];
    }

    /**
     * Get category sorting from tl_taxonomy
     */
    $catalog $this->entries[0]['tablename'];
    $arrCategorySorted = array();
    foreach(
    $this->entries as $entry)
    {
        
    $this->import('Database');
        
    $objField $this->Database    ->prepare("SELECT $fieldName FROM $catalog WHERE id=?")
                                    ->
    limit(1)
                                    ->
    execute($entry['id']);
        if(!
    $objField->numRows) continue;
        
    $taxId $objField->$fieldName;
        
        
    $objField $this->Database    ->prepare("SELECT sorting, name FROM tl_taxonomy WHERE id=?")
                                       ->
    limit(1)
                                    ->
    execute($taxId);
        if(!
    $objField->numRows) continue;
        
    $sorting $objField->sorting;
        
    $category $objField->name;
        
        if( 
    array_key_exists($category$arrSorted ) )
        {
            
    // Remember sorting number in first element of each category
            
    $arrSorted[$category][0]['data'][$fieldName]['sorting'] = $sorting;
            
    $arrCategorySorted[$sorting] = $arrSorted[$category];
        }
    }

    // Sort
    ksort($arrCategorySorted);
    ?>

    <?php foreach($arrCategorySorted as $key => $entries): ?>
    <div class="layout_simple block ce_accordion">
        <div class="toggler"><?php echo $entries[0]['data'][$fieldName]['value']; ?></div>
        <div class="accordion"> 
        
        <?php foreach($entries as $entry): ?>
            
            <div class="floatbox item">
            <?php foreach($entry['data'] as $field => $data): ?>
            <?php if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
                <?php if($field == $fieldName) continue; ?>            
                
                    <div class="name"><?php echo $data['value']; ?></div>
                    <div class="link"><?php echo $entry['link']; ?></div>
                
            <?php endif; ?>
            <?php endforeach; ?>
            </div>
            
        <?php endforeach; ?>
        </div>
      </div>
        
    <?php endforeach; ?>


    <?php else: ?>

    <?php if ($this->condition): ?>
    <div class="condition"><?php echo $this->condition?></div>
    <?php else: ?>
    <p class="info">There are no entries matching your search.</p>
    <?php endif; ?>

    <?php endif; ?>
    Ich habe ein paar von mir nicht benötigte Funktionalitäten entfernt. Wichtig war, den Link mit in die innere Schleife zu nehmen, sonst hatte nur jeweils das letzte Item einer Kategorie diesen Link, jetzt hat ihn jedes Item. Außerdem habe ich festgestellt, dass das Accordion-Script das <h3>-Tag im Toggler-div nicht mag. Erst nachdem ich es entfernte, hat das Accordion funktioniert.
    Die floatbox-Klasse kommt übrigens vom Yaml-Framework und ist nur für meine die CSS-Anpassung nötig.

    Ich habe auch die Kategorie-Namen als Klasse entfernt, mit deinem zweiten Template ergeben sich dort seltsamerweise Zahlen - 128, 256, 512 usw. Diese Zahlenfolge kommt mir bekannt vor Beim ersten Template hat es noch funktioniert. Auch müsste man eventuell die Kategorienamen mit regulären Ausdrücken filtern, denn ich hatte in einem Kategorienamen ein "&" in der Klasse und das hat der Validator angemeckert.

    Ansonsten nochmal ein großes DANKESCHÖN! Das hätte ich nicht hinbekommen.
    Jetzt das Ganze noch mit CSS etwas aufgehübscht und es läuft.

    Gruß,
    Ignatz

  15. #15
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Prima,
    stellt beim 2. hab ich vergessen ne richtige klasse einzusetzen.
    Das war so zwischen Tür und Angel.
    Bessere ich morgen noch aus.
    Dann ist es super.


    Sent from my iPhone using Tapatalk
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  16. #16
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard Katalogliste mit Kategorie-Sammlung und Accordion

    Bitte schön:
    Mit sauberer Klassenvergabe. (& Zeichen etc. werden ersetzt und Leerzeichen entfernt).

    PHP-Code:

    <?php if (count($this->entries)): ?>

    <?php
    $fieldName 
    'category'// field name for creating collections
    $emptyCategoryName 'Ohne Kategorie'// create a seperate category for all items that are not selected in category
    $arrCategories = array(); // collects all catalog entries
    $arrSorted = array(); // collects all sorted catalog entries
    $index 0;
    foreach(
    $this->entries as $entry)
    {
        
    $act $entry['data'][$fieldName]['value'];
        
    // check if category already exists / or not
        
    if( array_key_exists($actarray_flip($arrCategories) ) )
        {
            
    $arrSorted[$act][] = $entry// fill existing category node
            
    $index++;
        } 
        else 
        {
            if( !
    strlen($act) ) // Incase entry has no categorie selected, build free category
            
    {
                
    $act $emptyCategoryName;
            }
            
    $arrSorted[$act][0] = $entry// create new category node
        
    }
        
    $arrCategories[] = $entry['data'][$fieldName]['value'];
    }

    /**
     * Get category sorting from tl_taxonomy
     */
    $catalog $this->entries[0]['tablename'];
    $arrCategorySorted = array();
    foreach(
    $this->entries as $entry)
    {
        
    $this->import('Database');
        
    $objField $this->Database    ->prepare("SELECT $fieldName FROM $catalog WHERE id=?")
                                    ->
    limit(1)
                                    ->
    execute($entry['id']);
        if(!
    $objField->numRows) continue;
        
    $taxId $objField->$fieldName;
        
        
    $objField $this->Database    ->prepare("SELECT sorting, name FROM tl_taxonomy WHERE id=?")
                                       ->
    limit(1)
                                    ->
    execute($taxId);
        if(!
    $objField->numRows) continue;
        
    $sorting $objField->sorting;
        
    $category $objField->name;
        
        if( 
    array_key_exists($category$arrSorted ) )
        {
            
    // Remember sorting number in first element of each category
            
    $arrSorted[$category][0]['data'][$fieldName]['sorting'] = $sorting;
            
    $arrCategorySorted[$sorting] = $arrSorted[$category];
        }
    }

    // Sort
    ksort($arrCategorySorted);
    ?>

    <?php foreach($arrCategorySorted as $key => $entries): ?>
    <?php 
    $category 
    $entries[0]['data'][$fieldName]['value']; 
    $class strtolowerpreg_replace( array('/ /''/&/'), array('''-'), $category) );
    ?>

    <div class="layout_simple block ce_accordion">
        <div class="toggler <?php echo $class ?>"><h3><?php echo $category?></h3></div>
        <div class="accordion <?php echo $class?>">
        
        <?php foreach($entries as $entry): ?>
            
            <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''?>">
            <?php foreach($entry['data'] as $field => $data): ?>
            <?php if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
                <?php if($field == $fieldName) continue; ?>            
                <div class="field <?php echo $field?>">
                    <div class="label"><?php echo $data['label']; ?></div>
                    <div class="value"><?php echo $data['value']; ?></div>
                </div>
            <?php endif; ?>
            <?php endforeach; ?>
            </div>
            
        <?php endforeach; ?>
        </div>
        
        <?php if ($entry['showLink'] && $entry['link']): ?>
        <div class="link"><?php echo $entry['link']; ?></div>
        <?php endif; ?>
        <?php if ($entry['linkEdit']): ?>
        <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
        <?php endif; ?>
        </div>
        
    <?php endforeach; ?>
    </div>

    <?php else: ?>

    <?php if ($this->condition): ?>
    <div class="condition"><?php echo $this->condition?></div>
    <?php else: ?>
    <p class="info">There are no entries matching your search.</p>
    <?php endif; ?>

    <?php endif; ?>
    Viele Grüße,
    Tim
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  17. #17
    Contao-Fan
    Registriert seit
    22.10.2009.
    Beiträge
    293

    Daumen hoch

    Danke Tim!

    Jetzt funktioniert alles Bestens. Ich bin begeistert!

    Viele Grüße,
    Ignatz

  18. #18
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Super, freut mich.

    Bin am überlegen, ob ich daraus ein kleines Modul baue. Dann könnte man die Datenbankabfrage ausserhalb des Templates machen und man würde das entsprechende Feld im BE einstellen können.
    Bin mir nur grad nicht sicher wo ich es am besten im BE verbauen sollte.
    In dem KatalogListe-Modul, oder?
    Elegant wäre es mit dem Auswählen eines catalog_*_accordion templates, aber da müsste ich ein submitOnChange zusätzlich einbauen, damit die notwendigen Felder nachgeladen werden. Würde den workflow bissel ändern.
    Oder die Felder sind nach der Installation einfach immer sichtbar. Mit Hinweisen für die Nutzung.
    Was meint ihr? Wäre das Modul gefragt?

    Grüße,
    Tim
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  19. #19
    Contao-Fan Avatar von Nikolas
    Registriert seit
    22.08.2009.
    Ort
    Lehe
    Beiträge
    493
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Tim G Beitrag anzeigen
    Super, freut mich.

    Bin am überlegen, ob ich daraus ein kleines Modul baue. Dann könnte man die Datenbankabfrage ausserhalb des Templates machen und man würde das entsprechende Feld im BE einstellen können.
    Bin mir nur grad nicht sicher wo ich es am besten im BE verbauen sollte.
    In dem KatalogListe-Modul, oder?
    Elegant wäre es mit dem Auswählen eines catalog_*_accordion templates, aber da müsste ich ein submitOnChange zusätzlich einbauen, damit die notwendigen Felder nachgeladen werden. Würde den workflow bissel ändern.
    Oder die Felder sind nach der Installation einfach immer sichtbar. Mit Hinweisen für die Nutzung.
    Was meint ihr? Wäre das Modul gefragt?

    Grüße,
    Tim
    Hallo,

    ich persönlich könnte es ganz gut gebrauchen.
    Hab mir zwar selber grad ne Lösung zusammengestrickt aber die ist lange nicht so flexibel und auch nur bedingt updatesicher.

    Ich könnte mir auch vorstellen, dass sich einige Interessenten dafür finden.

    Also ich würde es begrüßen

    Gruß
    Nikolas

  20. #20
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Tim G Beitrag anzeigen
    Super, freut mich.

    Bin am überlegen, ob ich daraus ein kleines Modul baue. Dann könnte man die Datenbankabfrage ausserhalb des Templates machen und man würde das entsprechende Feld im BE einstellen können.
    Bin mir nur grad nicht sicher wo ich es am besten im BE verbauen sollte.
    In dem KatalogListe-Modul, oder?
    Elegant wäre es mit dem Auswählen eines catalog_*_accordion templates, aber da müsste ich ein submitOnChange zusätzlich einbauen, damit die notwendigen Felder nachgeladen werden. Würde den workflow bissel ändern.
    Oder die Felder sind nach der Installation einfach immer sichtbar. Mit Hinweisen für die Nutzung.
    Was meint ihr? Wäre das Modul gefragt?

    Grüße,
    Tim
    Hallo Tim G,
    schöne Sache das :-)
    Modul bin ich mir auch nicht sicher obs das braucht...
    Sehr schön fände ich es aber, wenn du das mal ins Wiki bringen würdest. Am besten vllt auf einer eigenen Catalog Seite wo du dann etwas genauer Beschreiben kannst was du gemacht hast.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  21. #21
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Hi,
    ja, glaube ein Modul brauch es nicht werden.
    Das mit dem Wiki ist eine sehr gute Idee, besonders weil ich dort auch oft gute Hinweise bekommen habe.
    Bei 8 Tipps und Tricks zur Umsetzung würde es reinpassen, oder soll es richtig Stück für Stück erklärt werden - ala Tutorial?
    (Keine Ahnung, ob das verwendete PHP und wie ich mit Arrays umgehe (aus Halbwissen ) so richtig clean ist, da ich eher aus der Actionscript Programmierung komme und php weit mehr array funktionen bereitstellt. )
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  22. #22
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo Tim G,
    machs einfach direkt als Unterseite vom Catalog -> http://de.contaowiki.org/Kategorie:Catalog

    Ob du das dann wie ein richtiges Tutorial von A-Z machst ist dir überlassen. Ein wenig PHP würde ich aber als bekannt voraussetzen ;-)

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  23. #23
    Contao-Nutzer Avatar von art-instinct
    Registriert seit
    12.04.2012.
    Ort
    Hannover/Leipzig
    Beiträge
    175

    Standard

    Hi,

    ich bin grad partiell überfordert in mein Template dieses Accordeon einzubauen.

    Habt ihr mal ein Frontend zu euren Template, wo ich mir das fertig angucken kann? Dann verstehe ich evtl. besser, wo ich welche Parts einbauen muss.
    (Ich weiß, ist schon älter hier...)

    Meine Catalogliste wird folgendermaßen sortiert:
    dpl_tags ASC,
    dpl_name ASC

    dpl_tags ist die Taxonomy-Tabelle für die Kategorien. Jeweils eine Kategorie soll ihre Item in ein Accordeon-Element zusammenfassen. Sodass man als Übersicht die Kategorien erhält und dann die Unterpunkte einer Kategorie ausklappen kann.

    Nutze Contao 2.11. mit einer Catalog SVN Version (hab leider vergessen, welche...)

    Danke!

    PHP-Code:
    <?php if (count($this->entries)):
      
    $lastcat=''?>
      
     
      
    <div class="layout_full">

    <?php foreach ($this->entries as $entry):
       if (
    $lastcat!=$entry[data]['dpl_tags']['value']):
             
    $lastcat=$entry[data]['dpl_tags']['value']; ?>
             <div class="cat toggler"><h2><?php echo $entry[data]['dpl_tags']['value']; ?></h2></div>
        <?php endif; ?>    
            
        <?php //Prüfen ob ein Item eine Broschuere ist, dann wird die Klasse "brs" eingefügt um den Eintrag anders zu formatieren
            
    $brs strpos($entry['data']['dpl_tags']['value'], 'Brochure');        
        
    ?>
        
    <div class="accordion">


    <div class="item<?php if ($brs === false) { echo " std";} else { echo " brs"; } echo $entry['class'] ? ' '.$entry['class'] : ''?>">
      
      <?php if ($entry['data']['dpl_vorschaubild']['value'] != "" ) { ?>
        <img class="thumb" alt="<?php echo $entry['data']['dpl_name']['value']; ?>" src="<?php echo $entry['data']['dpl_vorschaubild']['raw']; ?>" />
      <?php ?>
      <?php
    //echo $entry['data']['dpl_erstellungszeit']['value'];
    // Wenn Heute - Erstellungszeit kleiner als 30 * 1 Tag ist dann Zeige New an!
    if(((time() - $entry['data']['dpl_erstellungszeit']['value']) < (30*86400) ) && $entry['data']['dpl_update']['raw'] != "1")
    {
      echo 
    '<span class="new">NEW</span>';
    }
    else if( 
    $entry['data']['dpl_update']['raw'] == "1" )
    {
      echo 
    '<span class="new">UPDATE</span>';
    }

      
    ?>
      
      <h3 class="name">
        <?php
            
    echo $entry['data']['dpl_name']['value'];
        
    ?>
      </h3>
      
      <?php if ($entry['data']['dpl_name_de']['value'] != "" ) { ?>
        <h3 class="name de"> / 
        <?php
            
    echo $entry['data']['dpl_name_de']['value'];
        
    ?>
      </h3>
      <?php ?>
      
      <br />
      <p>Downloads:</p>

          <?php 
        
    //Download EN
        
    if($entry['data']['dpl_dl_en']['value']): ?>        
              <div class="field file">        
                    <?php if ($this->Input->post("file")): ?>
                        <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                    <?php else: ?>            
                        <form action="<?php echo $this->Environment->request?>" method="post">
                        <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_en']['raw']; ?>">
                        <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                        <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="EN" />
                        </form>            
                    <?php endif; ?>            
              </div>
        <?php endif; ?>
          <?php 
        
    //Download DE
        
    if($entry['data']['dpl_dl_de']['value']): ?>        
              <div class="field file">        
                    <?php if ($this->Input->post("file")): ?>
                        <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                    <?php else: ?>            
                        <form action="<?php echo $this->Environment->request?>" method="post">
                        <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_de']['raw']; ?>">
                        <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                        <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="DE" />
                        </form>            
                    <?php endif; ?>            
              </div>
        <?php endif; ?>
    <!-- Download FR -->
          <?php if($entry['data']['dpl_dl_fr']['value']): ?>        
              <div class="field file">        
                    <?php if ($this->Input->post("file")): ?>
                        <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                    <?php else: ?>            
                        <form action="<?php echo $this->Environment->request?>" method="post">
                        <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_fr']['raw']; ?>">
                        <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                        <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="FR" />
                        </form>            
                    <?php endif; ?>            
              </div>
        <?php endif; ?>
    <!-- Download IT -->    
        <?php if($entry['data']['dpl_dl_it']['value']): ?>        
            <div class="field file">        
                <?php if ($this->Input->post("file")): ?>
                    <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                <?php else: ?>            
                    <form action="<?php echo $this->Environment->request?>" method="post">
                    <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_it']['raw']; ?>">
                     <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                    <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="IT" />
                    </form>            
                <?php endif; ?>            
            </div>
        <?php endif; ?>
     <!-- Download NL -->    
        <?php if($entry['data']['dpl_dl_nl']['value']): ?>        
            <div class="field file">        
                <?php if ($this->Input->post("file")): ?>
                    <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                <?php else: ?>            
                    <form action="<?php echo $this->Environment->request?>" method="post">
                    <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_nl']['raw']; ?>">
                     <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                    <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="NL" />
                    </form>            
                <?php endif; ?>            
            </div>
        <?php endif; ?> 
     <!-- Download PT -->    
        <?php if($entry['data']['dpl_dl_pt']['value']): ?>        
            <div class="field file">        
                <?php if ($this->Input->post("file")): ?>
                    <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                <?php else: ?>            
                    <form action="<?php echo $this->Environment->request?>" method="post">
                    <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_pt']['raw']; ?>">
                     <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                    <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="PT" />
                    </form>            
                <?php endif; ?>            
            </div>
        <?php endif; ?>
    <!-- Download ES -->    
        <?php if($entry['data']['dpl_dl_es']['value']): ?>        
            <div class="field file">        
                <?php if ($this->Input->post("file")): ?>
                    <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                <?php else: ?>            
                    <form action="<?php echo $this->Environment->request?>" method="post">
                    <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_es']['raw']; ?>">
                     <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                    <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="ES" />
                    </form>            
                <?php endif; ?>            
            </div>
        <?php endif; ?> 
     
    <!-- Download PL -->    
        <?php if($entry['data']['dpl_dl_pl']['value']): ?>        
            <div class="field file">        
                <?php if ($this->Input->post("file")): ?>
                    <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                <?php else: ?>            
                    <form action="<?php echo $this->Environment->request?>" method="post">
                    <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_pl']['raw']; ?>">
                     <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                    <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="PL" />
                    </form>            
                <?php endif; ?>            
            </div>
        <?php endif; ?> 


     
     <!-- Katalog Notelist -->
     <?php if($entry['data']['dpl_print_check']['raw'] == "1" && $entry['data']['dpl_bestellvarable']['raw'] != "" ) : ?>
          <div class="merkliste">
            <?php echo $entry['data']['dpl_merkliste']['value']; ?>
          </div>
     <?php endif ?>
      <!-- ENDE Katalog Notelist -->
      <?php //print_r($this->entries); ?>
     
    </div>

    </div>

    <?php endforeach; ?>
    </div>

    <?php else: ?>
    <p class="info"><?php echo $this->noItemsMsg?></p>
    <?php endif; ?>
    Edit: Hab das Accordeon jetzt m.E. richtig eingebau, im Seitenlayout moo_accordion aktiviert, bekomme aber keinen Effekt im FE?!

    Akkordeons gehen auch nicht außerhalb des Catalogs.
    Kann das mit einem Update von Version 2.6.x zusammenhängen? Muss ich da noch was umstellen/anpassen?
    Geändert von art-instinct (14.11.2012 um 12:05 Uhr)

  24. #24
    Contao-Nutzer Avatar von art-instinct
    Registriert seit
    12.04.2012.
    Ort
    Hannover/Leipzig
    Beiträge
    175

    Standard

    OK, Fehler gefunden. Mootools waren im Template nicht eingebunden. Das klappt jetzt.
    Leider funzt es nicht, dass alle Elemente geschlossen sind.
    Und auch der Effekt, dass alle <accordion>-Elemente eingeklappt werden. Beim ersten <toggler> klappt es bei den ersten 4, danach nur noch beim ersten <accordion>. Hat jemand eine Idee woran das liegen kann?
    Screenshot vom Frontend und Quelltext-Ausschnitt anbei
    Angehängte Grafiken Angehängte Grafiken

  25. #25
    Contao-Yoda Avatar von MacKP
    Registriert seit
    15.06.2009.
    Ort
    Duisburg
    Beiträge
    13.292
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Alle Zugeklappt ist normalerweise ne Einstellung im JavaScript.
    Dein Bild von der Ausgabe sieht so aus, als ob da noch das ganze CSS fehlt.

    Genaueres kann man glaube ich aber erst sagen, wenn du hier mal nen Link zu der Seite veröffentlichst. Das kann sonst alles mögliche sein.

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

  26. #26
    Contao-Nutzer Avatar von art-instinct
    Registriert seit
    12.04.2012.
    Ort
    Hannover/Leipzig
    Beiträge
    175

    Standard

    Ich hatte noch einen Fehler im catalog-Template. Den habe ich jetzt auch gefixt und es funzt alles. Trotzdem Danke. War total am verzweifeln...

    So isses jetzt richtig:
    PHP-Code:
    <?php if (count($this->entries)): ?>

    <?php
    $fieldName 
    'dpl_tags'// field name for creating collections
    $arrCategories = array(); // collects all catalog entries
    $arrSorted = array(); // collects all sorted catalog entries
    $index 0;
    foreach(
    $this->entries as $entry)
    {
        
    $act $entry['data'][$fieldName]['value'];
        
        
    // check if category already exists / or not
        
    if( array_key_exists($actarray_flip($arrCategories) ) )
        {
            
    $arrSorted[$act][] = $entry// fill existing category node
            
    $index++;
        } 
        else 
        {
            if( !
    strlen($act) ) // Incase entry has no categorie selected, build free category
            
    {
                
    $act 'Ohne Kategorie';
            }
            
            
    $arrSorted[$act][0] = $entry// create new category node
        
    }
        
    $arrCategories[] = $entry['data'][$fieldName]['value'];
    }
    ?>

    <?php foreach($arrSorted as $k => $entries): ?>
    <div class="layout_full block ce_accordion">
        <div class="cat toggler <?php echo str_replace(' '''$k); ?>"><h2><?php echo $k?></h2></div>
        <div class="accordion <?php echo str_replace(' '''$k); ?>">
        <?php foreach($entries as $entry): ?>
        
                        <?php //Prüfen ob ein Item eine Broschuere ist, dann wird die Klasse "brs" eingefügt um den Eintrag anders zu formatieren
                        
    $brs strpos($entry['data']['dpl_tags']['value'], 'Brochure');        
                    
    ?>
        
            <div class="item<?php if ($brs === false) { echo " std";} else { echo " brs"; } echo $entry['class'] ? ' '.$entry['class'] : ''?>">
            

                    
                  
                  <?php if ($entry['data']['dpl_vorschaubild']['value'] != "" ) { ?>
                    <img class="thumb" alt="<?php echo $entry['data']['dpl_name']['value']; ?>" src="<?php echo $entry['data']['dpl_vorschaubild']['raw']; ?>" />
                  <?php ?>
                  <?php
                
    //echo $entry['data']['dpl_erstellungszeit']['value'];
                // Wenn Heute - Erstellungszeit kleiner als 30 * 1 Tag ist dann Zeige New an!
                
    if(((time() - $entry['data']['dpl_erstellungszeit']['value']) < (30*86400) ) && $entry['data']['dpl_update']['raw'] != "1")
                {
                  echo 
    '<span class="new">NEW</span>';
                }
                else if( 
    $entry['data']['dpl_update']['raw'] == "1" )
                {
                  echo 
    '<span class="new">UPDATE</span>';
                }

                  
    ?>
                  
                  <h3 class="name">
                    <?php
                        
    echo $entry['data']['dpl_name']['value'];
                    
    ?>
                  </h3>
                  
                  <?php if ($entry['data']['dpl_name_de']['value'] != "" ) { ?>
                    <h3 class="name de"> / 
                    <?php
                        
    echo $entry['data']['dpl_name_de']['value'];
                    
    ?>
                  </h3>
                  <?php ?>
                  
                  <br />
                  <p>Downloads:</p>

                    <?php 
                    
    //Download EN
                    
    if($entry['data']['dpl_dl_en']['value']): ?>        
                          <div class="field file">        
                                <?php if ($this->Input->post("file")): ?>
                                    <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                                <?php else: ?>            
                                    <form action="<?php echo $this->Environment->request?>" method="post">
                                    <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_en']['raw']; ?>">
                                    <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                                    <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="EN" />
                                    </form>            
                                <?php endif; ?>            
                          </div>
                    <?php endif; ?>
                    <?php 
                    
    //Download DE
                    
    if($entry['data']['dpl_dl_de']['value']): ?>        
                          <div class="field file">        
                                <?php if ($this->Input->post("file")): ?>
                                    <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                                <?php else: ?>            
                                    <form action="<?php echo $this->Environment->request?>" method="post">
                                    <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_de']['raw']; ?>">
                                    <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                                    <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="DE" />
                                    </form>            
                                <?php endif; ?>            
                          </div>
                    <?php endif; ?>
                <!-- Download FR -->
                    <?php if($entry['data']['dpl_dl_fr']['value']): ?>        
                          <div class="field file">        
                                <?php if ($this->Input->post("file")): ?>
                                    <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                                <?php else: ?>            
                                    <form action="<?php echo $this->Environment->request?>" method="post">
                                    <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_fr']['raw']; ?>">
                                    <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                                    <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="FR" />
                                    </form>            
                                <?php endif; ?>            
                          </div>
                    <?php endif; ?>
                <!-- Download IT -->    
                    <?php if($entry['data']['dpl_dl_it']['value']): ?>        
                        <div class="field file">        
                            <?php if ($this->Input->post("file")): ?>
                                <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                            <?php else: ?>            
                                <form action="<?php echo $this->Environment->request?>" method="post">
                                <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_it']['raw']; ?>">
                                 <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                                <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="IT" />
                                </form>            
                            <?php endif; ?>            
                        </div>
                    <?php endif; ?>
                 <!-- Download NL -->    
                    <?php if($entry['data']['dpl_dl_nl']['value']): ?>        
                        <div class="field file">        
                            <?php if ($this->Input->post("file")): ?>
                                <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                            <?php else: ?>            
                                <form action="<?php echo $this->Environment->request?>" method="post">
                                <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_nl']['raw']; ?>">
                                 <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                                <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="NL" />
                                </form>            
                            <?php endif; ?>            
                        </div>
                    <?php endif; ?> 
                 <!-- Download PT -->    
                    <?php if($entry['data']['dpl_dl_pt']['value']): ?>        
                        <div class="field file">        
                            <?php if ($this->Input->post("file")): ?>
                                <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                            <?php else: ?>            
                                <form action="<?php echo $this->Environment->request?>" method="post">
                                <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_pt']['raw']; ?>">
                                 <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                                <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="PT" />
                                </form>            
                            <?php endif; ?>            
                        </div>
                    <?php endif; ?>
                <!-- Download ES -->    
                    <?php if($entry['data']['dpl_dl_es']['value']): ?>        
                        <div class="field file">        
                            <?php if ($this->Input->post("file")): ?>
                                <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                            <?php else: ?>            
                                <form action="<?php echo $this->Environment->request?>" method="post">
                                <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_es']['raw']; ?>">
                                 <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                                <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="ES" />
                                </form>            
                            <?php endif; ?>            
                        </div>
                    <?php endif; ?> 
                 
                <!-- Download PL -->    
                    <?php if($entry['data']['dpl_dl_pl']['value']): ?>        
                        <div class="field file">        
                            <?php if ($this->Input->post("file")): ?>
                                <?php $this->SendFileToBrowser($this->Input->post("file")); ?>
                            <?php else: ?>            
                                <form action="<?php echo $this->Environment->request?>" method="post">
                                <input type="hidden" name="file" value="<?php echo $entry['data']['dpl_dl_pl']['raw']; ?>">
                                 <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                                <input type="submit" name="save" id="save" class="tl_submit dpl_dl" accesskey="s" value="PL" />
                                </form>            
                            <?php endif; ?>            
                        </div>
                    <?php endif; ?> 


                 
                 <!-- Katalog Notelist -->
                 <?php if($entry['data']['dpl_print_check']['raw'] == "1" && $entry['data']['dpl_bestellvarable']['raw'] != "" ) : ?>
                      <div class="merkliste">
                        <?php echo $entry['data']['dpl_merkliste']['value']; ?>
                      </div>
                 <?php endif ?>
                  <!-- ENDE Katalog Notelist -->
                  <?php //print_r($this->entries); ?>
            </div>
            
        <?php endforeach; ?>
        </div>
        
        </div>
        
    <?php endforeach; ?>
    </div>

    <?php else: ?>

    <?php if ($this->condition): ?>
    <div class="condition"><?php echo $this->condition?></div>
    <?php else: ?>
    <p class="info">There are no entries matching your search.</p>
    <?php endif; ?>

    <?php endif; ?>

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
  •