Using let/set within namespaces

Author Message

Paul Forsyth

Wednesday 23 April 2003 5:17:51 am

Im trying to use some logic that sets a variable from within a section call.

{let found_something=0}

{section name=Something loop=$my_array}
{set found_something=1}
{/section}

{$found_something}

When run {$found_something} outputs '0', and I receive the error:

Warning: eZTemplate:set Apr 23 2003 13:12:37

Variable 'Something:found_something' doesn't exist, cannot set

This sounds logical since the variable is within another namespace.

If i try to specify the namespace then i receive an invalid characters error. I guess let/set dont like $ chars in there...

Can i alter a variable from one namespace from within another namespace?

This example is simplistic. My real use is more complex and requires a global variable to be changed from within multiple section calls. Is it possible to be shown an example of this working?

thanks

Paul

Sergiy Pushchin

Wednesday 23 April 2003 5:23:13 am

Better way to do it:
{let name=Something found_something=0}
{section loop=$my_array}
{set found_something=1}
{/section}
{$found_something}
{let}

In that case all variables in the same namespace.

Paul Forsyth

Wednesday 23 April 2003 5:37:55 am

Thanks Sergiy,

I had read the doco on using {let name=...} but earlier that caused problems with my three nested sections(!). But, i manged to get it working using a single namespace, though it does ruin the namespace structure somewhat...

Paul

Paul Borgermans

Wednesday 23 April 2003 6:17:42 am

Had a similar problem when enhancing the forum templates.

A variable available (created) in an outer section appears to be invisible for an inner section (loop). Not sure if the bug is in my head and template code or in ez publish. I am studying the docs and code again to find out more about variable scoping and nested sections.

The weird thing is that a simple variable seems to work, a complex one (object) not.

Paul

eZ Publish, eZ Find, Solr expert consulting and training
http://twitter.com/paulborgermans

Jan Borsodi

Thursday 24 April 2003 6:25:50 am

As the template engine is today all reads are done using the root namespace of the file while writes are using the current namespace. To overcome the problems you have to move the namspace as Sergey noted.

Future versions of the template engine will probably support namespace declarations in function input variables as well as relative namespace references.

Some examples:
{set #:found_something=1}
sets the found_something variable in the root namespace
{set ..:found_something=1}
sets the found_something variable one namespace up
{$..:found_something}
Accesses the found_something variable one level up from the current namespace

Also another way to use section would help out, something like:
{section variable=i loop=$items}
{$:i.key} - {$:i.item.name}
{section variable=j loop=$:i.item.children}
{$:j.item}
{/section}
{/section}
Here the template loop variables are set as an hash array in the current namespace.

Last a new way to do if/else-if/else style checks.
{section show=eq($a,$b)}
{section-else show=eq($a,$c)}
{section-else show=eq($a,$d)}
{section-else}
{/section}

Nothing has been decided yet so please come with suggestion for things you would like to see in the template engine (not just namespaces).

--
Amos

Documentation: http://ez.no/ez_publish/documentation
FAQ: http://ez.no/ez_publish/documentation/faq

Paul Borgermans

Friday 25 April 2003 5:48:40 am

>Nothing has been decided yet so please come with suggestion
>for things you would like to see in the template engine (not
>just namespaces).

A range operator for creating/slicing arrays (like in php) would be nice.

More will come as we learn/work with the templates (still a steep learning curve)

Paul

eZ Publish, eZ Find, Solr expert consulting and training
http://twitter.com/paulborgermans

Chris Winchester

Wednesday 28 May 2003 10:33:47 am

An "explode" function would be useful - I want to split the path_string attribute on the '/' character into an array so I can easily access the node_id's of the ancestors of a particular node without having to loop up the tree. (I'm currently doing this and building a linked list of arrays within arrays, which is pretty resource intensive - and consequently a bit frustrating given that the information's already there in path_string!!)

Of course I may be missing something as I'm still very new to this! (are there any string handling functions apart from concat?) If I've missed the point, please do put me straight.

I'll post up the code I'm currently using once I'm sure it's all working. I had some trouble with namespaces, but this is now resolved thanks to Sergiy and Jan :)

Cheers
- Chris

Paul Forsyth

Thursday 29 May 2003 2:27:38 am

btw, do multiple section-else statements work?

I have:

{section show=$search_count|gt(1)}
{$search_count} things found.
{section-else show=eq($search_count, 1)}
1 thing found.
{section-else}
No things found.
{/section}

but when $search_count is 0 both lines within the section-else statements are used, giving me:

1 thing found. No things found.

Currently using stable branch rev 2450.

Chris Winchester

Thursday 29 May 2003 7:49:17 am

I had the same problem Paul. Try nesting them instead:

{section show=$search_count|gt(1)}
{$search_count} things found.
{section-else}
{section show=eq($search_count, 1)}
1 thing found.
{section-else}
No things found.
{/section}
{/section}

Paul Forsyth

Thursday 29 May 2003 9:31:41 am

thanks chris,

yes, that works. ive used nested sections before though it can lead to some horrible code!

ive just noticed that the multiple section-else shows are possible future additions to the template engine... oops :)

btw, the explode function could be made by adding an operator that exposes the appropriate php function to the template engine. its not difficult to do. also, iirc, 3.1 allows you to do this from the admin interface?

paul

Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.

eZ debug

Timing: Jan 18 2025 10:33:23
Script start
Timing: Jan 18 2025 10:33:23
Module start 'layout'
Timing: Jan 18 2025 10:33:23
Module start 'content'
Timing: Jan 18 2025 10:33:23
Module end 'content'
Timing: Jan 18 2025 10:33:23
Script end

Main resources:

Total runtime0.0153 sec
Peak memory usage4,096.0000 KB
Database Queries3

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0062 589.0313152.6250
Module start 'layout' 0.00620.0026 741.656339.4453
Module start 'content' 0.00880.0042 781.1016101.3203
Module end 'content' 0.01310.0020 882.421946.3047
Script end 0.0151  928.7266 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.002516.5601140.0002
Check MTime0.00117.5226140.0001
Mysql Total
Database connection0.00095.920210.0009
Mysqli_queries0.002717.554430.0009
Looping result0.00000.086010.0000
Template Total0.001711.010.0017
Template load0.00106.589310.0010
Template processing0.00074.346010.0007
Override
Cache load0.00074.530510.0007
General
dbfile0.00031.704080.0000
String conversion0.00000.051640.0000
Note: percentages do not add up to 100% because some accumulators overlap

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1print_pagelayout.tpl<No override>extension/community/design/community/templates/print_pagelayout.tplEdit templateOverride template
 Number of times templates used: 1
 Number of unique templates used: 1

Time used to render debug report: 0.0001 secs