Author
|
Message
|
Michael Hoenig
|
Thursday 25 March 2004 3:08:43 pm
Hi, I'm new in ezPublish and I try to append a content of a variable to an existing array with the following code:
{let ort_array=array()}
...
{section loop=$node.object.related_contentobject_array}
...
{$ort_array|append($:item)}
{/section}
... {/let} Thanks for your help!! Michael
|
Rinze Cats
|
Wednesday 09 June 2004 6:03:42 am
I am having troubles dymanically adding items in an array using a loop as well. Can anybody shine a light on the above problem?
|
Hugo Siles
|
Wednesday 09 June 2004 6:13:12 am
hi, you should try something like this
{let ort_array=array()}
...
{section loop=$node.object.related_contentobject_array}
...
{set ort_array=$ort_array|append($:item)}
{/section}
... {/let}
|
Rinze Cats
|
Wednesday 09 June 2004 6:53:03 am
Hmm, i was using the correct code, but it isn't working because I use a name for my section. Maybe you can help me with this code
{let my_array=array()}
{section loop=$current_node.object.related_contentobject_array}
{set my_array=$my_array|append($:item.data_map.positie.content.0)}
{/section}
{$my_array|count}
{/let}
this works, and count outputs 20. Adding the name (omitting it isn't an option right now)
{let my_array=array()}
{section name=Container loop=$current_node.object.related_contentobject_array}
{set my_array=$my_array|append($:item.data_map.positie.content.0)}
{/section}
{$my_array|count}
{/let}
This code, certainly is incorrect, but I can't get it to work (tried a godzillion syntatical variations ;-( )
greetz rinze
|
Hugo Siles
|
Wednesday 09 June 2004 7:11:30 am
hi, again
{let my_array=array()}
{section name=Container loop=$current_node.object.related_contentobject_array}
{set my_array=$my_array|append(<b>$Container</b>:item.data_map.positie.content.0)}
{/section}
{$my_array|count} {/let}
also it would be a good idea to look at this pages
http://ez.no/ez_publish/documentation/development/libraries/ez_template/functions/section
or http://ez.no/ez_publish/documentation/toc regards hugo
|
Rinze Cats
|
Wednesday 09 June 2004 7:38:13 am
are you certain this code is correct? I have tried this, and tried it again just now (copy-paste), but it doesn't seem to work. Count results in 0. I am using 3.3.5. the following error is produced by the debugger.
Warning: eZTemplate:set Jun 09 2004 16:34:30
Variable 'Container:my_array' doesn't exist, cannot set
I have previously tried to solve this by adding the container prefix on an trial and error basis, resulting in some marvelous errors, but never the count of 20 ;-(
|
Hugo Siles
|
Wednesday 09 June 2004 7:48:14 am
hi, you are right, i forgot one important thing, as long as the my_array is in another namespace you cannot modify it in the Container namespace
in this page this problem is explained.. try it http://ez.no/ez_publish/documentation/development/libraries/ez_template/basics/namespaces_ i guess the best solution it's ommit the name "Container" in the {section} tag Regards Hugo
|
Paul Forsyth
|
Wednesday 09 June 2004 7:57:13 am
You could omit the namespace altogether and use the new var= construct, eg:
{let my_array=array()}
{section var=Container loop=$current_node.object.related_contentobject_array}
{set my_array=$my_array|append($Container.data_map.positie.content.0)}
{/section}
{$my_array|count}
{/let}
Notice the new use of Container. The var parameter does away with namespaces... paul
-- http://www.visionwt.com
|
Rinze Cats
|
Thursday 10 June 2004 1:18:18 am
Hi all, and thanx for the help. I replaced the namespace tag with the var tag and replaced all the references to the namespace from within my section (posted code is just a sniplet). All is well now! I find it strange though, that a global variable cannot be adressed from within another namespace.
greetz rinze
|
Rinze Cats
|
Thursday 10 June 2004 5:01:11 am
Mm, runnig into some weird behaviour again, do any of you have an explanation for this?
The code should first initialize an array, then it should dynamically at items to this array, if the item doesn't already exist. The general idea is to fetch an objects position value, or assign the first available position number randomly, if the position is missing from the current object. The second part of this code snipplet is behaving really weird
{let my_array=array()}
{section var=Container loop=$current_node.object.related_contentobject_array}
{section show=and(ne($Container.data_map.positie.content.0,''), ne($Container.data_map.positie.content.0, '0'))}
{set my_array=$my_array|append($Container.data_map.positie.content.0)}
{/section}
{/section}
{section var=counter loop=20}
{section show=$my_array|contains($counter)}
{* do nothing *}
{section-else}
{set my_array=$my_array|append($counter)}
{/section}
{/section}
{/let}
When I omit the section-else part, the function works. With the {section-else} part, it doesn't. The else part is executed once, an item is added to array. So far so good. However, now the {section show=$my_array|contains($counter)} always evaluates to true, and the new element in the array is updated with the value of $counter (although the else part of the loop is isn't executed??). I am at a loss here.
|
Paul Forsyth
|
Thursday 10 June 2004 5:07:05 am
Are you sure your array is populated correctly? What does {$my_array|attribute(show)} produce? paul
-- http://www.visionwt.com
|
Rinze Cats
|
Thursday 10 June 2004 5:09:26 am
Mm, solved it myself, but am wondering if this is by design or if it is a bug. Instead of using $counter, I assign it to a variable
{let my_count = $counter}
and use my_count in the function. When using $counter, it adds $counter itself to array, and then startupdating it in the array. So {$counter} prints the number, with let you can assign it, but with append you append the variable instead of it's value.
|
Paul Forsyth
|
Thursday 10 June 2004 5:12:41 am
That is weird. Yes, file it as a bug. $counter should be the value of the current element of the loop. If its an integer it should act like one... paul
-- http://www.visionwt.com
|
Rinze Cats
|
Thursday 10 June 2004 5:15:24 am
thanx for all the help paul, will report this is a bug
|