[Zope] Extreme DTML fun: How to copy a dtml-document while saving
itsproperties
Jim Washington
jwashin@vt.edu
Sat, 01 Apr 2000 08:46:29 -0500
Hi, Fiore,
> Hi,
>
> this is my code for copying a dtml document found in a ZClass product folder/
> subfolder to an instance folder of my choice, this is done inside a folder
> creation routine.
>
> <dtml-in "defaultblocks.objectIds( 'DTML Document' )">
> <dtml-let si=sequence-item>
> <dtml-with newRoot>
> <dtml-call "manage_addDTMLDocument( si, '', defaultblocks[ si ] )">
> <dtml-in "defaultblocks[si].propertyIds()">
> <dtml-if "not _['sequence-item']=='title'">
> <dtml-call "newRoot[si].manage_addProperty(
> _['sequence-item'],
> defaultblocks[si].getProperty(_['sequence-item']),
> defaultblocks[si].getPropertyType(_['sequence-item'])
> )">
> </dtml-if>
> </dtml-in>
> </dtml-with>
> </dtml-let>
> </dtml-in>
>
> But a problem occurs when a property is of type "lines", in that case the
> source value for ex.
>
> Test
> -
> Test1
> Test2
> Test3
>
> get translated in the destination document as aproperty of type
> lines but with value
>
> ['Test', '-', 'Test1','Test2','Test3']
>
> so i can't iterate over it with dtml-in tag.
>
> I guess a solution could be to reparse the string in a tuple object for example
> with an eval (I didn't find that in the zope namespace)
>
> Any idea?
If you are really getting a string back that looks like that, you can
make a sequence of it by the following expression:
"_.string.split(thestring[1,-1],',')"
This takes everything but the first and last elements of the string,
getting rid of [ and ], then splits it into a list by the commas.
But you have to get rid of the single quotes beforehand with
"_.string.replace(thestring, _.chr(39), '')", chr(39) being "'", though
you can't say that.
So the entire expression would be
"_.string.split(_.string.replace(thestring, _.chr(39), '')[1,-1],',')"
hth
-- Jim Washington