IntroduçãoQuando promovemos reutilização de código, passamos a fazer uso constante do cfinclude. Com essa prática frequente, por vezes são criadas templates que necessitam de variáveis, pre-definidas a sua invocação, o que provoca erros na implementação. texto.cfm <cfif IsDefined(“url.texto”)>
<h1><cfoutput>#url.texto#</cfoutput> </h1> </cfif> executa.cfm <cfparam name=”url.helloworld” default=”Hello World!” />
<cfinclude template=”exibir_variavel.cfm” /> Há casos em que essas variáveis são necessárias apenas ao template do include, sendo necessária uma ginástica impressionante para excluir esta variável após a execução da template. executa.cfm <cfif NOT IsDefined(“url.helloworld”)>
<cfset url.helloworld=”Hello World!” > <cfset codHorror=”helloworld”> </cfif> Porém podemos criar chamadas mais funcionais, que promoverão um código mais limpo, sem que seja necessário o famoso código “macarrônicos”. Custom TagsCom o surgimento dos Componentes (cfc) as Custom Tags passaram a ser utilizadas com menos frequência do que em versões anteriores do ColdFusion Server, porém aplicações como o fórum criado por Raymond Camden comprovam sua importância, praticando um desenvolvimento integrado de CFCs e Custom Tags. executa.cfm <CF_TEXTO texto=”Hello World!” >
E a variável texto será identificada no escopo Attributes. Mais a frente veremos outras formas de execução. texto.cfm <cfif IsDefined(“Attributes.texto”)>
<h1><cfoutput>#Attributes.texto#</cfoutput> </h1> </cfif> No artigo CFX (Custom Tag) java vimos a obrigatoriedade do registro da classe transformando-a em uma tag, com Custom Tags CFML o mesmo processo não é necessário, porém o Servidor CF deve ser informado onde estão as paginas cfm que serão a base das tags, para isto basta entrar com o caminho completo da pasta no PropriedadesEscopos
ThisTag
Quando em ThisTag.ExecutionMode é dito que pode conter três valores entenda que a Custom Tag poderá ser executada duas vezes em uma chamada, dependendo do modo da invocação.
CFASSOCIATE Os métodos relacionados a Custom Tags dependem da tag cfassociate. A tag cfassociate possui dois atributos: baseTag – contém o nome da custom tag antecedente e primeira.cfm <cfif ThisTag.ExecutionMode eq “start”>
<b> <cfset ThisTag.StartPrimeira=”Start 1″> <cfelseif ThisTag.ExecutionMode eq “end”> </b> </cfif> segunda.cfm <cfassociate basetag=”CF_PRIMEIRA” datacollection=”myAssocAttribs”>
<cfif ThisTag.ExecutionMode eq “start”> <i> <cfset ThisTag.StartSegunda=”Start 2″> <cfelseif ThisTag.ExecutionMode eq “end”> </i> <cfdump var=”#GetBaseTagList()#”/> <cfdump var=”#GetBaseTagData(‘CF_PRIMEIRA’)#”/> </cfif> chamada.cfm <CF_PRIMEIRA>
<CF_SEGUNDA> texto </CF_SEGUNDA> </CF_PRIMEIRA> Resultado Métodos
Invocando Custom TagsJá foi visto uma das formas de invocar uma custom tags (CF_ + Nome do arquivo), e também sabemos que elas podem trabalhar com as tags CFMODULE e CFIMPORT, são estas formas desenvolveremos agora. CFMODULE Com esta tag não é necessário armazenar as custom tags em um repositório registrado no Administrador. <cfmodule
attribute_name=”Tag_name” attributecollection=”coleção_de_atributos”
Com estas informações reinvocamos o aninhamento, o resultado produzido será idêntico ao anterior. chamada2.cfm <cfmodule template=”/exemplos/primeira.cfm” >
<cfmodule template=”/exemplos/segunda.cfm”> texto </cfmodule> </cfmodule> CFIMPORT Como o cfmodule, esta tag não necessita de repositório registrado. Esta forma de utilização de custom tags é semelhante em JSP. <cfimport
prefix=”prefixo_da_tag” taglib=”path”>
Aqui também percebemos o mesmo resultado das execuções anteriores. chamada3.cfm <cfimport prefix=”view” taglib=”/exemplos/”>
<view:primeira> <view:segunda> texto </view:segunda> </view:primeira> Observamos ainda que podemos utilizar custom tags como VIEW em uma framework CFMVC, o que podemos constatar em outro aplicativo de Raymond Camden (fix). Conhecendo maisDurante a implementaçao de custom tags são identificadas necessidades, como em toda implementação, então veremos aqui a utilização de CFEXIT e CFTROW dentre muitas das soluções existentes. Para demostrar isso criaremos a terceira custom tag e executaremos algumas vezes provocando situações diferentes. terceira.cfm <cfif ThisTag.ExecutionMode eq “start”>
<cfif NOT IsDefined(“Attributes.tag”)> <cfthrow type=”any” message=”key tag inexistente em attributes <br> Você fez isso de propósito?”> </cfif> <cfoutput><#Attributes.tag#></cfoutput> <cfset Caller.varCustomTag = StructNew() > <cfelseif ThisTag.ExecutionMode eq “end”> <cfset Caller.varCustomTag.erro =”Cadê o conteúdo?” > Nesta primeira chamada provocaremos a geração do erro falta de atributo. chamada4.cfm <cfimport prefix=”view” taglib=”/exemplos/”>
<view:terceira> Resultado Resultado
Resultado foi utilizada a tag html <i><cfoutput>#Variables.varCustomTag.atributos.tag#</cfoutput></i> Resultado |

Cláudio Dias.
<cfimport prefix=”view” taglib=”/exemplos/”>
<cfimport prefix=”view” taglib=”/exemplos/”>
<cfimport prefix=”view” taglib=”/exemplos/”>
Pedro Claudio


ShareThis