Renard Masque
Renard Masque

Reputation: 73

Lex Parser & CodeIgniter, conditionnal weird behavior

I'm using lexpyrocms parser as a package installed with composer along with a codeigniter framework with HMVC, which allows me to use {{pseudo-variable}} in my templates/views.

I have a very weird behavior with the parser syntax in my view:

I have this simple $modules array as data that I can print_r() in the view/template

$modules = 
Array ( 
       [users] => stdClass Object ( [id_mdl] => 8 [name_mdl] => users ),
       [actions] => stdClass Object ( [id_mdl] => 9 [name_mdl] => actions ) 
);

If I use basic Lex syntax, I can display the name_mdl without problem with

{{modules}} {{name_mdl}} {{/modules}} => output 'users' and 'actions'

but when I use the conditional 'if' inside the loop, I get a wrong matching when I test if a variable exists :

{{modules}}

    {{name_mdl}} 

{{/modules}}

this outputs correctly users actions

{{modules}}

    {{if exists name_mdl}} 
    name_mdl OK {{name_mdl}} 
    {{endif}}

{{/modules}}

but this does not output anything:

{{modules}}

    {{if not exists name_mdl}} 
    name_mdl  NOT OK {{name_mdl}} 
    {{endif}}

{{/modules}}

This outputs 'name_mdl NOT OK users name_mdl NOT OK actions' the parser displays correctly a variable it just recused as existing in the condition..

I've searched a bit everywhere but it looks like an orphan problem, can't find a clue anywhere.

Upvotes: 0

Views: 71

Answers (1)

Renard Masque
Renard Masque

Reputation: 73

Well.. I managed to get rid of this strange behavior, but I'm not sure which part of the changement I've made solved the problem ...So for what it's worth :

The error I faced was that in a loop {{list_of_things}}{{/list_of_things}} the checking of an existing variable with conditional if exists wasn't possible, though the display of this variable worked fine :

{{list_of_things}}

    {{ list_name }} <-- display the list_name of each entry  

    {{ if exists list_name }} 
        The condition was never met, tough the data 'list_name' can be displayed above
    {{ endif }} 

{{/list_of_things}}

I did two things after that, and got rid-off the problem...


1- I moved the declaration of the Lex Parser $this->parser = new Lex\Parser();

from my front controller application/modules/my_module/module_controller.php

into the constructor of my extending core controller class application/core/MY_Controller.php

2- I cleaned up my views folder cause there where some double file from earlier development :

to be noted : the view called was and is application/modules/my_module/views/theme/my_template.php

  • before :

    modules/my_module/views/ my_template.php

    modules/my_module/views/theme/ my_template.php

  • after :

    modules/my_module/views/

    modules/my_module/views/theme/ my_template.php


So my best guess is that HMVC messed a bit the Lex Parser with the 'loaded_paths', and that two views with the same name in the same module (even though not in the same directory) can lead to unexpected behavior .. but I don't see why the hell that would change the conditionals of the parser ...

Upvotes: 0

Related Questions