spec/lib/data/field_set.cfm
2025-06-02 16:16:51 +03:00

68 lines
3.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<cfsilent>
<!--- 20181209 v0.3 добавлено поле cfSqlType--->
<!--- 20201029 v0.5 все атрибуты необязательные--->
<!--- 20201114 v0.6 добавлен атрибут "container" for json--->
<!--- 20201201 v0.7 исправлен listOut--->
<!--- 20210326 v0.8 formatter --->
<!--- 20210326 v0.9 listOutKeepContent --->
<!--- Используется в селекте для структурирования списка полей. Выводит вместо себя список через запятую, экспортирует Map со структурами выражение+заголовок, с ключом, соответствующим имени колонки в селекте (ключ вычисляется регулярным выражением) --->
<cfif thisTag.executionMode is "end">
<cfparam name="ATTRIBUTES.titleMapOut" default=""/>
<cfparam name="ATTRIBUTES.lengthOut" default=""/>
<cfparam name="ATTRIBUTES.listOut" default=""/><!---возвращаемый список полей через запятую для селекта. Если не задан (чаще всего так), этот список возвращается в виде контента тега --->
<cfparam name="ATTRIBUTES.listOutKeepContent" default=false/><!--- указывает listOut не очищать контент --->
<cfparam name="ATTRIBUTES.fieldsToInclude" default=""/><!--- список нужных полей, если не пустой - выбрасывать все поля, кроме тех, что в списке --->
<cfparam name="thisTag.fieldsArray" type="array"/><!--- Вложенные теги field отдают сюда свои данные --->
<cfset titleMap=structNew("linked")/><!---railo syntax--->
<cfset list=""/>
<cfset i=0/>
<cfloop array=#thisTag.fieldsArray# index="field">
<cfif len(#field.name#) EQ 0
OR listLen(ATTRIBUTES.fieldsToInclude) EQ 0
OR listFind(ATTRIBUTES.fieldsToInclude,field.name)>
<!--- пытаемся сохранить прежнюю логику - поля без имени не выбрасываются, но не попадают в titleMap --->
<cfset i=i+1/>
<cfset list=listAppend(#list#, #field.expression#)/>
<cfif len(#field.name#)>
<cfset structInsert(#titleMap#, #field.name#, structNew())/>
<cfset "titleMap.#field.name#.ordinal"=#i#/>
<cfset "titleMap.#field.name#.title"=#field.title#/>
<cfset "titleMap.#field.name#.type"=#field.type#/>
<cfset "titleMap.#field.name#.cfSqlType"=#field.cfSqlType#/>
<cfset "titleMap.#field.name#.container"=#field.container#/>
<cfset "titleMap.#field.name#.formatter"=#field.formatter#/>
</cfif>
</cfif>
</cfloop>
<cfif len(ATTRIBUTES.lengthOut)>
<cfset "CALLER.#ATTRIBUTES.lengthOut#"= i/>
</cfif>
<cfif len(ATTRIBUTES.titleMapOut)>
<cfset "CALLER.#ATTRIBUTES.titleMapOut#"=#titleMap#/>
</cfif>
<!--- <cfif len(ATTRIBUTES.listOut)>
<cfset "CALLER.#ATTRIBUTES.listOut#"=preserveSingleQuotes(list)/>
<cfset thisTag.generatedContent=""/>
</cfif> --->
<cfif len(ATTRIBUTES.listOut)><!--- *** некрасиво --->
<cfset "CALLER.#ATTRIBUTES.listOut#"=list/>
<cfif ATTRIBUTES.listOutKeepContent>
<cfset thisTag.generatedContent=preserveSingleQuotes(list)/>
<cfelse>
<cfset thisTag.generatedContent=""/>
</cfif>
<cfelse>
<cfset thisTag.generatedContent=preserveSingleQuotes(list)/>
</cfif>
</cfif>
</cfsilent>