Contao-Camp 2024
Ergebnis 1 bis 10 von 10

Thema: Auf Artikel-Autor im Template zugreifen

  1. #1
    Contao-Nutzer
    Registriert seit
    23.02.2019.
    Beiträge
    8

    Standard Auf Artikel-Autor im Template zugreifen

    Hallo zusammen und vielen Dank vorweg für die Hilfe!

    Ich bin erst vor kurzem auf contao umgestiegen und versuche mich gerade zurecht zu finden.
    Eventuell sehe ich deshalb den Wald vor lauter Bäumen nicht?

    Folgendes möchte ich umsetzen: Ich möchte innerhalb eines in einen Seiten-Artikel eingebundenes Inhaltselement-Template auf den Autor des Artikels (News-Artikel) zugreifen.
    Dieser wird bei Erstellung eines Artikels im BE ja unter "Titel und Autor" automatisch gesetzt.
    Innerhalb des News-Artikel-Templates kann ich mittels
    PHP-Code:
    $this->author 
    auf den Autor zugreifen.
    Eigentlich drehen sich auch alle gefundenen Einträge hier im Forum sowie in der contao-Doku über die Autoren von News.
    Für in einen Seiten-Artikel eingebundenes Template greift das offenbar nicht.
    Ich finden in den ausgegebenen
    PHP-Code:
    TemplateVars 
    innerhalt eines Seiten-Artikels auch keinen Hinweis auf den hinterlegten Autor.

    Deshalb habe ich mir die tl_news.php-DCA angesehen, hier wird der Autor (vermutlich) mittels
    PHP-Code:
    'author' => array
            (
                
    'default'                 => Contao\BackendUser::getInstance()->id,
                
    'exclude'                 => true,
                
    'search'                  => true,
                
    'filter'                  => true,
                
    'sorting'                 => true,
                
    'flag'                    => 11,
                
    'inputType'               => 'select',
                
    'foreignKey'              => 'tl_user.name',
                
    'eval'                    => array('doNotCopy'=>true'chosen'=>true'mandatory'=>true'includeBlankOption'=>true'tl_class'=>'w50'),
                
    'sql'                     => "int(10) unsigned NOT NULL default 0",
                
    'relation'                => array('type'=>'hasOne''load'=>'lazy')
            ), 
    hinterlegt, und kann im Template ausgegeben werden. Korrigiert mich wenn ich falsch liege?

    Wie kann ich das auf einen Artikel übertragen? Oder bin ich falsch in der Annahme, dass contao zwar den Autor eines Artikels automatisch hinterlegt, ich im Template aber nicht darauf zugreifen kann?
    Sorry für die euch vielleicht stupide erscheinende Frage. Jedoch verstehe ich die Zusammenhänge und Abläufe im core zwischen DCA, Models und und und noch nicht zu 100%...
    Ich hab in contao keine tl_article.php-DCA gefunden, Leo Freyer hat jüngst eine gepostet (https://github.com/contao/core-bundl...tl_article.php) .
    Da mir die contao-core-Umgebung noch fremd ist stehe ich hier vor einer Wand...

    Ich danke euch vielmals im Voraus für eure Hilfe, ihr seid die Besten!

    Liebe Grüße
    Chris aus Tübingen
    Geändert von Blerry (22.11.2019 um 18:17 Uhr)

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Welches Template?

  3. #3
    Contao-Nutzer
    Registriert seit
    23.02.2019.
    Beiträge
    8

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Welches Template?
    Hi Spooky und danke für deine Antwort,

    Ich bin gerade dabei das Template zu schreiben. (Basierend auf den Anforderungen der Custom Elements-Erweiterung von rocksolid aka..php file und html5 file - Für den Einstieg erschien mir das als simpelste Lösung).
    Das Template möchte ich innerhalb einer Seite als Element in einen Artikel einklinken, was auch wunderbar funktioniert.
    Im .htm5-File möchte ich mittels php den Autor des Artikels (oder auch die ID, URL) abfragen und damit weiter hantieren, was z.B. im Template news_full.html5 im news-bundle mittels
    PHP-Code:
    &this->author 
    wunderbar funktioniert.

    Ich begreife nur noch nicht ganz, welche Resourcen ich wo hinterlegen muss, damit das in meinem Template auch funktioniert.

    Nochmals Danke für deine/eure Hilfe!

    LG
    Chris

  4. #4
    Contao-Nutzer
    Registriert seit
    23.02.2019.
    Beiträge
    8

    Standard

    Gut, Denkfehler mit
    PHP-Code:
    $this->author 
    erkannt. Nicht vergleichbar, verständlich.
    So einfach wird es nicht, denn das ich mit $this nur auf meine Template-Inputs zugreifen kann ist mir bewusst.

    Ich frage mich trotzdem wie ich Zugriff auf die im "Mutter" Artikel im dem das Element mit meinem Template liegt Zugriff bekomme.
    Hierfür habe ich mich versucht in der contao-Doku Kund zu tun, dabei allerdings das Wirrwarr um DCA, Models und den Abruf bisher wie gesagt noch nicht durchstiegen.

    Nochmals vielen Dank im Voraus und liebe Grüße
    Chris

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Also ein Template eines Inhaltselementes, korrekt?

    Die Template Daten eines Inhaltselementes haben natürlich nicht die Daten des Artikels. Aber du kannst dir über die die Parent ID (pid) den zugehörigen Artikel holen. zB:
    PHP-Code:
    <?php

    use Contao\ArticleModel;
    use 
    Contao\UserModel;

    if (
    'tl_article' === $this->ptable) {
        
    $article ArticleModel::findByPk($this->pid);
        
    $author UserModel::findByPk($article->author);
    }
    Geändert von Spooky (07.12.2019 um 18:39 Uhr) Grund: fix AuthorModel vs. UserModel

  6. #6
    Contao-Nutzer
    Registriert seit
    23.02.2019.
    Beiträge
    8

    Standard

    Hallo spooky,

    Vielen Dank für deine Antwort.
    Ich habe mir extra Zeit gelassen, um zu sehen ob ich mir selbst auf dem Schlauch hocke und es peinlich wird.
    Allerdings bringe ich es einfach nicht zum laufen.

    Ja richtig, es handelt sich um ein Template für ein Inhaltselement.

    Ich habe dein php-Snippet in mein FE-Template eingeklinkt, allerdings möchte contao partout nicht mit den Models arbeiten.

    Fehlerlog sagt (/PFAD/ZUM/TEMPLATE wurde geändert):
    HTML-Code:
    request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ClassNotFoundException: "Attempted to load class "AuthorModel" from namespace "Contao". Did you forget a "use" statement for another namespace?" at /PFAD/ZUM/TEMPLATE/FILE line 12 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ClassNotFoundException(code: 0): Attempted to load class \"AuthorModel\" from namespace \"Contao\".\nDid you forget a \"use\" statement for another namespace? at [B]/PFAD/ZUM/TEMPLATE/FILE[/B]:12)"} []
    Sofern ich nur das ArticleModel "use" sagt mein Log:
    HTML-Code:
    [2019-12-07 15:34:10] request.CRITICAL: Uncaught PHP Exception ErrorException: "Catchable Fatal Error: Object of class Contao\ArticleModel could not be converted to string" at [B]/PFAD/ZUM/TEMPLATE/FILE[/B] line 23 {"exception":"[object] (ErrorException(code: 0): Catchable Fatal Error: Object of class Contao\\ArticleModel could not be converted to string at /PFAD/ZUM/TEMPLATE/FILE:23)"} []
    Ich steige hier leider aufgrund der mir neuen und bisher unbekannten Umgebung des contao-Cores einfach noch nicht dahinter, was mir contao sagen möchte.

    Nochmals vielen lieben Dank im Voraus und liebe Grüße aus Tübingen!

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Habe irrtümlich "AuthorModel" statt "UserModel" benutzt. Ist nun behoben.

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

    Standard

    Hi Spooky, und erneut tausend Dank für deine Zeit und Hilfe, das weiß ich wirklich zu schätzen!

    Vielen Dank für dein Update!
    Du hast im Snippet
    PHP-Code:
    use Contao\ArticleModel
    durch
    PHP-Code:
    use Contao\UserModel
    ersetzt.

    War das ein Fehler? Ich nehme an, du wolltest "AuthorModel" durch "UserModel" ersetzen, so wie du es bei
    PHP-Code:
    $author UserModel::findByPk($article->author); 
    getan hast, denn das snippet arbeitet ja mit ArticleModel und UserModel weiter?

    Wenn ich also
    PHP-Code:
    <?php

    use Contao\ArticleModel;
    use 
    Contao\UserModel;

    if (
    'tl_article' === $this->ptable) {
        
    $article ArticleModel::findByPk($this->pid);
        
    $author UserModel::findByPk($article->author);
    }
    verwende, liefert mit mein Log noch immer die Beschwerde aus, dass
    HTML-Code:
    Object of class Contao\ArticleModel could not be converted to string"
    .

    Volle Fehlermeldung:
    HTML-Code:
    [2019-12-07 17:14:15] request.CRITICAL: Uncaught PHP Exception ErrorException: "Catchable Fatal Error: Object of class Contao\ArticleModel could not be converted to string" at /PFAD/ZUM/TEMPLATE/FILE line 25 {"exception":"[object] (ErrorException(code: 0): Catchable Fatal Error: Object of class Contao\\ArticleModel could not be converted to string at /PFAD/ZUM/TEMPLATE/FILE:25)"} []
    Irgendwas schmeckt hier contao nicht. Die PID wird richtig gezogen. Gebe ich sie händisch ein, erscheint noch immer der gleiche Fehler.

    Es tut mir schon Leid wie sehr ich dich hier beschäftige, ich wünschte ich wüsste mit contao's Denkweise bzgl Models bereits besser zu hantieren.

    Nochmals besten Dank im Voraus und liebe Grüße!

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.883
    Partner-ID
    10107

    Standard

    Ja, war ein Fehler

    Zum neuen Fehler: du benutzt wahrscheinlich die $author Variable falsch. Poste dein aktuelles Template.

  10. #10
    Contao-Nutzer
    Registriert seit
    23.02.2019.
    Beiträge
    8

    Standard

    Hallo Spooky, finally,

    Manchmal liest man zwar, dass der Fehler in anderer Zeile generiert wird als in der auf die man sich eingeschossen hat, aber das Hirn ignoriert gekonnt die besten Hinweise...

    Als Vervollständigung für alle, die in Zukunft noch auf diesen Thread stoßen werden:

    Natürlich müsst ihr noch den gewünschten Parameter selektieren, bevor ihr auf die glorreiche Idee kommt einen String auszugeben. Beispielsweise:
    PHP-Code:
    $waldvorbaeumennicht $author->username
    Liebe Grüße und vielen Dank an dich Spooky!

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
  •