Contao-Camp 2024
Ergebnis 1 bis 21 von 21

Thema: (Solved) "weiter" und "zurück" Button für Detailansicht erzeugen

  1. #1
    Contao-Fan
    Registriert seit
    12.01.2011.
    Beiträge
    322

    Standard (Solved) "weiter" und "zurück" Button für Detailansicht erzeugen

    Hallo,

    ich würde gerne einen "weiter" und "zurück" Button für die Detailsicht erstellen. Die Buttons sollen jeweils die nächste Dateiansicht öffnen aus dem Katalog.

    Gibt es für sowas schon einen Erweiterung oder einen Workaround?

    Danke

    Grüße

    Bongartz120
    Geändert von bongartz120 (18.07.2015 um 20:02 Uhr)

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

    Standard

    eine Erweiterung ist mir nicht bekannt - es gibt einige "Snippets" zu dem Thema => such mal mit dem Stichwort "Galerie"

  3. #3
    Contao-Fan
    Registriert seit
    12.01.2011.
    Beiträge
    322

    Standard

    Ok. Danke dir für die Antwort. Leider finde ich mit dem Schbegriff "Galerie" nicht viel zu dem Thema.

    Ich frage mich gerade eignetlich nur wie ich die mysql Abfrage anpassen muss, damit diese abhängt von der Sortierung ist und mir somit immer nur den Link nach und vor dem aktuellen Datensatz ausgibt.

    Ich hätte gedacht das ich nicht der erste bin der so ein Problem hat ;-)

  4. #4
    Contao-Nutzer
    Registriert seit
    05.10.2012.
    Beiträge
    213

    Standard

    Schau mal hier.
    Wirst wahrscheinlich allerdings recht stark eingreifen müssen, da das noch vor der Einführung der Namespaces entstanden ist.

    Wie du dir die Factory holst, steht hier beschrieben.


    Alternativ, je nachdem, wie viele / wie umfangreiche Datensätze du hast, vielleicht ne JS-basierte Lösung?

  5. #5

  6. #6
    Contao-Fan
    Registriert seit
    12.01.2011.
    Beiträge
    322

    Standard

    Vielen vielen Dank.

    Mit euerer guten Hilfe habe ich es recht schnell hinbekommen.

  7. #7
    Contao-Nutzer
    Registriert seit
    05.10.2012.
    Beiträge
    213

    Standard

    Freut mich zu hören! Kannst du deine Lösung noch posten? Das Thema kommt immer mal wieder und dann gäbe es eine aktuelle Version.
    Oder du schickst Tim nen Pull-Request

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

    Standard

    ich würde mal behaupten, DEN PR gibt es hier nicht, da die Anforderungen doch immer recht individuell sind - besser wäre es m.E. einen kleinen Abschnitt im Wiki zu schreiben...

  9. #9
    Contao-Fan
    Registriert seit
    12.01.2011.
    Beiträge
    322

    Standard

    So hier meine Lösung für das Template "metamodel_prerendered":

    PHP-Code:
    <?php $strRendersettings = isset($this->settings)? 'settings' 'view'?>
    <?php 
    if (count($this->data)): ?>

    <div class="layout_full">

    <?php foreach ($this->data as $arrItem): ?>
    <div class="item <?php echo $arrItem['class']; ?>">

    <?php foreach ($arrItem['attributes'] as $field => $strName): ?>
    <?php 
    if ((isset($arrItem[$this->getFormat()][$field]) && ($strValue $arrItem[$this->getFormat()][$field])
            || (isset(
    $arrItem['text'][$field]) && ($strValue $arrItem['text'][$field])))): ?>
    <div class="field <?php echo $field?>">
        <?php if(!$this->$strRendersettings->get('hideLabels')): ?>
            <div class="label"><?php echo sprintf($GLOBALS['TL_LANG']['MSC']['field_label'], $strName); ?></div>
        <?php endif; ?>
        <div class="value"> <?php echo $strValue?></div>
    </div>
    <?php endif; ?>
    <?php 
    endforeach; ?>
    <?php 
    if ($arrItem['jumpTo']['deep']): ?>
    <a href="<?php echo $arrItem['jumpTo']['url']; ?>"><?php echo $this->details?></a>
    <?php endif; ?>
    </div>
    <?php endforeach; ?>
    </div>
    <?php else: ?>
    <p class="info"><?php echo $this->noItemsMsg?></p>
    <?php endif; ?>


    <?php
        $projectId 
    null;
        
    $nextProject null;
        
    $prevProject null;
        
    $currProject null;
        
    $nextLink null;
        
    $prevLink null;
        if (
    count($this->items) > 0) {
            
    $projectId $this->items[0]->get('id');

            
    $projects = \MetaModels\Factory::byTableName('mm_katalog');
            
    $filter $projects->prepareFilter(2,array()); //List filter Your filter ID = !ID!
            
    $res $projects->findByFilter($filter'sorting');
            
    $nextIsNext false;
            while ((
    $item $res->getItem()) && $item !== false) {
                if (
    $nextIsNext) {
                    
    $nextProject=$item;
                    break;
                }
                elseif (
    $item->get('id') === $projectId) {
                    
    $currProject $item;
                    
    $nextIsNext true;
                }
                elseif (
    $nextProject === null) {
                    
    $prevProject $item;
                }
                
    $res->next();
            }

            
    $params '';

            if (
    $nextProject !== null) {
                
    $nextLink $this->generateFrontendUrl($GLOBALS['objPage']->row(), '/'.$nextProject->get('alias').$params);
            }

            if (
    $prevProject !== null) {
                
    $prevLink $this->generateFrontendUrl($GLOBALS['objPage']->row(), '/'.$prevProject->get('alias').$params);
            }

        }
    ?>
     
    <div class="project-nav">
        <?php if($prevLink !== null): ?>
            <a href="<?php echo $prevLink;?>" class="prev">{{iflng::en}}previous{{iflng}}{{iflng::de}}zurück{{iflng}}</a>
        <?php endif; ?>
        <?php if($nextLink !== null): ?>
            <a href="<?php echo $nextLink;?>" class="next">{{iflng::en}}next{{iflng}}{{iflng::de}}vor{{iflng}}</a>
        <?php endif; ?>
    </div>
    Ich habe eignetlich nur den Namensspace anpasst und biedes zusammen geworfen. CSS muss aber noch angepasst werden.
    Geändert von bongartz120 (08.07.2015 um 13:51 Uhr)

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

    Standard

    ähh... sehe ich den Wald vor Bäumen nicht? => ich finde das "vor / zurück" nicht...

  11. #11
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    Hier wird die Nav definiert

    PHP-Code:
    <div class="project-nav">
        <?php if($prevLink !== null): ?>
            <a href="<?php echo $prevLink;?>" class="prev">{{iflng::en}}previous{{iflng}}{{iflng::de}}zurück{{iflng}}</a>
        <?php endif; ?>
        <?php if($nextLink !== null): ?>
            <a href="<?php echo $nextLink;?>" class="next">{{iflng::en}}next{{iflng}}{{iflng::de}}vor{{iflng}}</a>
        <?php endif; ?>
    </div>
    Und mit diesem Teil wirds definiert. Wenn ich mich nicht verlesen habe.

    PHP-Code:
    <?php
        $projectId 
    null;
        
    $nextProject null;
        
    $prevProject null;
        
    $currProject null;
        
    $nextLink null;
        
    $prevLink null;
        if (
    count($this->items) > 0) {
            
    $projectId $this->items[0]->get('id');

            
    $projects = \MetaModels\Factory::byTableName('mm_katalog');
            
    $filter $projects->prepareFilter(2,array()); //List filter Your filter ID = !ID!
            
    $res $projects->findByFilter($filter'sorting');
            
    $nextIsNext false;
            while ((
    $item $res->getItem()) && $item !== false) {
                if (
    $nextIsNext) {
                    
    $nextProject=$item;
                    break;
                }
                elseif (
    $item->get('id') === $projectId) {
                    
    $currProject $item;
                    
    $nextIsNext true;
                }
                elseif (
    $nextProject === null) {
                    
    $prevProject $item;
                }
                
    $res->next();
            }

            
    $params '';

            if (
    $nextProject !== null) {
                
    $nextLink $this->generateFrontendUrl($GLOBALS['objPage']->row(), '/'.$nextProject->get('alias').$params);
            }

            if (
    $prevProject !== null) {
                
    $prevLink $this->generateFrontendUrl($GLOBALS['objPage']->row(), '/'.$prevProject->get('alias').$params);
            }

        }
    ?>
    mm_katalog muss dann durch die richtige mm_ ersetzt werden und die FilterID anpassen.


    lg
    Geändert von Messa (08.07.2015 um 11:21 Uhr)
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

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

    Standard

    arrggg.... hatte das Fenster zu klein und habe den Scrollbalken nicht gesehen... alles klaro!

  13. #13
    Contao-Fan
    Registriert seit
    12.01.2011.
    Beiträge
    322

    Standard

    Hallo,

    noch eine Frage am Schluss, ist es auch möglich den Code in den Footer einzufügen? Habe versucht den Code einfach in fe_page zu kopieren, aber hier passiert leider nichts.

    vielen Dank

  14. #14
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Standard

    Das wird in fe_page nicht so einfach funktionieren, da das "außerhalb" von Metamodels ist und dieses Template auf nichts davon zugreifen kann. Zudem würde ich das sowieso nicht dort machen, da das ganz schlecht pflegbar ist (update von Contao).

  15. #15
    Contao-Fan
    Registriert seit
    12.01.2011.
    Beiträge
    322

    Standard

    Ja das hatte ich mir schon gedacht. Dann geht es halt nicht anders.

  16. #16
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Standard

    Naja ... es gibt schon Möglichkeiten, die aber "Umwege" in Anspruch nehmen (ohne Gewähr, habs nicht ausprobiert)

    - Im metamodel_prerendered template die prev/next Links in die PHP Session sichern
    - In den Contao-Einstellungen des Seitenlayouts unter "Eingebundene Module" eine neue Zeile anlegen: "Artikel" in der "Fußzeile" ausgeben
    - Einen neuen Artikel auf der MM Seite mit Ausgabe in "Fußzeile" anlegen, wo die Links erscheinen sollen
    - Dort ein Inhaltselement anlegen, welches die Session abfragt und die Links ausgibt

    Das hängt aber alles sehr von deinem sonstigen Layout ab ... eine generelle Lösung ist das aber nicht.

  17. #17
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    Mach doch ein neues templat mit den buttons. Dann binde einmal im container mm ein mit der Detailansicht und ein zweites mm im footer mit dem angepassten template mit den zwei buttons.

    Lg
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  18. #18
    Contao-Nutzer
    Registriert seit
    20.02.2012.
    Beiträge
    123

    Standard

    Stimmt das müsste auch gehen - ist bestimmt auch wartbarer als mein Vorschlag.

  19. #19
    Contao-Fan
    Registriert seit
    12.01.2011.
    Beiträge
    322

    Standard

    Vielen Dank für Eure Hilfe.

    Jetzt habe ich nur noch die Frage was ihr mit dem einbinden von mm im Template meint?

    Bin leider nicht so der php Verstehe :-(

  20. #20
    Contao-Nutzer
    Registriert seit
    08.01.2019.
    Beiträge
    27

    Standard

    Vielen Dank an alle, die hier gefragt und geholfen haben!

    Damit es bei mir lief (Contao 4.9.4, MM 2.1) musste ich diese kleine Änderung zu bongartz120's Code von oben machen:

    statt:

    PHP-Code:
    $projects = \MetaModels\Factory::byTableName('mm_katalog'); 
    musste folgendes stehen:

    PHP-Code:
    $projects $factory->getMetaModel('mm_katalog'); 
    Außerdem muss man darauf achten, den Teil für die URL der Links an seine eigene Seite anzupassen.

    Vielleicht hilft es jemandem!

    Beste Grüße,
    Kilombo

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

    Standard

    Zitat Zitat von Kilombo Beitrag anzeigen
    Damit es bei mir lief (Contao 4.9.4, MM 2.1) musste ich diese kleine Änderung zu bongartz120's Code von oben machen:

    statt:

    PHP-Code:
    $projects = \MetaModels\Factory::byTableName('mm_katalog'); 
    musste folgendes stehen:

    PHP-Code:
    $projects $factory->getMetaModel('mm_katalog'); 
    vorweg ein Hinweis zu MM 2.1 unter C 4.9: https://community.contao.org/de/show...en-bitte-lesen!

    die $factory muss man sich vorher auch besorgen - siehe https://metamodels.readthedocs.io/de...iner-interface bzw. https://metamodels.readthedocs.io/de....html#beispiel

    ... ich würde mir für den Fall wohl eher eine "Helper-Klasse" anlegen und mit zwei separaten Abfragen inkl. LIMIT 1 arbeiten, als alle Items durchzueiern um Vorgänger und Nachfolger zu ermitteln...

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
  •