Files
payg-report/layout/attribute.cfm
T
2025-09-18 19:37:04 +03:00

33 lines
2.5 KiB
Plaintext

<cfsilent>
<!---Замещает любую переменную (*** небезопасно) тега layout:page --->
<!---Тег layout:page проглатывает собственный контент, и вместо него после закрытия выводит разметку на основании атрибутов (при открытии тега он формирует переменные - фрагменты разметки - по шаблону) и вложенных тегов layout:attribute (которые по закрытии тега на самом деле перезаписывают переменные в layout:page).
Вложенные теги удобны, чтобы передавать читабельную разметку, а не строку в кавычках.--->
<cfparam name="ATTRIBUTES.name"/><!---имя переменной layout:page, чаще всего title, controls--->
<!--- ATTRIBUTES.value --->
<cfparam name="ATTRIBUTES.append" default=""/><!---before,after--->
<cfif thisTag.executionMode IS "end">
<cfassociate basetag="cf_page"/>
<cfset layoutTemplate=getBaseTagData('cf_page',1)/>
<cfif structKeyExists(ATTRIBUTES, "value")>
<cfset value=ATTRIBUTES.value/>
<cfelse>
<cfset value=thisTag.generatedContent/>
</cfif>
<!---ниже в комментариях предполагается, что мы меняем фрагмент разметки, например, controls, но на самом деле это может быть любая переменная тега layout:page--->
<cfif structKeyExists(layoutTemplate,"#ATTRIBUTES.name#") AND lcase(ATTRIBUTES.append) EQ "before">
<!---дописать в начало фрагмента разметки с именем name, сгенерированного layout:page, например, controls--->
<cfset "layoutTemplate.#ATTRIBUTES.name#" = value & layoutTemplate["#ATTRIBUTES.name#"]/>
<cfelseif structKeyExists(layoutTemplate,"#ATTRIBUTES.name#") AND lcase(ATTRIBUTES.append) EQ "after">
<!---дописать в конец фрагмента разметки с именем name,, сгенерированного layout:page, например, controls--->
<cfset "layoutTemplate.#ATTRIBUTES.name#" = layoutTemplate["#ATTRIBUTES.name#"] & value/>
<cfelse>
<!---заменить фрагмент разметки с именем name, сгенерированный layout:page--->
<cfset "layoutTemplate.#ATTRIBUTES.name#"= value/>
</cfif>
<cfset thisTag.generatedContent=""/>
</cfif>
</cfsilent>