Ergebnis 1 bis 10 von 10

Thema: Eigene Erweiterung/Extension: Verlinkung zu dynamischer Detailseite

  1. #1
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Frage Eigene Erweiterung/Extension: Verlinkung zu dynamischer Detailseite

    Hallo Leute!

    Ich bin ein Neulin in Contao und habe das ein kleines Problem.
    Ich möchte eine eigene Extension bauen, mit deren Hilfe man Stellenangebote anlegen und verwalten kann.

    Diese BE-Extension ist bereits fertig und funktioniert wie sie soll.
    Ebenfalls habe ich hierzu ein passendes FE-Modul angefertigt, welches mir die Stellenangebote quasi als
    Liste mit ein paar Informationen auf einer Seite anzeigt.

    Nun möchte ich dass jeder Eintrag dieser Liste auf eine entsprechende generierte Detailseite verlinkt.
    Für die Details habe ich auch bereits ein FE-Modul (inkl. Template) geschrieben und auch schon eine Subpage für die Detailansicht eingebaut.

    Wie man so etwas außerhalb von Contao bewerkstelligt ist mir vollkommen klar,
    nur weiss ich leider nicht wie man den Link generieren müsste, damit dieser das Contao Framework anspricht,
    welches dann anhand mitgelieferter Parameter (z.b. Id der Stellenanzeige) meinen Content zusammenbaut und entsprechend anzeigt (am besten auch gleich den Link zurück ).

    Einen direkten Link zu der Subpage mit den Details habe ich schon ausprobiert und die Verlinkung funktioniert ("index.php/vacancy-detail.html"),
    das grobe Setting in Contao bzgl. Subpage steht also schon mal. Mir ist klar dass hier noch mein Frontend-Modul in Contao den Content
    für die Details generieren muss.

    Kann mir jemand sagen wie ich die Verbindung zwischen Link und Contao hinbekomme?

    Als Beispiel kann man sich auch einen Artikel vorstellen, der mit einer genierten Detailseite verlinkt ist
    oder aber auch die News in der Contao Demo. Ich habe mir auch schon mal die Demo installiert und versucht
    mittels Debugging zu verstehen wie die News ihre Links auf die Details bauen, aber das schien mir recht komplex
    das ganze Framework zu traversieren und habe mir gedacht dass es hier doch eine ganze simple Lösung geben müsste.

    Ich bedanke mich schon mal im Voraus!

  2. #2
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von buddy274 Beitrag anzeigen
    Nun möchte ich dass jeder Eintrag dieser Liste auf eine entsprechende generierte Detailseite verlinkt.
    Für die Details habe ich auch bereits ein FE-Modul (inkl. Template) geschrieben und auch schon eine Subpage für die Detailansicht eingebaut.

    Wie man so etwas außerhalb von Contao bewerkstelligt ist mir vollkommen klar,
    nur weiss ich leider nicht wie man den Link generieren müsste, damit dieser das Contao Framework anspricht,
    welches dann anhand mitgelieferter Parameter (z.b. Id der Stellenanzeige) meinen Content zusammenbaut und entsprechend anzeigt (am besten auch gleich den Link zurück ).
    In den Contao-Coremodulen (z.B. News, Events) legt der Admin im BE ja selbst fest, welche die Detailseite ist (Weiterleitung). In Deiner Klasse mußt Du nun diese Weiterleitungsseite auslesen und kannst Dir mit generateFrontendUrl Deine neue URL zusammenbauen.

    Ich gehe in einer eigenen Erweiterung einen anderen Weg. Dort habe ich die Seiten bereits fest in der Erweiterung zugeteilt. Zudem arbeite ich mit einem Hook, der mir die URL plus Parameter als Array liefert:

    config/config.php:
    PHP-Code:
    define(ALIAS_SPIELER'dwz-spieler'); // Spielerseite
    define(ALIAS_VEREIN'dwz-verein'); // Vereineseite
    define(ALIAS_VERBAND'dwz-verband'); // Verbändeseite
    define(ALIAS_TURNIER'dwz-turnier'); // Turniereseite

    // http://de.contaowiki.org/Strukturierte_URLs
    $GLOBALS['TL_HOOKS']['getPageIdFromUrl'][] = array('DeWIS\DeWIS''getParamsFromUrl'); 
    Auf den fest definierten Seiten läuft jeweils ein FE-Modul. Im FE kannst Du das Ganze hier testen.

    Meine Hookfunktion getParamsFromUrl sieht so aus:

    helper/DeWIS.php:
    PHP-Code:
    class DeWIS
    {
        
    /**
         * Hook-Funktion: 
         * Wertet das URL-Parameter-Array aus und modifiziert es, wenn das Array für DeWIS bestimmt ist
         *
         * @return array
         */
        
    public function getParamsFromUrl($arrFragments)
        {
            
    //print_r($arrFragments);
            
    $args count($arrFragments); // Anzahl Argumente

            
    if($args 1)
            {
                
    // Wenn $args = 1, dann steht dort nur das Seitenalias
                
    switch($arrFragments[0])
                {

                    case 
    ALIAS_SPIELER:
                        if(
    $arrFragments[1] == 'auto_item'$arrFragments[1] = 'id';
                        break;

                    case 
    ALIAS_VEREIN:
                        if(
    $arrFragments[1] == 'auto_item'$arrFragments[1] = 'zps';
                        break;

                    case 
    ALIAS_VERBAND:
                        if(
    $arrFragments[1] == 'auto_item'$arrFragments[1] = 'zps';
                        break;

                    case 
    ALIAS_TURNIER:
                        if(
    $arrFragments[1] == 'auto_item'
                        {
                            
    $arrFragments[1] = 'code';
                        }
                        else
                        {
                            
    $newArray = array($arrFragments[0]);
                            
    // 1. Wert ist offensichtlich ein Turniercode
                            
    $newArray[1] = 'code';
                            
    $newArray[2] = $arrFragments[1];
                            if(
    $arrFragments[2] == 'Ergebnisse')
                            {
                                
    // Ein weiterer Wert wartet: Ergebnisse des Turniers anzeigen
                                
    $newArray[3] = 'view';
                                
    $newArray[4] = 'results';
                            }
                            elseif(
    $arrFragments[2])
                            {
                                
    // Ein weiterer Wert wartet: ID des Spielers
                                
    $newArray[3] = 'id';
                                
    $newArray[4] = $arrFragments[2];
                                
    $newArray[5] = 'view';
                                
    $newArray[6] = 'results';
                            }
                            
    $arrFragments $newArray;
                        }
                        break;

                    default:
                }
            }
            
            
    //echo "<br>";
            //print_r($arrFragments);

            
    return $arrFragments;
        }

    Was macht die Funktion? Lies Dir dazu einfach mal diesen Thread durch. Es hat eine Weile gebraucht, bis ich Spooky verstanden habe, aber letztendlich hat es geklappt.

    Lautet die URL z.B. domain.de/spieler/10089054.html steht im Array $arrFragments welches der Funktion übergeben wird:
    PHP-Code:
    array(
        
    'spieler',
        
    'auto_item'// wohl nur, wenn auto_item aktiviert ist
        
    '10089054'

    Ist $arrFragments[0] == "spieler" ist die URL für meine Erweiterung bestimmt und ich kann das Array modifizieren, z.B.:
    PHP-Code:
    array(
        
    'spieler',
        
    'id',
        
    '10089054'

    Contao baut nun daraus domain.de/spieler.html?id=10089054 und ich kann im FE-Modul ganz normal die Parameter mit \Input::get auswerten. In meinem FE-Modul baue ich die Links in der Ausgabe dann natürlich wieder als, z.B. domain.de/spieler/10815.html zusammen.
    Geändert von Samson1964 (27.07.2016 um 08:37 Uhr)
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  3. #3
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard Danke

    Hallo Frank,

    vielen Dank für Deine Antwort. Leider komme ich gar nicht erst dazu mich direkt damit zu befassen,
    weil mein Contao plötzlich keine Template-Variablen mehr erkennt bzw. diese im Template nicht mehr verfügbar sind
    Kann mir da vielleicht erstmal jemand weiterhelfen? Ich bin echt am verzweifeln und verstehe null
    was hier auf einmal passiert ist....

    Meine Modul Klasse:
    Code:
    <?php
    
    class ModuleVacancyList extends Contao\Module
    {
        protected $strTemplate = 'mod_vacancy_list';
           
        /**
         * Compile current element
         */
        protected function compile()
        {
            $this->Template->test = 'test';       
        }    
    }
    Mein Template:
    Code:
    <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): ?>
            <<?php echo $this->headline; ?></<?php echo $this->hl; ?>>
        <?php endif; ?>
            
        <div><?php echo $this->test; ?></div>
    </div>

    Eigentlich müsste auf meiner Seite was Wort "test" erscheinen, aber wie gesagt es werden keine Template-Variablen mehr geladen.
    Als ich mir die mal ausgeben lassen habe mit "<?php $this->showTemplateVars(); ?>" war der Wert im array vorhanden...was kann ich tun?

    P.S. Ich habe mir schon diverse andere Code-Beispiele angesehen, aber da ist alles 1:1 das was ich hier stehen habe.
    Gestern funktionierte noch alles, aber nun auf einmal nicht mehr.

  4. #4
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von buddy274 Beitrag anzeigen
    Gestern funktionierte noch alles, aber nun auf einmal nicht mehr.
    Dann muß Dein Code ja richtig sein

    Muß es nicht
    PHP-Code:
    class ModuleVacancyList extends \Module 
    heißen?
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  5. #5
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard

    Hat sich erledigt, habe die Seite nochmal im Contao Backend angelegt und nun geht es wieder. Ich habe keine Ahnung was da passiert ist.
    Er hat einfach keine Ersetzungen mehr gemacht im Template, wobei die Werte zunächst beim Debuggen vorhanden waren.

    Dann ist mir aufgefallen dass der Debugger immer zweimal ins Template gelaufen ist und beim zweiten Mal waren die Werte nicht mehr da.
    Mir scheint als wenn er das dann überschrieben hat. Ich denke mal ich hab da wohl im Layout irgendwas falsch gemacht

    Ich werde mich nun mal mit deiner Antwort zu meiner eigentlichen Frage eingehender beschäftigen

  6. #6
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard Vielen Dank, Frank :D

    So, habe es jetzt mit den Hooks umsetzen können. Vielen Dank, funktioniert genau so wie ich mir das vorgestellt habe!
    Geändert von buddy274 (27.07.2016 um 23:22 Uhr)

  7. #7
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard Seite nicht gefunden

    Hallo nochmal,

    ich habe jetzt weiter an meiner Extension gewerkelt und stoße auf das Problem dass meine generierte URL nicht gefunden wird.
    Dazu habe ich auch schon einige Sachen in diversen Foren gefunden, aber komme hier leider nicht weiter

    Und zwar möchte ich auf ich nach wie vor eine Liste mit Stellenanzeigen bauen, wo jedes Element auf eine Detailseite weiterleitet.
    Hierzu generiere ich entsprechende Links mit einer genierten URL.


    Beispiel:

    meineDomain.de/subdetail/Arzt-im-weissen-Kittel/6.html

    Die Seite "subdetail" ist in Contao angelegt und mit einem Modul für Details versehen.
    Mein Debugger läuft auch in die entsprechende PHP Klasse für das Modul wenn ich den Link anklicke.
    Nur leider kriege ich im Browser dann die Meldung dass die Seite nicht gefunden wird.

    Ich habe auch schon einiges gelesen dass es auch an der .htaccess Datei liegen kann.
    Jedoch habe ich testweise auch mal das News Modul eingebunden und hier funktioniert die Generierung wie erwartet.
    Deshalb gehe ich mal davon aus dass das Problem nicht an der .htaccess liegt.

    Hat jemand eine Idee woran es in meinem Fall liegen kann dass ich nicht weitergeleitet werde?

    Gruß Daniel

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Das "Seite nicht gefunden" kommt immer, wenn Du in Deinem Modul nicht richtig die URL aufgelöst hast. Mit dem Hook getPageIdFromUrl kannst Du die an Contao übergebene URL noch bearbeiten. In Deinem Beispiel kommt in Deinem Hookaufruf wahrscheinlich folgendes Array an:
    PHP-Code:
    array(
        
    'subdetail',
        
    'auto-item',
        
    'Arzt-im-weissen-Kittel',
        
    '6'

    Das Array mußt Du jetzt im Hook umbauen und richtig zurückgeben:

    PHP-Code:
    return array(
        
    'subdetail',
        
    'kategorie',
        
    'Arzt-im-weissen-Kittel',
        
    'id',
        
    '6'

    In Deinem Modul, welches in der Seite subdetail.html eingebunden ist, holst Du dann alle Parameter ab:
    PHP-Code:
    \Input::setGet('kategorie', \Input::get('kategorie')); // Arzt-im-weissen-Kittel
    \Input::setGet('id', \Input::get('id')); // 6 
    Sobald Du in Deinem Modul einen Parameter vergißt, kommt "Seite nicht gefunden".
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  9. #9
    Contao-Nutzer
    Registriert seit
    26.07.2016.
    Beiträge
    47

    Standard Top, es funktioniert

    Vielen Dank Frank! Du bist mein Held

    Habe in der Zwischenzeit auch das hier schon gefunden, wo Du das gleiche Problem hattest.
    Ich poste mal den Link für alle die das gleiche Problem haben:

    https://community.contao.org/de/show...eFrontendUrl()

    Also man muss quasi alle URL-Parameter einmal "anfassen", damit das BE damit was anfangen kann. Wieder was gelernt.
    Nochmals vielen Dank und ebenfalls für die schnelle Antwort!

  10. #10
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Das ich theoretisch auch "auto_item" abfragen muß, war mir zwischenzeitlich wieder entfallen. Ich hatte nur in Erinnerung behalten, das man jeden Parametern abfragen muß, der da auf der URL auftauchen kann. Auch die, die man gerade nicht braucht.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

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
  •