[Zope] Re: metal:fill-slot and tal:condition
Tres Seaver
tseaver at palladion.com
Thu Feb 22 06:53:23 EST 2007
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Dragos Chirila wrote:
> Hi everybody,
>
> I am stuck with the following problem. I would appreciate it very much
> if you could help me with it.
>
> So I have a ZPT where a macro is defined with several slots; one of
> the slots like below:
>
> <tal:block metal:define-slot="slot_issue">
> SLOT DEFAULT CONTENT
> </tal:block>
>
> The common way to put other content in the slot is:
>
> <tal:block metal:fill-slot="slot_issue">
> CUSTOM SLOT CONTENT
> </tal:block>
>
> Now, in a ZPT that uses the above marco I want to replace the default
> slot content with other stuff
> *only* if a condition is fulfilled:
>
> <tal:block tal:condition="<condition-code>" metal:fill-slot="slot_issue">
> CUSTOM SLOT CONTENT
> </tal:block>
>
> If the <condition-code> returns True then the "CUSTOM SLOT CONTENT" is
> put instead of the default slot content - correct.
> If the <condition-code> returns False then nothing will be displayed -
> this is not correct?!.
>
> I also tried somthing like:
>
> <tal:block tal:condition="<condition-code>">
> <tal:block metal:fill-slot="slot_issue">
> CUSTOM SLOT CONTENT
> </tal:block>
> </tal:block>
>
> In this case the content of the slot is "CUSTOM SLOT CONTENT" in both
> cases - the result is True or False.
>
> The only solution that I can think of is not elegant at all because I
> have to duplicate the slot_issue's default content:
>
> <tal:block metal:fill-slot="slot_issue">
> <tal:block tal:condition="<condition-code>">
> CUSTOM SLOT CONTENT
> </tal:block>
> <tal:block tal:condition="python:not <condition-code>">
> SLOT DEFAULT CONTENT
> </tal:block>
> </tal:block>
>
> Is there other wat to accomplish this?
You might modify the macro to allow this, making the default content a
separate macro::
<html metal:define-macro="slotted">
<body>
<h1> Slotted </h1>
<div metal:define-slot="slot_issue">
<metal:default metal:define-macro="default_issue">
DEFAULT SLOT CONTENT
<metal:default>
</div>
</body>
</html>
The template which includes the macro would then be::
<html metal:use-macro="context/other_template/macros/slotted">
<body>
<div metal:fill-slot="slot_issue">
<tal:block condition="<condition-code>">
CUSTOM SLOT CONTENT
</tal:block>
<tal:block condition="not:<condition-code>">
<div metal:use-macro="context/other_template/macros/default_issue"/>
</tal:block>
</div>
</body>
</html>
It may help to remember that macros are actually "inlined" into the
including template, rather than being "called" as a function would be.
Tres.
- --
===================================================================
Tres Seaver +1 540-429-0999 tseaver at palladion.com
Palladion Software "Excellence by Design" http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFF3YQz+gerLs4ltQ4RAjetAKCpQdrYi6Vl0LeWkAvE6sFVt2RwOACg0GgZ
tYguZqyYKbTohGOmh6in5gw=
=Q5Bv
-----END PGP SIGNATURE-----
More information about the Zope
mailing list