Ergebnis 1 bis 15 von 15

Thema: MM 2.3 - Insert-Tags & optionale Felder

  1. #1
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard MM 2.3 - Insert-Tags & optionale Felder

    Hallöchen,

    kurze Frage zu den Insert-Tags in MM 2.3:

    Was mache ich, wenn ich per Insert-Tag ein optionales Feld abfrage? In MM 2.2 war im Beispiel $ende einfach leer, nun bekomme ich einen Fehler:

    PHP-Code:
    $ende $this->replaceInsertTags('{{mm::attribute::mm_events::123::25::enddate::raw}}'); 
    PHP-Code:
    [2023-07-20T09:24:23.705657+02:00request.CRITICALUncaught PHP Exception TypeError"MetaModels\CoreBundle\EventListener\InsertTagsListener::getAttribute(): Return value must be of type string|bool, null returned" at /www/htdocs//vendor/metamodels/core/src/CoreBundle/EventListener/InsertTagsListener.php line 340 {"exception":"[object] (TypeError(code: 0): MetaModels\\CoreBundle\\EventListener\\InsertTagsListener::getAttribute(): Return value must be of type string|bool, null returned at /www/htdocs/…/vendor/metamodels/core/src/CoreBundle/EventListener/InsertTagsListener.php:340)"} [] 
    VG
    Nicole

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

    Standard

    könntest Du den Debugmodus einschalten und den kompletten Stacktrace senden...

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

    Standard

    kannst Du mal die Datei vendor/metamodels/core/src/CoreBundle/EventListener/InsertTagsListener.php öffnen und einen Dump in #334 einfügen

    PHP-Code:
            // Parse attribute.
            
    $arrAttr $item->parseAttribute($attributeIdentifier$outputFormat$renderSetting);
    dump($arrAttr);
            
    // Reset format to raw if is it.
            
    if ('raw' === $originalOutputFormat) {
                
    $outputFormat 'raw';
            } 
    was steht da drinnen?

  4. #4
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Der komplette Stacktrace ist voller HTML-Bestandteile und ewig lang, ich zeige dir mal die beiden Logs mit Stacktrace. Reicht dir das so?

    Es werden 2 Fehler angezeigt:

    PHP-Code:
    [?
      
    "exception" => TypeError {#5197 ?}
    ]

    {?
      /
    www/htdocs//vendor/metamodels/core/src/CoreBundle/EventListener/InsertTagsListener.php:340 {?
        
    MetaModels\CoreBundle\EventListener\InsertTagsListener->getAttribute(string|int $metaModelIdOrNameint $intDataIdstring|int $viewIdstring|int $attributeIdentifier, ?string $outputFormat): string|bool …
        › 
        ›     
    return $arrAttr[$outputFormat];
        
    › }
      }
      /
    www/htdocs//vendor/metamodels/core/src/CoreBundle/EventListener/InsertTagsListener.php:150 {?
        
    MetaModels\CoreBundle\EventListener\InsertTagsListener->__invoke(string $insertTag): string|int|bool …
        › 
    return $this->checkMinExpectElements(6$elements)
        
    ›     $this->getAttribute($elements[2], $elements[3], $elements[4], $elements[5], ($elements[6] ?? null))
        
    ›     false;
        
    arguments: {?
          
    $metaModelIdOrName"mm_events"
          
    $intDataId128
          $viewId
    "25"
          
    $attributeIdentifier"enddate"
          
    $outputFormat"raw"
        
    }
      }
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/InsertTags.php:1171 {?
        
    Contao\InsertTags->executeReplace(string $strBufferbool $blnCache
        › $this
    ->import($callback[0]);
        
    › $varValue $this->{$callback[0]}->{$callback[1]}($tag$blnCache$arrCache[$strTag], $flags$tags$arrCache$_rit$_cnt); // see #6672
        
    › 
        arguments
    : {?
          
    $insertTag"mm::attribute::mm_events::128::25::enddate::raw"
          
    ...: {?}
        }
      }
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/InsertTags.php:100 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:77 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:37 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:32 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:849 {?}
      /
    www/htdocs//templates/lag/anmeldung/get_veranstaltungsdatum.inc.php:{?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/InsertTags.php:1151 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/InsertTags.php:100 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:77 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:37 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:32 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/classes/FrontendTemplate.php:128 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/Template.php:322 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/classes/FrontendTemplate.php:85 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/pages/PageRegular.php:62 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:320 {?}
      /
    www/htdocs//vendor/symfony/http-kernel/HttpKernel.php:163 {?}
      /
    www/htdocs//vendor/symfony/http-kernel/HttpKernel.php:75 {?}
      /
    www/htdocs//vendor/symfony/http-kernel/Kernel.php:202 {?}
      /
    www/htdocs//web/index.php:44 {?}

    PHP-Code:
    {?
      /
    www/htdocs//vendor/metamodels/core/src/CoreBundle/EventListener/InsertTagsListener.php:340 {?
        
    MetaModels\CoreBundle\EventListener\InsertTagsListener->getAttribute(string|int $metaModelIdOrNameint $intDataIdstring|int $viewIdstring|int $attributeIdentifier, ?string $outputFormat): string|bool …
        › 
        ›     
    return $arrAttr[$outputFormat];
        
    › }
      }
      /
    www/htdocs//vendor/metamodels/core/src/CoreBundle/EventListener/InsertTagsListener.php:150 {?
        
    MetaModels\CoreBundle\EventListener\InsertTagsListener->__invoke(string $insertTag): string|int|bool …
        › 
    return $this->checkMinExpectElements(6$elements)
        
    ›     $this->getAttribute($elements[2], $elements[3], $elements[4], $elements[5], ($elements[6] ?? null))
        
    ›     false;
        
    arguments: {?
          
    $metaModelIdOrName"mm_events"
          
    $intDataId128
          $viewId
    "25"
          
    $attributeIdentifier"enddate"
          
    $outputFormat"raw"
        
    }
      }
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/InsertTags.php:1171 {?
        
    Contao\InsertTags->executeReplace(string $strBufferbool $blnCache
        › $this
    ->import($callback[0]);
        
    › $varValue $this->{$callback[0]}->{$callback[1]}($tag$blnCache$arrCache[$strTag], $flags$tags$arrCache$_rit$_cnt); // see #6672
        
    › 
        arguments
    : {?
          
    $insertTag"mm::attribute::mm_events::128::25::enddate::raw"
          
    ...: {?}
        }
      }
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/InsertTags.php:100 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:77 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:37 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:32 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/Controller.php:849 {?}
      /
    www/htdocs//templates/lag/anmeldung/get_veranstaltungsdatum.inc.php:{?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/InsertTags.php:1151 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/InsertTags.php:100 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:77 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:37 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/InsertTag/InsertTagParser.php:32 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/classes/FrontendTemplate.php:128 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/library/Contao/Template.php:322 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/classes/FrontendTemplate.php:85 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/pages/PageRegular.php:62 {?}
      /
    www/htdocs//vendor/contao/core-bundle/src/Resources/contao/controllers/FrontendIndex.php:320 {?}
      /
    www/htdocs//vendor/symfony/http-kernel/HttpKernel.php:163 {?}
      /
    www/htdocs//vendor/symfony/http-kernel/HttpKernel.php:75 {?}
      /
    www/htdocs//vendor/symfony/http-kernel/Kernel.php:202 {?}
      /
    www/htdocs//web/index.php:44 {?}

    Die Datei get_veranstaltungsdatum.inc.php sieht aus wie folgt. Das Startdatum funktioniert wunderbar, das Enddatum ist optional und in diesem Fall eben leer.

    PHP-Code:
    <?php
      $veranstaltung 
    intval(\Input::get('veranstaltung'));
      if (
    $veranstaltung 0) {
        
    $start $this->replaceInsertTags('{{mm::attribute::mm_events::'.$veranstaltung.'::24::startdate::raw}}');
        
    $ende $this->replaceInsertTags('{{mm::attribute::mm_events::'.$veranstaltung.'::25::enddate::raw}}');
        if (!
    $ende) {
          
    $myDatum date('j.n.y'$start);
        } else if (
    date('m'$start) == date('m'$ende)) {
            
    $myDatum date('j.'$start).' – '.date('j.n.y'$ende);
        } else {
            
    $myDatum date('j.n.'$start).' – '.date('j.n.y'$ende);
        }
        echo 
    $myDatum;
      }
      else echo 
    "–";
    ?>

  5. #5
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    kannst Du mal die Datei vendor/metamodels/core/src/CoreBundle/EventListener/InsertTagsListener.php öffnen und einen Dump in #334 einfügen

    PHP-Code:
            // Parse attribute.
            
    $arrAttr $item->parseAttribute($attributeIdentifier$outputFormat$renderSetting);
    dump($arrAttr);
            
    // Reset format to raw if is it.
            
    if ('raw' === $originalOutputFormat) {
                
    $outputFormat 'raw';
            } 
    was steht da drinnen?
    Ich habe "dump($arrAttr);" eingefügt, aber wie/wo kann ich die Ausgabe dazu sehen?

  6. #6

  7. #7
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    im Debugmodus unten beim "Fadenkreuz"
    Ah, wieder was gelernt. Danke!

    Interessanterweise gibt es zwei Einträge mit:

    PHP-Code:
    array:[?
      
    "raw" => null
      
    "text" => ""

    Aber nur einer davon bringt einen Fehler.

    technology [longtext] darf leer sein, enddate [timestamp] nicht. Der Unterschied in den Insert-Tags ist der raw-Teil:

    PHP-Code:
    $technik html_entity_decode($this->replaceInsertTags('{{mm::attribute::mm_events::'.$veranstaltung.'::30::technology::text}}'));
    $ende $this->replaceInsertTags('{{mm::attribute::mm_events::'.$veranstaltung.'::25::enddate::raw}}'); 
    Wenn ich bei $ende statt "raw" "text" setze, gibt es keinen Fehler. Wenn ich das bei $start auch mache, gibt es einen neuen Fehler weil dann natürlich die date-Funktionen nicht mehr klappen.

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

    Standard

    hmm... das sieht alles recht komisch aus

    der raw-Knoten sollte nie null haben - hat den enddate immer einen Wert?

    Ich befürchte, ich muss mir das mal bei Dir angucken - ich sende mal eine PN E-Mail...

  9. #9

  10. #10
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo zonky,

    die geupdatete Seite ist nun seit 2 Wochen live und alles läuft gut. Ich habe aber noch eine Frage zu den Insert-Tag bei optionalen Feldern:

    Im Systemlog finden sich viele Fehler nach dem Schema "Unknown insert tag {{mm::attribute::mm_events::128::25::enddate::raw} ". Das sind alles Veranstaltungen, die eben kein Enddatum haben, ist ja auch optional. Kann ich irgendwie einstellen, dass das nicht geloggt wird?

    VG
    Nicole

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

    Standard

    die Meldung kommt von Contao - abschalten kann man das m. E. nicht...

    man müsste mal gucken, warum der Inserttag nicht aufgelöst wird und hier ein false liefert

    siehe vendor/metamodels/core/src/CoreBundle/EventListener/InsertTagsListener.php

  12. #12
    Administratorin Avatar von lucina
    Registriert seit
    19.06.2009.
    Ort
    Kiel (DE)
    Beiträge
    7.335
    Partner-ID
    152
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Webstylerin Beitrag anzeigen
    Im Systemlog finden sich viele Fehler nach dem Schema "Unknown insert tag {{mm::attribute::mm_events::128::25::enddate::raw} ". Das sind alles Veranstaltungen, die eben kein Enddatum haben, ist ja auch optional. Kann ich irgendwie einstellen, dass das nicht geloggt wird?
    Wenn ich mir dein Template anschaue ...
    PHP-Code:
    <?php
      $veranstaltung 
    intval(\Input::get('veranstaltung'));
      if (
    $veranstaltung 0) {
        
    $start $this->replaceInsertTags('{{mm::attribute::mm_events::'.$veranstaltung.'::24::startdate::raw}}');
        
    $ende $this->replaceInsertTags('{{mm::attribute::mm_events::'.$veranstaltung.'::25::enddate::raw}}');
        if (!
    $ende) {
          
    $myDatum date('j.n.y'$start);
        } else if (
    date('m'$start) == date('m'$ende)) {
            
    $myDatum date('j.'$start).' – '.date('j.n.y'$ende);
        } else {
            
    $myDatum date('j.n.'$start).' – '.date('j.n.y'$ende);
        }
        echo 
    $myDatum;
      }
      else echo 
    "–";
    ?>
    ... dann würde aus meiner Sicht helfen, auch noch mal auf $enddate abzufragen, bevor das ggf an den Inserttag übergeben wird. Ist doch eigentlich klar, dass der nicht aufgelöst werden kann, wenn der leer ist.

    Just my 2 Cents.

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

    Standard

    PHP-Code:
    $ende $this->replaceInsertTags('{{mm::attribute::mm_events::'.$veranstaltung.'::25::enddate::raw}}'); 
    das "enddate" ist ja kein Variablenwert sondern der Name der Spalte... ich glaube, wenn es den Wert nicht gibt, liefert $arrAttr[$outputFormat] ein null zurück und es sollte dann kein false sondern '' im return stehen

    PHP-Code:
    ....

            
    $originalOutputFormat $outputFormat;
            
    // Set output format to default if not set or raw.
            
    if (empty($outputFormat) || 'raw' === $outputFormat) {
                
    $outputFormat 'text';
            }

            
    // Get render setting.
            
    if (null === ($renderSetting $this->renderSettingFactory->createCollection($metaModel, (int) $viewId))) {
                
    $outputFormat 'text';
            }

            
    // Parse attribute.
            
    $arrAttr $item->parseAttribute($attributeIdentifier$outputFormat$renderSetting);

            
    // Reset format to raw if is it.
            
    if ('raw' === $originalOutputFormat) {
                
    $outputFormat 'raw';
            }

            return 
    $arrAttr[$outputFormat] ?? false

  14. #14
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von lucina Beitrag anzeigen
    ... dann würde aus meiner Sicht helfen, auch noch mal auf $enddate abzufragen, bevor das ggf an den Inserttag übergeben wird. Ist doch eigentlich klar, dass der nicht aufgelöst werden kann, wenn der leer ist.

    Just my 2 Cents.
    Danke, dass du auch einen Blick drauf geworfen hast. Die Idee irgendwie im Template noch mal zu prüfen, hatte ich auch schon. Leider weiß ich im Template erst, ob es ein Enddatum im jeweiligen MM-Eintrag gibt, wenn ich die Info per Insert-Tag hole.

    Zitat Zitat von zonky Beitrag anzeigen
    das "enddate" ist ja kein Variablenwert sondern der Name der Spalte... ich glaube, wenn es den Wert nicht gibt, liefert $arrAttr[$outputFormat] ein null zurück und es sollte dann kein false sondern '' im return stehen
    In der vorherigen Version (C4.9/MM2.2) hatte ich das Problem nicht, wenn es kein Enddatum gab, war die Rückgabe einfach leer und gut war. Die Meldungen sind kein Beinbruch, aber es füllt den Systemlog unnötig. Falls du aber mal Zeit hast und drüber schauen möchtest, wäre ich dir sehr dankbar.

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

    Standard

    hatten wir das Thema nicht schon gefixt?!? #9

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
  •