Ankündigung

Einklappen
Keine Ankündigung bisher.

field is not set or not a callable

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • field is not set or not a callable

    Wir haben die Website eines Kunden von Contao 3.5.40 auf Contao 4.7.7 aktualisiert. Dabei haben wir auch alle Eclipse Theme Files (assets, templates und pct_ modules) aktualisiert.

    Bei (zumindest einem) bestimmten Custom Element kommt es aber nun zu folgendem Fehler:

    Code:
    InvalidArgumentException:
    field is not set or not a callable
    
      at vendor/contao/core-bundle/src/Resources/contao/library/Contao/Template.php:147
      at Contao\Template->__call('field', array('schema'))
         (templates/layout/customelement_teambox_foo.html5:1)
      at include('.../templates/layout/customelement_teambox_foo.html5')
         (vendor/contao/core-bundle/src/Resources/contao/library/Contao/TemplateInheritance.php:96)
      at Contao\Template->inherit()
         (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Template.php:268)
      at Contao\Template->parse()
         (vendor/contao/core-bundle/src/Resources/contao/classes/FrontendTemplate.php:45)
      at Contao\FrontendTemplate->parse()
         (vendor/contao/core-bundle/src/Resources/contao/elements/ContentElement.php:284)
      at Contao\ContentElement->generate()
         (vendor/contao/core-bundle/src/Resources/contao/elements/ContentImage.php:55)
      at Contao\ContentImage->generate()
         (system/modules/pct_customelements/PCT/CustomElements/Attributes/Image/Image.php:255)
      at PCT\CustomElements\Attributes\Image->renderCallback('r9skt27vp1hot6h', '536a9cd4-23b3-11e8-a23b-02420a80ff02', object(FrontendTemplate), object(Image))
         (system/modules/pct_customelements/PCT/CustomElements/Core/Attribute.php:1245)
      at PCT\CustomElements\Core\Attribute->render()
         (system/modules/pct_customelements/PCT/CustomElements/Core/TemplateAttribute.php:137)
      at PCT\CustomElements\Core\TemplateAttribute->render('')
         (system/modules/pct_customelements/PCT/CustomElements/Core/TemplateAttribute.php:147)
      at PCT\CustomElements\Core\TemplateAttribute->html()
         (templates/layout/customelement_teambox_foo.html5:11)
      at include('.../templates/layout/customelement_teambox_foo.html5')
         (vendor/contao/core-bundle/src/Resources/contao/library/Contao/TemplateInheritance.php:96)
      at Contao\Template->inherit()
         (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Template.php:268)
      at Contao\Template->parse()
         (vendor/contao/core-bundle/src/Resources/contao/classes/FrontendTemplate.php:45)
      at Contao\FrontendTemplate->parse()
         (vendor/contao/core-bundle/src/Resources/contao/elements/ContentElement.php:284)
      at Contao\ContentElement->generate()
         (system/modules/pct_customelements/PCT/CustomElements/Frontend/ContentCustomElement.php:122)
      at PCT\CustomElements\Frontend\ContentCustomElement->generate()
         (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:474)
      at Contao\Controller::getContentElement(object(ContentModel), 'main')
         (vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php:193)
      at Contao\ModuleArticle->compile()
         (vendor/contao/core-bundle/src/Resources/contao/modules/Module.php:215)
      at Contao\Module->generate()
         (vendor/contao/core-bundle/src/Resources/contao/modules/ModuleArticle.php:75)
      at Contao\ModuleArticle->generate(false)
         (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:414)
      at Contao\Controller::getArticle(object(ArticleModel), true, false, 'main')
         (vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:273)
      at Contao\Controller::getFrontendModule('0', 'main')
         (vendor/contao/core-bundle/src/Resources/contao/pages/PageRegular.php:176)
      at Contao\PageRegular->prepare(object(PageModel))
         (vendor/contao/core-bundle/src/Resources/contao/pages/PageRegular.php:49)
      at Contao\PageRegular->getResponse(object(PageModel), true)
         (vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:351)
      at Contao\FrontendIndex->renderPage(object(PageModel))
         (vendor/symfony/http-kernel/HttpKernel.php:150)
      at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
         (vendor/symfony/http-kernel/HttpKernel.php:67)
      at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
         (vendor/symfony/http-kernel/Kernel.php:198)
      at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
         (web/app_dev.php:83)
    Das customelement_teambox_foo Template unterscheidet sich nicht wesentlich vom Original, es wurden nur ein paar Dinge entfernt:

    PHP-Code:
    <div class="<?php echo $this->class?> block <?php echo $this->field('schema')->value(); ?><?php if($this->field('margin_top')->value()): ?> <?php echo $this->field('margin_top')->value(); ?><?php endif; ?><?php if($this->field('margin_bottom')->value()): ?> <?php echo $this->field('margin_bottom')->value(); ?><?php endif; ?><?php if($this->field('margin_top_mobile')->value()): ?> <?php echo $this->field('margin_top_mobile')->value(); ?><?php endif; ?><?php if($this->field('margin_bottom_mobile')->value()): ?> <?php echo $this->field('margin_bottom_mobile')->value(); ?><?php endif; ?><?php echo $this->cssID?><?php if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>    
        
        <?php if($this->field('schema')->value() != 'hover_image'): ?>
        
        <div class="teambox_inside">
            <div class="image">
                <?php if($this->field('email')->value()): ?>
                <a href="mailto:<?= $this->replaceInsertTags('{{email_url::'.$this->field('email')->value().'}}'); ?>">
                <?php endif; ?>
                
                <?php echo $this->field('image')->html(); ?>
                
                <?php if($this->field('email')->value()): ?>
                <span class="overlay"><i class="fa fa-envelope"></i></span>
                </a>
                <?php endif; ?>
                
            </div>
            
            <div class="teambox_content">
                <?php if($this->field('name')->value()): ?>
                <h5 class="name"><?php echo $this->field('name')->value(); ?></h5>
                <?php endif; ?>
                
                <?php if($this->field('function')->value()): ?>
                <div class="function"><?php echo $this->field('function')->value(); ?></div>
                <?php endif; ?>
            </div>
        
        </div>
        
        <?php endif; ?>
        
        <?php if($this->field('schema')->value() == 'hover_image'): ?>
        
        <div class="team-content">
            
            <?php echo $this->field('image')->html(); ?>
            
            <div class="team-content-hover">
                <div class="team-content-valign">
                    <?php if($this->field('name')->value()): ?>
                    <h5 class="name"><?php echo $this->field('name')->value(); ?></h5>
                    <?php endif; ?>
                    
                    <?php if($this->field('function')->value()): ?>
                    <div class="function"><?php echo $this->field('function')->value(); ?></div>
                    <?php endif; ?>
                </div>
            </div>
        </div>
        
        <?php endif; ?>
        
    </div>


    Wenn ich zum Test ein neues Custom Element konfiguriere, als Inhaltselement erzeuge und einfüge, dann funktioniert jedoch alles. Kann mir momentan nicht erklären, warum es gerade nur bei bestimmten Element nicht funktionieren sollte. Auch in der Custom Element Konfiguration selbst ist nichts auffällig.

    Wollte es auch schon ein wenig im Modul selbst debuggen, habe aber auf die Schnelle nicht die Stelle gefunden, wo diese callables im Template gesetzt werden.
    Zuletzt geändert von fritzmg; 12.08.2019, 10:03.

  • #2
    Eine Übersicht der öffentlichen Template-Methoden finden sich hier: https://forum.premium-contao-themes....late-variablen

    Bitte beachte: Wir unterstützen ausschließlich nur LTS Versionen von Contao.
    ---
    Der Fehler entsteht, weil du anscheinend in einem anderen Template ein CE Template inkludierst, das ab in diesem Fall nicht von der CE Template-Klasse erbt. Damit fehlen die öffentlichen Methoden wie fields() field() value() usw. in dem externen Template.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Zitat von Tim Beitrag anzeigen
      Der Fehler entsteht, weil du anscheinend in einem anderen Template ein CE Template inkludierst, das ab in diesem Fall nicht von der CE Template-Klasse erbt. Damit fehlen die öffentlichen Methoden wie fields() field() value() usw. in dem externen Template.
      Hm, also in unseren Templates selbst verwenden wir keine inheritance und auch kein include. Es ist aber tatsächlich seltsam, dass bei

      PHP-Code:
      <?php echo $this->field('image')->html(); ?>

      in weiterer Folge wieder das selbe Template inkludiert wird.
      Zuletzt geändert von fritzmg; 12.08.2019, 10:05.

      Kommentar


      • #4
        Prüfe die Template-Auswahl im Bild-Attribut. Dieses erlaubt wiederum die Auswahl von ce_ Templates, weil die in Contao halt so heissen . Hier könnte man ein CE Template wählen und hätte ebenfalls keine Vererbung.
        CE Templates bzw. deren Klasse wird nur durch das Rendern eines realen CustomElements gesetzt.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Dort ist das default Attribut Template ausgewählt (siehe Screenshot). Ich habe aber gerade etwas gedebugged: in PCT\CustomElements\Attributes\Image\Image.php, Zeile #205 wird der active record für dieses Attribut geholt. Dort drin steht als Template wiederum customelement_teambox_foo.html5 drin. Das Template eines \Contao\ContentImage wird dann im Konstruktor gesetzt - daher wird auch hier das Element Template für das Bild übernommen und dadurch kommt es auch zu diesem Fehler.

          Jetzt ist nur die Frage warum, denn theoretisch sollte dieser Fehler ja immer auftreten (wenn man ein Bild Attribut im Custom Element verwendet)? Soweit ich weiß würde das auch in Contao 4.4 auftreten.

          Kommentar


          • #6
            Wo wird denn "customelement_teambox_foo" gewählt? Wird das im Inhaltselement gewählt oder in den CE-Einstellungen? Ersteres manipuliert den active record. Hier ist vielleicht die Übergabe zu weitreichend.
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Ah, jap! Tatsächlich, es war in den einzelnen Teamboxen Inhaltselementen auch nochmal das "customelement_teambox_foo" Template ausgewählt.

              Evt. sollte aber trotzdem noch direkt nach
              PHP-Code:
              $objActiveRecord $this->getActiveRecord(); 
              ein
              PHP-Code:
              $objActiveRecord->customTpl ''
              eingefügt werden? Denn wenn das Attribut ein individuelles Template hat, würde es ja gleich danach wieder gesetzt werden, wenn ich das richtig verstehe.
              Zuletzt geändert von fritzmg; 12.08.2019, 11:26.

              Kommentar


              • #8
                Ich notiere es mir zum Prüfen.
                http://www.premium-contao-themes.com

                Kommentar


                • #9
                  Hallo zusammen,

                  kann das beschriebene Phänomen bestätigen. Ist mir heute schon das zweite Mal aufgefallen. Jedesmal wenn ein eigenes Template im Linkboxelement eingestellt wird taucht der Fehler (InvalidArgumentException(code: 0): field is not set or not a callable at ... /contao/library/Contao/Template.php:147) im Log auf und die Seite geht nicht mehr.

                  Und zwar in meinem Fall bei einer angepassten Linkbox. Und zwar nach einem Update von pct_customelements Version 3.3.0 auf Version 4.0.1. Contao-Version 4.4.39 bzw 4.4.41. Im ersten Fall bin ich wieder auf die alte Version zurück.

                  Jetzt wäre ich aber an einer Lösung interessiert. Sonst muss ich jedesmal wieder zurück oder eben ein eigenes Inhaltselement anlegen und dort direkt das angepasste Template einfügen.

                  Oder gibt es noch eine andere Möglichkeit?

                  Kommentar


                  • #10
                    Ich kann es bestätigen, wenn das Bild-Attribut kein eigenes Template gewählt hat. Ich habe es notiert.

                    Wenn Du / Ihr dem Bild-Attribut ein neues Template zu weist, entsteht die Kette nicht.
                    Ich habe meinem Bild-Attribut hier das Contao Standard ce_image Template gegeben.

                    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: screenshot_4766.jpg
Ansichten: 207
Größe: 74,6 KB
ID: 16251
                    http://www.premium-contao-themes.com

                    Kommentar


                    • #11
                      https://forum.premium-contao-themes....6259#post16259
                      http://www.premium-contao-themes.com

                      Kommentar

                      Lädt...
                      X