DawPi Posted March 5, 2022 Posted March 5, 2022 Hello, I have strange (for me) problem with one of the widgets on PHP 8. On 7.4 was fine. Error code: #0 /.../plugins/sdstreamcontent/widgets/sdStreamContent.php(56): IPS\_Theme->getTemplate('plugins', 'core', 'global') #1 /.../system/Widget/Widget.php(103): IPS\plugins\sdstreamcontent\widgets\_sdStreamContent->init() #2 /.../system/Widget/Widget.php(396): IPS\_Widget->__construct('34y8hagzy', Array, NULL, 'vertical') #3 /.../system/Dispatcher/Front.php(626): IPS\_Widget::load(Object(IPS\Plugin), 'sdStreamContent', '34y8hagzy', Array, NULL, 'vertical') #4 /.../system/Dispatcher/Dispatcher.php(155): IPS\Dispatcher\_Front->finish() #5 /.../index.php(13): IPS\_Dispatcher->run() #6 {main} What is might be? Init function in the widget file is standard: /** * Initialise this widget * * @return void */ public function init() { $this->template( array( \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' ), $this->key ) ); parent::init(); } Template bit is there: Any tips, advices? Thanks in advance.
Adriano Faria Posted March 5, 2022 Posted March 5, 2022 You don’t need to return parent in that case. See
CodingJungle Posted March 5, 2022 Posted March 5, 2022 56 minutes ago, Adriano Faria said: You don’t need to return parent in that case. See that only applies to applications, not plugins. it checks to see if the $app property is populated, plugins that property is empty. @DawPi what is the error message? you provide the trace log, but excluded the actual error message?
CodingJungle Posted March 5, 2022 Posted March 5, 2022 (edited) my best guess, is $this->key is either empty or its not the name of the template, try setting the name of the template there instead of using $this->key in: $this->template( array( \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' ), $this->key ) ); (as the template class will throw an unexpectevalueexception if it can't find the template group) Edited March 5, 2022 by CodingJungle DawPi 1
Sonya* Posted March 5, 2022 Posted March 5, 2022 Just to mention, if you are on latest beta, no custom block templates are loaded at the moment:
DawPi Posted March 5, 2022 Author Posted March 5, 2022 46 minutes ago, CodingJungle said: my best guess, is $this->key is either empty or its not the name of the template, try setting the name of the template there instead of using $this->key in: $this->template( array( \IPS\Theme::i()->getTemplate( 'plugins', 'core', 'global' ), $this->key ) ); (as the template class will throw an unexpectevalueexception if it can't find the template group) Quote /** * sdStreamContent Widget */ class _sdStreamContent extends \IPS\Widget { /** * @brief Widget Key */ public $key = 'sdStreamContent'; Theme: 43 minutes ago, Sonya* said: Just to mention, if you are on latest beta, no custom block templates are loaded at the moment: I'm on 4.6.10.
CodingJungle Posted March 5, 2022 Posted March 5, 2022 what is the content of the template if you don't mind posting it? cause looking at the code for getTemplate, it throws that exception in one place, and it is a ParseError from eval'ing the template group, so it might be something in the template. DawPi 1
DawPi Posted March 5, 2022 Author Posted March 5, 2022 Sure: <h3 class='ipsType_reset ipsWidget_title'>{$title|raw}</h3> {{if $viewType}} <div class='ipsWidget_inner ipsPad_half'> <ul class='ipsDataList ipsDataList_reducedSpacing' data-controller='core.front.core.ignoredComments'> {{foreach $results as $result}} {template="sdResult" group="plugins" app="core" location="global" params="$result[ 'indexData' ], $result[ 'authorData' ], $result[ 'itemData' ], $type"} {{endforeach}} </ul> </div> {{else}} {{if $orientation == 'vertical'}} <div class='ipsPad_half ipsWidget_inner'> <ul class='ipsDataList ipsDataList_reducedSpacing' data-controller='core.front.core.ignoredComments'> {{foreach $results as $result}} {template="sdResultRow" group="plugins" app="core" location="global" params="$result[ 'indexData' ], $result[ 'authorData' ], $result[ 'itemData' ], $result[ 'containerData' ]"} {{endforeach}} </ul> </div> {{else}} <div class='ipsWidget_inner'> <ul class='ipsDataList' data-controller='core.front.core.ignoredComments'> {{foreach $results as $result}} {template="sdResultRow2" group="plugins" app="core" location="global" params="$result[ 'indexData' ], $result[ 'authorData' ], $result[ 'itemData' ], $result[ 'containerData' ]"} {{endforeach}} </ul> </div> {{endif}} {{endif}}
CodingJungle Posted March 5, 2022 Posted March 5, 2022 template looks fine, i'm assuming the other 3 templates being called are also clean? have you checked the server error log to see if it gives any more information? from what i can tell, one of the plugins templates is causing the eval to throw an error (it might not even be your plugin that is the culprit, cause any plugin with a template is gonna be apart of that template group). DawPi 1
Solution DawPi Posted March 5, 2022 Author Solution Posted March 5, 2022 Hello, I've modified IPS4 files and found. Someone else (other modder) add something like this to the template bit "and\count" and it was it!
Recommended Posts