Ergebnis 1 bis 6 von 6

Thema: rootPage im BE Modul-Kontext // Wie?

  1. #1
    Contao-Nutzer
    Registriert seit
    08.09.2012.
    Beiträge
    11

    Standard rootPage im BE Modul-Kontext // Wie?

    Hallo zusammen,

    es geht um ein Custom Modul in Contao 3.5.

    PHP-Code:
     class ModuleMyCustom extends \Module 

    Im FE-Kontext komme ich über

    PHP-Code:
        global $objPage;
                
    $root_id $objPage->rootId;
                
    $root = \PageModel::findByPk($root_id); 
    leicht an die zugehörige "Startpunkt einer Webseite"-Seite.

    Im BE-Kontext, also z.B. Artikel-Vorschau, funktioniert das aber nicht, da hier $objPage NULL ist.


    Habe bisher nichts passendes gefunden.

    Meine bisherige Idee ist über ...

    PHP-Code:
    $this->Input->get('id'
    die Artikel-ID zu holen, und dann in einer HelperFunction mich per SQL vom Artikel zur Seite und dann bis zur RootPage hochzuarbeiten.

    Dürfte so in etwa funktionieren, kommt mir aber sehr gebastelt vor.

    Frage, gibt es in Contao für diesen Zweck bereits etwas passendes?


    Danke für alle Schubser in die richtige Richtung

    Viele Grüße

    Stefan

  2. #2
    Contao-Nutzer
    Registriert seit
    08.09.2012.
    Beiträge
    11

    Standard rootPage im BE Modul-Kontext // So vielleicht

    Hallo zusammen,

    so sieht jetzt meine Lösung aus.

    Ich hangele mich durch, von unten nach oben. (Modul -> ContentElement -> Article -> Page -> PageParents -> Root)

    Falls jemand weitere/andere Anregungen hat gerne, ansonsten bin ich damit erstmal zufrieden.
    Ist Dank der Model-Klassen dann doch nicht so schlimm gebastelt wie zunächst befürchtet.


    Hier der Code falls mal jemand etwas ähnliches benötigt.

    PHP-Code:
    class ContaoHelper
    {

        public static function 
    getRootByModuleID($id){

            if (
    is_object($ce = \ContentModel::findByModule($id)) &&
                
    is_object($article = \ArticleModel::findByPK($ce->pid)) &&
                
    is_object($page = \PageModel::findByPK($article->pid)) &&
                
    is_object($parents = \PageModel::findParentsByID($page->id)) &&
                
    is_object($root $parents->last()->current())
            ){
                
    // $root assigned successfully
            
    }else{
                
    // something went wrong ...
                
    $root null;
            }
            return 
    $root;
        }




    PHP-Code:

    class MyCustomModule extends \Module
    {
     public function 
    __construct($objModule){

            
    $root ContaoHelper::getRootByModuleID($objModule->id);
    }


  3. #3
    Contao-Fan Avatar von css-umsetzung
    Registriert seit
    13.11.2010.
    Ort
    Berlin
    Beiträge
    307

    Standard

    Du weisst, das ein Modul in verschiedenen Artikelseiten von verschiedenen roots eingesetzt werden kann?

    Du kannst also nie sicher sein das richtige root zu haben.
    css-umsetzung.de

    Programmierungen im Bereich PHP, JavaScript sowie Layoutumsetzungen in HTML/CSS.
    Unterstützte Systeme: Contao, JTL, Plentymarket sowie alle XTC Basierenden Shops.
    -JTL Servicepartner- -Quicksupport über Teamview-

  4. #4
    Contao-Nutzer
    Registriert seit
    08.09.2012.
    Beiträge
    11

    Standard

    Moin,

    ja, das hab ich dann auch gemerkt.

    Daher für den BE-Preview doch auf GET zurückgegriffen.

    Sieht jetzt in etwa so aus:
    PHP-Code:
    class ContaoHelper
    {
        public static function 
    getRootByArticleID($id){

            if (
    is_object($article = \ArticleModel::findByPK($id)) &&
                
    is_object($page = \PageModel::findByPK($article->pid)) &&
                
    is_object($parents = \PageModel::findParentsByID($page->id)) &&
                
    is_object($root $parents->last()->current())
            ){
                
    // $root assigned successfully
            
    }else{
                
    // something went wrong ...
                
    $root null;
            }
            return 
    $root;
        }



    PHP-Code:
    $root ContaoHelper::getRootByArticleID($this->Input->get('id')); 
    Danke für's Mitlesen und Mitdenken.

    Viele Grüße

    Stefan

  5. #5
    Contao-Fan Avatar von css-umsetzung
    Registriert seit
    13.11.2010.
    Ort
    Berlin
    Beiträge
    307

    Standard

    und damit kommst du aufs root?

    also ich haette ja
    PHP-Code:

    findWithDetails
    () 
    benutzt und dann das root über die dort enthaltene rootId geholt.
    css-umsetzung.de

    Programmierungen im Bereich PHP, JavaScript sowie Layoutumsetzungen in HTML/CSS.
    Unterstützte Systeme: Contao, JTL, Plentymarket sowie alle XTC Basierenden Shops.
    -JTL Servicepartner- -Quicksupport über Teamview-

  6. #6
    Contao-Nutzer
    Registriert seit
    08.09.2012.
    Beiträge
    11

    Standard

    Ah, das kannte ich nicht.

    Habe mal den Code angeschaut (https://github.com/contao/core/blob/.../PageModel.php)

    ln. 755

    PHP-Code:
    while ($pid && $type != 'root' && $objParentPage->next()) 
    Da hangelt er sich also auch die ParentPages nach oben.

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
  •