Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TNG] Warning: metamodel_prerendered: Undefined template variable: settings #552

Closed
cyberlussi opened this issue Aug 21, 2014 · 34 comments
Closed
Labels
bug A bug! A bug! Fast, squish it!
Milestone

Comments

@cyberlussi
Copy link

Mit den neuesten Commits und dev-tng (c2d0092) scheint das Template nicht zurechtzukommen ...

Warning: metamodel_prerendered: Undefined template variable: settings in composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/Render/Template.php on line 112

#0 [internal function]: __error(512, 'metamodel_prere...', '/home/www/web1/...', 112, Array)
#1 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/Render/Template.php(112): trigger_error('metamodel_prere...', 512)
#2 system/modules/metamodels/templates/metamodel_prerendered.html5(1): MetaModels\Render\Template->__get('settings')
#3 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/Render/Template.php(361): include('/home/www/web1/...')
#4 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/ItemList.php(817): MetaModels\Render\Template->parse('html5')
#5 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(112): MetaModels\ItemList->render('', Object(MetaModels\FrontendIntegration\Content\ModelList))
#6 system/modules/core/elements/ContentElement.php(174): MetaModels\FrontendIntegration\Content\ModelList->compile()
#7 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(64): Contao\ContentElement->generate()
#8 system/modules/core/library/Contao/Controller.php(468): MetaModels\FrontendIntegration\Content\ModelList->generate()
#9 system/modules/core/modules/ModuleArticle.php(196): Contao\Controller::getContentElement(Object(Contao\ContentModel), 'main')
#10 system/modules/core/modules/Module.php(163): Contao\ModuleArticle->compile()
#11 system/modules/core/modules/ModuleArticle.php(59): Contao\Module->generate()
#12 system/modules/core/library/Contao/Controller.php(404): Contao\ModuleArticle->generate(false)
#13 system/modules/core/library/Contao/Controller.php(268): Contao\Controller::getArticle(Object(Contao\ArticleModel), false, false, 'main')
#14 system/modules/core/pages/PageRegular.php(138): Contao\Controller::getFrontendModule('0', 'main')
#15 index.php(260): Contao\PageRegular->generate(Object(Contao\PageModel), true)
#16 index.php(444): Index->run()
#17 {main}
´´´
@cyberlussi cyberlussi changed the title [TNG] meta Warning: metamodel_prerendered: Undefined template variable: settings [TNG] Warning: metamodel_prerendered: Undefined template variable: settings Aug 21, 2014
@cyberlussi
Copy link
Author

Vorschlag:

Anstatt
https://github.com/MetaModels/core/blob/tng/src/system/modules/metamodels/templates/metamodel_prerendered.html5#L1

<?php $strRendersettings = isset($this->settings)? 'settings' : 'view'; ?>

@Hauge
Copy link

Hauge commented Aug 22, 2014

Betrifft auch das unrendered-template bzw. alle metamodel_xxx templates zur FE-Ausgabe

@discordier discordier added this to the 2.0.0 milestone Aug 22, 2014
@cyberlussi
Copy link
Author

Works for me (metamodel_prerendered.html5).

@CrawlingKing
Copy link

Der Fehler tritt bei mir auch auf. Im Backend beim metamodel-prerendered-Template und bei eigenen Templates auf Basis des prerendered-Templates im Frontend. Aktuelle nightly-tng

@cyberlussi
Copy link
Author

auch mit MetaModel/core@0bc5e63? Ab da ging es beim mir wieder (zusätzlich noch alle Attribute per bundle_all mitaktualisiert) ...

@emkayy
Copy link

emkayy commented Aug 25, 2014

Bei mir tritt der Fehler auch noch in 0bc5e63 auf:

Warning: metamodel_prerendered: Undefined template variable: attribute in composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/Render/Template.php on line 112

#0 [internal function]: __error(512, 'metamodel_prere...', '/www/htdocs/w00...', 112, Array)
#1 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/Render/Template.php(112): trigger_error('metamodel_prere...', 512)
#2 system/modules/metamodelsattribute_notelist/MetaModelTemplateNotelist.php(36): MetaModels\Render\Template->__get('attribute')
#3 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/Render/Template.php(328): MetaModelTemplateNotelist->parseTemplateCallback(Object(MetaModels\Render\Template))
#4 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/Render/Template.php(351): MetaModels\Render\Template->callParseTemplateHook()
#5 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/ItemList.php(817): MetaModels\Render\Template->parse('html5')
#6 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(112): MetaModels\ItemList->render('', Object(MetaModels\FrontendIntegration\Content\ModelList))
#7 system/modules/core/elements/ContentElement.php(159): MetaModels\FrontendIntegration\Content\ModelList->compile()
#8 composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/FrontendIntegration/Content/ModelList.php(64): Contao\ContentElement->generate()
#9 system/modules/core/library/Contao/Controller.php(456): MetaModels\FrontendIntegration\Content\ModelList->generate()
#10 system/modules/core/modules/ModuleArticle.php(196): Contao\Controller->getContentElement(Object(Contao\ContentModel), 'main')
#11 system/modules/core/modules/Module.php(148): Contao\ModuleArticle->compile()
#12 system/modules/core/modules/ModuleArticle.php(59): Contao\Module->generate()
#13 system/modules/core/library/Contao/Controller.php(392): Contao\ModuleArticle->generate(false)
#14 system/modules/core/library/Contao/Controller.php(254): Contao\Controller->getArticle(Object(Contao\ArticleModel), false, false, 'main')
#15 system/modules/core/pages/PageRegular.php(138): Contao\Controller->getFrontendModule('0', 'main')
#16 index.php(256): Contao\PageRegular->generate(Object(Contao\PageModel), true)
#17 index.php(440): Index->run()
#18 {main}

@timgatzky Hier wird wahrscheinlich auch eine Änderung an den notelist Template nötig:

Warning: mm_attr_notelist: Undefined template variable: statusMessage in composer/vendor/metamodels/core/src/system/modules/metamodels/MetaModels/Render/Template.php on line 112

@timgatzky
Copy link
Contributor

Weichen MM Templates plötzlich von der gewohnten Template-Behandlung ab? Oder ist $objTemplate->attribute plötzlich obsolete im parseTemplate HOOK

@Zeromax
Copy link
Contributor

Zeromax commented Aug 26, 2014

Nun es wird absofort eine Warnung ausgegeben, wenn eine Variable nicht definiert ist...
c2d0092#diff-a5bc9f532d70b8f6858d156a0eb2f09bR110

Das bedeutet: jede Variable in einem Template muss zwingend definiert werden...
Abweichung von Contao Template Bahandlung wie @timgatzky richtig bemerkt hat ;)

@timgatzky
Copy link
Contributor

Der Fehler kommt durch Aufruf einer MetaModels-eigenen Variablen! Warum das ganze? Ich kann bzw. soll im geschlossenen Templates-Objekt doch Variablen definieren können wie ich bzw. der User will. Sonst muss man jedesmal erst die MM Templates Klasse um eine neue protected bzw. sogar public Variable ergänzen.

@emkayy
Copy link

emkayy commented Aug 26, 2014

Ich verstehe auch nicht wo hier der Vorteil liegen soll. Es passiert doch nichts, außer, dass mehr Fehler auftreten.

Wie gesagt, ich nutze aktuell noch die Standard-MM-Templates, und sogar hier tritt der Fehler auf.
Im Sinne der Benutzerfreundlichkeit eher ein Minus, würde ich meinen.

@timgatzky
Copy link
Contributor

Wenn also ein User in seinem Template $this->hallo = "welt"; definiert, schmeisst MM ein Fehler? Das kann und darf nicht sein.

@tim-bec
Copy link
Contributor

tim-bec commented Aug 26, 2014

Ich setz das mal auf den call für morgen, das darf wirklich nicht sein.

@tim-bec tim-bec reopened this Aug 26, 2014
@discordier
Copy link
Member

Tut es auch nicht. Genau ANDERSHERUM wird ein Schuh draus.

Wenn du UNDEFINIERTE Dinge abrufst wird eine Warnung geschmissen.

$template->foo = 'bar'; // Keine Warnung, da Zuweisung.
$bar = $template->foo; // Keine Warnung, da foo definiert.
$foo = $template->bar; // Warnung, da bar nicht definiert.
$foo = isset($template->bar) ? $template->bar : 'fallback'; // Keine Warnung, da bar nicht definiert aber isset() verwendet wie in PHP yblich.

Durch diese Warnung sollen undefinierte Abfragen und unbenoetigte Abfragen gefunden werden ebenso Fehler, insbesondere Logikfehler, in Templates (wovon wir bereits einige hatten im DCG und MM).

@timgatzky
Copy link
Contributor

Heisst trotzdem man muss seine Erweiterungen bei jedem MM update durchschauen ob z.b. im parseTemplate Hook, wo das Template Objekt ankommt, noch die Variablen stimmen. Da ist es selbst mit abfangen nicht getan, sondern immer wieder real handanlegen.
siehe: system/modules/metamodelsattribute_notelist/MetaModelTemplateNotelist.php(36)
Warum kommt da ggf. nicht ein NULL zurück, ohne Fehlermeldungen, die den User nur irritieren und direkt abgefangen werden können.

if(!$template->foo) {return;}

Schmeisst bereits den Fehler.
Finde ich keine gute Lösung. Oder übersehe ich hier was?

@discordier
Copy link
Member

Ja, weil dein if(!$template->foo) {return;} allgemein schon Fehler schmeisst, Contao filtert sie nur weg.
Richtig ist: if(!isset($template->foo)) {return;}

Der Hintergrund:
Fehler zu schmeissen (auch die, die "versteckt" werden) ist teuer in der Laufzeit.
Da aber jedesmal ein E_NOTICE geschmissen wird wenn man einen undefinierten Key abfragt und die Werte in einem Template in der Regel fix sind, besonders die die man abfragt.
Daher wird nun vom MM Template diese Warnung geschmissen sofern man einen "fehlerhaften" bzw. unbekannten Wert abfragt.
Wir sind da ein wenig strikter hinsichtlich coding behaviour als Contao im Core und versuchen notices gaenzlich zu eliminieren.

Als Background:
Notices und strict errors in PHP sind Indikatoren von Problemen oder potentiellen Problemen welche evtl. aktuell bereits Fehlverhalten darstellen oder aber in zukynftigen PHP Versionen Fehler verursachen koennen. Aus diesem Grunde sollte man sie definitiv vermeiden!

@timgatzky
Copy link
Contributor

Die Abfrage nach einem NULL Wert z.b. ob ein Objekt existiert über eine real gesetzte Variable ist damit nicht möglich. Das Kombinieren von Methoden in der Abfrage auch nicht, aber das ist ok..
Warum keine Getter und Setter Methoden? $template->get('meineVariable') die ggf. ein null zurückgeben ohne durch die Fehlerreportings zu laufen.
Striktheit finde ich sonst sehr gut.

@discordier
Copy link
Member

Die Abfrage nach einem NULL Wert z.b. ob ein Objekt existiert über eine real gesetzte Variable ist damit nicht möglich. Das Kombinieren von Methoden in der Abfrage auch nicht, aber das ist ok..

Du kennst if (empty($template->foo)) { $template->foo = 'bar'; }?

Warum keine Getter und Setter Methoden? $template->get('meineVariable') die ggf. ein null zurückgeben ohne durch die Fehlerreportings zu laufen.

Weil dann alle schreien dass MM inkompatibel zu den Contao Templates ist. ;)
Allgemein kann man diese Methoden jedoch als Zusatzfeature hinzubauen, wobei damit dann die Grundproblematik, naemlich unbekannte Werte abzufragen, nicht behoben ist.
Es geht ja hierbei darum, solche Probleme wie "alte" oder "falsch geschriebene" Template Werte zu erkennen.

Striktheit finde ich sonst sehr gut.

Ich auch. :)

@timgatzky
Copy link
Contributor

Hast recht empty passt.
Lassen wir den Rest mal so. Jetzt weiß man ja bescheid.
Beste Grüße, T

@tim-bec
Copy link
Contributor

tim-bec commented Aug 27, 2014

Also können wir das hier closen?

@Zeromax
Copy link
Contributor

Zeromax commented Aug 27, 2014

Es ist ungewohnt aber von mir aus ja ;). Man gewöhnt sich an alles. Auch an Spaces :D

@tim-bec
Copy link
Contributor

tim-bec commented Aug 27, 2014

;-)

@tim-bec tim-bec closed this as completed Aug 27, 2014
@emkayy
Copy link

emkayy commented Aug 28, 2014

Sorry, bei mir kommt der gleiche Fehler nach wie vor:
Warning: metamodel_prerendered: Undefined template variable: attribute in composer/vendor ...

Da es sich hierbei ja scheinbar nur um eine Funktion zur Vermeidung von Fehlern in der Entwicklung handelt, sollte man sie vielleicht besser, z.B. über die localconfig, konfigurierbar machen, und als Entwickler aktiveren können, um Anwender nicht zu verunsichern oder zu verschrecken.

@kikmedia
Copy link
Contributor

Issue still present for Tags also (Undefined template variable: tags in ...) if included as a content element. Sorry, folks ...

@timgatzky
Copy link
Contributor

Alle Attribute, alles was in irgendeiner Form Templates verarbeitet, muss überarbeitet werden und auf absolute Korrektheit der Variablen überprüft werden. Solange bleibt dieser Fehler für den Endnutzer erhalten.

@emkayy
Copy link

emkayy commented Aug 29, 2014

Aber wenigstens die von MetaModels mitgelieferten Standard-Templates sollten gehen, finde ich :-)

@discordier
Copy link
Member

Ja, aber da sind wir halt noch nicht durch alle durch.

Die Idee dies zuschaltbar zu machen koennte man jedoch aufgreifen.
Also nur dann, wenn Contao im debugMode ist die Warnungen ausgeben.

@discordier discordier reopened this Aug 29, 2014
@MacKP
Copy link
Contributor

MacKP commented Aug 29, 2014

Ist eine sehr schöne Idee @discordier
+1

@timgatzky
Copy link
Contributor

Ja, bitte nen Schalter rein. Ne Globale reicht.
+1

@MiniModel
Copy link
Member

This issue has been labeled with "testing" but got no feedback.

We are reliant on feedback to prove a ticket fixed as we can not tell if the ticket has been resolved if we receive no feedback.
I will close this ticket now, as I assume it has been resolved.
If the ticket should still be valid, please feel free to reopen it.

@cyberlussi could you please have a final look at this and tell if your issue has been resolved?

@tim-bec tim-bec removed the testing label Sep 1, 2014
@tim-bec tim-bec reopened this Sep 1, 2014
@Hauge
Copy link

Hauge commented Sep 24, 2014

gibt es den schalter schon?

@discordier
Copy link
Member

See 3f89bbb

@tim-bec tim-bec closed this as completed Mar 19, 2015
@zonky2
Copy link
Contributor

zonky2 commented Mar 30, 2016

@discordier für was steht die Variable $strRendersettings? wenn ich nach dieser Suche https://github.com/MetaModels/core/search?utf8=%E2%9C%93&q=strRendersettings taucht diese nur im "Head" der Templates auf und wird m.E. an keiner Stelle weiter verwendet... - oder?

@discordier
Copy link
Member

Die wird in der Tat nur in:

  • contao/templates/metamodel_prerendered.text
  • contao/templates/metamodel_unrendered.text

Je auf Zeile 3 verwendet.

@zonky2
Copy link
Contributor

zonky2 commented Apr 5, 2016

auch bei *.html5 kommt es vor - nur die Suche spuckts nicht aus...

<?php if(!$this->$strRendersettings->get('hideLabels')): ?>

ist für "hideLabel"

@discordier discordier removed the Up for discussion This ticket will be up for discussion in one of our next calls label Apr 25, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug A bug! A bug! Fast, squish it!
Projects
None yet
Development

No branches or pull requests