2011-09-06 2 views
3

유지 관리 가능성을 높이기 위해 뷰에 사용자 정의 태그를 사용하여 성공 했습니까?많은 HTML 마크 업과 함께 CFM 파일이 섞이지 않도록 사용자 정의 태그를 사용합니까?

맞춤 태그를 사용하면 기본 문자 <cfinclude>을 사용하면 어떤 이점이 있습니까?

이전에 작성한 사용자 정의 태그가 HTML 유지 기능을 향상 시켰습니까?

감사합니다.

+0

''에 비해 유지 관리 능력이 크게 향상되는 다른 예제는 무엇입니까? 감사합니다 – Henry

+0

망고 블로그는 CT를 매우보기 좋게 사용합니다. http://www.mangoblog.org – Sergii

답변

11

예 및 예.

맞춤 태그는 재사용 가능한 HTML 요소를 구분하는 데 아주 좋습니다. 장점은 범위에서 안전하다는 것이며, 행동을 바꾸기 위해 인수를 전달할 수 있으며, cfinclude으로는 할 수 없습니다. 부모를 기반으로 동작을 변경하는 중첩 태그를 만들 수도 있습니다. ColdFusion에서 내 HTML 레이아웃의 대부분은이 같은 모양이 분명히 크게 단순화

<cf_layout> 
    <cf_head title="My Page> 
    <!--- Some local head stuff ----> 
    </cf_head> 

    <cf_content> 
     Lots of stuff goes here. 
    </cf_content> 
</cf_layout> 

을,하지만 사용자 정의 태그를 변경, 또는 사용자 정의 태그 폴더를 변경하여 사이트의 전체 레이아웃을 변경할 수 있습니다 (생각 this.customTagPaths 레이아웃 바꾸기

사용자 정의 태그는 충분한 사랑을 얻지 못합니다.

<cfset arOrders = OrderService.getOrders() /> 

<table> 
    <cfloop array="#arOrders#" index="currentOrder"> 
     <cf_orderrow order="#currentOrder#" /> 
    </cfloop> 
</table> 

OrderRow 사용자 정의 태그는 테이블의 주문에 대한 행을 표시하기위한 표시를 모두 처리합니다

는 여기에 내가 무언가의 또 다른 예입니다. 여기에는 추가/수정/삭제 버튼, 발생해야하는 계산, 디스플레이를 변경해야하는 조건이 포함됩니다. 내가 관리 영역에서 원하는 위치에 행을 표시 할 수 있습니다. 고객 세부 사항 페이지에서 특정 기간의 모든 주문을 보여주는 페이지. 아무런 차이가 없습니다. 내 사용자는 주문을 설명하는 행을 볼 수있는 곳이라면 예상대로 표시됩니다.

다음은 여러 응용 프로그램에서 사용하는 작은 사용자 정의 태그의 몇 가지 구체적인 예입니다.

이 페이지에 jQuery를하고 jQueryUI 포함되지만 응용 프로그램에서 다른 템플릿이 이미이 요청에 jQuery를 추가하지 않은 경우에만

cf_jquery. 이를 통해 페이지에 여러 개의 jQuery 파트를 작성할 수 있으며, 어떤 순서로 호출했는지에 관계없이 jQuery가 문서 헤드에 한 번만 추가되었다는 것을 항상 알게됩니다.

<cfif thisTag.ExecutionMode EQ "end" AND (NOT StructKeyExists(Request, "JQueryInited") OR Request.JQueryInited EQ False)> 
    <cfparam name="Attributes.IncludeUI" default="False" /> 
    <cfparam name="Request.jQueryUIInited" default="False" /> 
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> 
    <cfif Attributes.IncludeUI AND Request.jQueryUIInited IS False> 
     <link href="/shared/css/smoothness/jquery-ui-1.8.11.custom.css" rel="stylesheet" /> 
     <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.11/jquery-ui.min.js"></script> 
     <cfset Request.jQueryUIInited = True /> 
    </cfif> 
    <cfset Request.JQueryInited = True /> 
</cfif> 

I도이 cf_contact 태그 같이 내가 여러 위치에서 응용 프로그램 전체에서 사용됩니다 알고있는 작은 정보 태그 구축 :

<cfif thisTag.ExecutionMode EQ "end"> 
    <cfparam name="Attributes.Phone" default="xxx.xxx.xxxx" /> 
    <cfparam name="Attributes.Email" default="[email protected]" /> 
    <cfparam name="Attributes.EmailName" default="Email Support" /> 
    <h2 style="font: bold 12px Verdana, Geneva, Arial, Helvetica, sans-serif; margin-bottom: 0;">Contact Us</h2> 
    <p style="text-align: left; margin-top: 0;"><cfoutput>#Attributes.Phone#</cfoutput><br /> 
    <cfoutput><a href="mailto:#Attributes.Email#">#Attributes.EmailName#</a></cfoutput></p> 
</cfif> 

가 왜 그렇게 작은 일에 대한 태그를 만들를? 왜 안돼? 사용자가 모든 연락처 정보를 응용 프로그램 전체에 걸쳐 스타일을 지정하면 (즉, 사용자가 쉽게 식별 할 수 있도록해야 함) 포함 시키면 쉽게 태그를 만들 수 있습니다. 다른 프로그래밍 방식의 동작이 거기에서 일어나길 원한다면 내 앱이 이미 그것을 사용하도록 설정되어 있습니다.(: mm 고작 HH)

cf_timeblock

이 사용자 정의 태그는 시간 블록을 선택하는 선택 목록의 집합을 보여줍니다. 나는 스케줄링을 다루는 어플리케이션 전체에서 이것을 사용한다. 그래서 나는 한 블록 동안 한 블럭을 표시 할 수있는 태그를 가지고 있으며, 어떤 값을 미리 선택해야하는지 보낼 수있다. (나는 속성에 대한 검증이 없다. 하지만 그냥) 지금은 거기 척 :

<cfif thisTag.ExecutionMode EQ "end"> 
    <cfsilent> 
     <!--- Get Time Blocks ---> 
     <cfset TimeBlocks = Application.DAO.getTimeQueries() /> 
    </cfsilent> 
    <select name="hour" style="width: auto; float: none;"> 
     <cfoutput query="TimeBlocks.Hours"> 
      <option value="#TimeBlocks.Hours.Value#"<cfif TimeBlocks.Hours.Value EQ Attributes.Hour> selected="selected"</cfif>> 
       #TimeBlocks.Hours.Value# 
      </option> 
     </cfoutput> 
    </select>:<select name="min" style="width: auto; float: none;"> 
     <cfoutput query="TimeBlocks.Mins"> 
      <option value="#TimeBlocks.Mins.Value#"<cfif TimeBlocks.Mins.Value EQ Attributes.Min> selected="selected"</cfif>> 
       #TimeBlocks.Mins.Value# 
      </option> 
     </cfoutput> 
    </select> 
    <select name="mer" style="width: auto; float: none;"> 
     <cfoutput query="TimeBlocks.Mer"> 
      <option value="#TimeBlocks.Mer.Value#"<cfif TimeBlocks.Mer.Value EQ FORM.mer> selected="selected"</cfif>> 
       #TimeBlocks.Mer.Value# 
      </option> 
     </cfoutput> 
    </select> 
</cfif> 

내가 이것보다 더 톤을 사용하지만, 그들은 모두 매우 응용 프로그램/특정 객체입니다. 하나의 페이지에서 다른 페이지로 디스플레이 로직을 복사하는 경우, 필자는 그 코드를 사용자 정의 태그에 넣을 수있는 방법에 대해 생각하기 시작합니다.

다음은 유용하다고 생각되는 맞춤형 태그 라이브러리의 몇 가지 예입니다.

<!--- loop.cfm ---> 
<cfif (THISTAG.ExecutionMode EQ "Start")> 
    <cfparam name="attributes.index" type="variablename"> 
    <cfparam name="attributes.iterations" type="integer"> 

    <cfset variables.index = 1> 
    <cfset caller[attributes.index] = variables.index> 
<cfelse> 
    <cfset variables.index = variables.index + 1> 
    <cfif variables.index lte attributes.iterations> 
     <cfset caller[attributes.index] = variables.index> 
     <cfexit method="loop"> 
    <cfelse> 
     <cfexit method="exittag"> 
    </cfif> 
</cfif> 

<!--- testLoop.cfm ---> 
<cf_loop iterations="10" index="i"> 
    <cfoutput>[#i#]</cfoutput>Hello World<br /> 
</cf_loop> 

: 댄의 다른 훌륭한 노력에서 누락

+1

Dan Short의 답변에 동의합니다. 여전히 사용자 정의 태그를 사용합니다. Dan의 답변을 넘어서는 Railo는 일반 사용자 정의 태그와 함께 CFC 사용자 정의 태그를 사용하여 내장 태그/내장 함수를 작성하므로 자신의 태그/기능을 Railo로 구울 수 있습니다. – webRat

+0

또한 일반적으로 cf_, cfimport prefix = 또는 cfmodule을 사용하여 사용자 정의 태그를 호출합니까? – Henry

+2

"cf_", cf 모듈 또는 cfimport를 사용하면 커스텀 태그는 똑같이 작동합니다. 개인적으로 cfimport 메소드를 정말 좋아하게되었습니다. –

2

한 예는 매우 강력하지만 아래-활용 능력 사용자 정의 태그 밀폐 된 내용을 반복 할 필요가있다 커스텀 태그를 사용하기 위해 내가 제안 할 한 가지주의 사항은 그들이 메모리를 누출하기 쉽다는 말을 들었다는 것이다. aniate this), 트래픽이 많은 사이트에서 사용한다면, 그것들을 사용하기 전에 철저히 테스트 해보아야합니다.

+0

물론입니다. 항상 Ben Nadel의 date loop 커스텀 태그를 사용합니다 :). 나 또한 * 중첩 * 사용자 정의 태그를 절대적으로 사랑하고 더 복잡한 동작을위한 빌딩 블록을 만듭니다. 일단 거기에 들어가면 많은 힘이 있습니다. –

+0

죄송합니다. from, to, index, step이있는 일반 cfloop과 어떻게 다른가요? – Henry

+1

http://www.bennadel.com/blog/1689-Advanced-ColdFusion-Custom-Tags-With-Ben-Nadel-Video-Presentation-.htm 및 http://www.bennadel.com/blog/927을 확인하십시오. -Generated-Content-And-Looping-ColdFusion-Custom-Tags.htm. 또한 http://www.google.com/#sclient=psy&hl=ko&safe=active&source=hp&q=custom+tag+site:bennadel.com&pbx=1&oq=custom+tag+site:bennadel.com&aq=f&aqi=&aql=&gs_sm = e & gs_upl = 4679l5128l1l5457l2l2l0l0l045ll2l2l0l0l0l0l0l86l152l2l2l0 & bav = on.2 or.r_gc.r_pw.r_cp. & fp = 17d332deb5615e0d & biw = 1255 & bih = 1068 –

관련 문제