J Cameron Cooper wrote:
One uses these when there's no obvious or necessary tag in which to put a METAL or TAL declaration. It's quicker to write than a div/span plus a tal:omit-tag.
Note that the name of the tag after the namespace (block) can really be anything. But 'block' seems to be our de facto standard.
--jcc
JCC, I guess I understand the syntax part of the question, but what I don't understand is why in some cases a METAL declaration is needed. Let me give you an example, a code snippet from a stock Plone site. This code is inside a <metal:block define-macro>: <tal:block tal:condition="no_types"> <select id="filter_selection" name="filter_by_portal_type:list" style="float: left" onChange="submitFilterAction()" tabindex="" tal:attributes="tabindex tabindex/next|nothing;"> <option value="#" tal:attributes="selected python:test((len(filterTypes)>1 or len(filterTypes)==0), 'selected', '');" i18n:translate="label_show_all_items"> Show All Items </option> <metal:block tal:repeat="type types"> <option value="#" tal:define="typetitle type/Title; typeid type/getId" i18n:translate="label_show_x_only" tal:attributes="value typeid; selected python:test( len(filterTypes)==1 and (typeid in filterTypes), 'selected', '');" ><span i18n:name="type"><span i18n:translate="" tal:content="string:${typetitle}" tal:omit-tag="" /></span>s only</option> </metal:block> </select> <input type="hidden" name="filter_by_Subject:tokens" value="" /> <!--you can filter by subject keywords by filling in this value--> </tal:block> TIA, Gerry