2009-04-02 12 views
7

मैं एक वेबसाइट पर काम कर रहा हूं जिसे कोल्डफ्यूजन में कोड किया गया था। मेरे पास एक सीएसएस/एचटीएमएल टेम्पलेट है जो मैं आवश्यकतानुसार किसी और कोड को डुप्लिकेट किए बिना, प्रत्येक पृष्ठ की सामग्री पर लागू करना चाहता हूं। मुझे एएसपी.नेट के मास्टर पेजों द्वारा खराब तरीके से खराब किया गया है, जो इस साइट को लागू करने का मेरा पसंदीदा तरीका होगा। दुर्भाग्यवश, वह विकल्प मेरे लिए अनुपलब्ध है। इस साइट को कोल्डफ्यूजन एमएक्स 7 पर चलाना है। इसके अलावा, प्रोजेक्ट की अग्रणी डेवलपर फ्यूजबॉक्स पसंद नहीं करता है, ताकि विकल्प बाहर हो।क्या कोल्डफ्यूजन का एएसपी.नेट के मास्टर पेज का जवाब है?

मुख्य नेविगेशन, आलेखीय शीर्षलेख, और पाद लेख प्रत्येक पृष्ठ पर समान होंगे। शीर्षक टैग, मेटा टैग, और स्तर -2 नेविगेशन पृष्ठ से पृष्ठ में भिन्नता होगी। इसके अलावा, केवल पृष्ठ का "मुख्य सामग्री क्षेत्र" अलग होगा।

इन पैरामीटर को देखते हुए, मैं अधिकतम रखरखाव के लिए साइट को कैसे कोड कर सकता हूं?

+0

हा, इस सवाल को पढ़ने से पहले मुझे यह भी पता चला कि इसे किसने पोस्ट किया था। गुम हो गया। नेट? –

उत्तर

12

तरीके ColdFusion के साथ ऐसा करने की एक बड़ी संख्या है।


Application.cfc हर अनुरोध पर मार डाला और दो तरीकों (onRequestStart और onRequestEnd) कि पहले जोड़ें/एक पेज में मुख्य स्क्रिप्ट के लिए सामग्री संलग्न करने के लिए इस्तेमाल किया जा सकता है।

ध्यान देने योग्य भी है, यह आपके अनुप्रयोग.cfc को विस्तार/उत्तराधिकारी बनाना संभव है, जो अनुरोध स्टार्ट/एंड इवेंट्स के अधिक जटिल सेट की अनुमति देता है। More details here और here


Custom Tags आप एक टैग है कि आप प्रत्येक टेम्पलेट के आसपास लपेट कर सकते हैं लेआउट लागू करने के लिए/आदि बनाने के लिए अनुमति देते हैं। यह विशेष रूप से परिभाषित पाठ को परिभाषित करने के लिए विशेषताओं/आदि को भी अनुमति देता है।

उदाहरण के लिए:

<cf_page PageTitle="My Page"> 
    [main page content] 
</cf_page> 

और कस्टम टैग (page.cfm) आप के अंदर:

<cfif ThisTag.ExecutionMode EQ 'start'> 
    <cfparam name="Attributes.PageTitle" default=""/> 
    <cfcontent reset/><cfoutput><!DOCTYPE html> 
    <html> 
    <head> 
     <title>My Website - #Attributes.PageTitle</title> 
     [styles and scripts and stuff] 
    </head> 
    <body> 
     <div id="heading"> 
      <img src="my_website_logo.png" alt="My Website"/> 
     </div> 
     <ul id="mainmenu" class="nav"> 
      [menu] 
     </ul> 
     <h1>#Attribute.PageTitle#</h1> 
    </cfoutput> 
<cfelse> 
    <cfoutput> 
     <div id="footer"> 
      [footer] 
     </div> 
    </body></html></cfoutput> 
</cfif> 

और निश्चित रूप से आप या तो कई कस्टम टैग बना सकते हैं या एक टैग जो काम करता है निर्दिष्ट विशेषताओं के आधार पर कई तरीकों से।


हेनरी पहले ही उल्लेख किया गया है MVC फ़्रेमवर्क, लेकिन आप MVC करने के लिए templating/लेआउट कार्यक्षमता का उपयोग करने के जरूरत नहीं है।

Fusebox MVC कर सकते हैं, लेकिन ऐसा नहीं की आवश्यकता होती है यदि आप ऐसा करते हैं, और अमेरिकन प्लान के ContentVariables Eitherway साथ मॉड्यूलर सामग्री को लागू करने के लिए एक अच्छा उपकरण हैं के लिए करता है - जब तक कि आपके नेतृत्व डेवलपर सही साबित कर सकते fusebox के लिए अपनी नापसंदगी (और एक विकल्प का सुझाव दें जो आपकी परियोजना को बेहतर तरीके से फिट करे!) तो इसके लिए जाने का कोई कारण नहीं है - यह एक परिपक्व और प्रसिद्ध ढांचा है, उपयोग करने में आसान है, डेवलपर्स के बहुत सारे हैं, और इसी तरह।

हालांकि, अगर फ़्यूज़बॉक्स वास्तव में कोई विकल्प नहीं है, तो Charlie Arehart's list of frameworks पर एक नज़र डालें - सामान्य रूप से वह पृष्ठ देखने के लायक टूल की एक बड़ी सूची है।


वैसे भी, कि अब आप के लिए पर्याप्त बातों पर विचार करने के लिए देना चाहिए ...

+1

कस्टम टैग एक अच्छा विचार है। धन्यवाद। –

+0

पीटर, फ्रीकिन 'महान पोस्ट। एक चीज जिसे आप जोड़ सकते हैं एप्लिकेशन.cfc के साथ है, आप उस अच्छे मास्टर/बच्चे/ग्रैंडचिल्ड पेज इफेक्ट के लिए माता-पिता ऑन रिक्वेस्ट स्टार्ट/एंड का वारिस कर सकते हैं, सुपर विधियों को कॉल कर सकते हैं। ओह, और Application.cfm/OnRequestEnd.cfm और उसके बदले में मूल फ़ाइल को शामिल करें। –

+0

ऐसा करने के लिए कस्टम टैग का उपयोग करने के बारे में कभी सोचा नहीं ... :) अच्छा, इसे जल्दी से काम करने के लिए अच्छा है। – Henry

0

जांच CFINCLUDE

+0

मैंने हेडर, पाद लेख, अन्य तत्वों आदि में शामिल करने के लिए cfinclude का उपयोग किया है, लेकिन मैं कुछ और अधिक शक्तिशाली की उम्मीद कर रहा था। –

1

आप टेम्पलेट समर्थन के साथ MVC ढाँचे में से एक (लगभग हर कोई यह नहीं है) की कोशिश कर सकते हैं।

ColdBox, Model-Glue, Mach-II, Fusebox ...

यह Galleon Forum Ports Comparisons पेज पर प्रकाश डाला कैसे प्रत्येक ढांचे टेम्पलेट्स संभालती है ...

3

ColdFusion डेवलपर्स देर 90 के दशक में cf_bodycontent नामक एक कस्टम टैग का उपयोग अलग शीर्ष लेख और पाद फ़ाइलों को शामिल करने से बचने के लिए शुरू कर दिया। वह एएसपी.नेट के मास्टर पेज से छह या सात साल पहले था। ;-)

अब एक मूल टैग है जो एक ही काम करता है: cfsavecontent। यहां टेम्पलेट्स में लोग cfsavecontent का उपयोग करने का सार यहां दिया गया है।

<!--- index.cfm ---> 
    <cfsavecontent variable="content"> 
     <cfinclude template="#url.action#.cfm"> 
    </cfsavecontent> 

    <cfinclude template="template.cfm"> 

    <!--- template.cfm ---> 
    <cfparam name="title" default="Welcome"> 
    <html> 
     <head><cfoutput>#title#</cfoutput></head> 
     <body> 
     ... header, menu, sidebar, whatever ... 
     <cfoutput>#content#</cfoutput> 
     ... right column, footer ... 
     </body> 
    </html> 

    <!--- foo.cfm ---> 
    <cfset title="Welcome to Foo"> 
    Hello World! I'm the page at index.cfm?action=foo 

    <!--- bar.cfm ---> 
    <cfset title="Welcome to Bar"> 
    Hello World! I'm the page at index.cfm?action=bar 

यदि आप टेम्पलेट के भीतर टेम्पलेट डालना चाहते हैं, तो बस एक और cfsavecontent जोड़ें।

<!--- index.cfm ---> 
    <cfsavecontent variable="content"> 
     <cfinclude template="#url.action#.cfm"> 
    </cfsavecontent> 

    <cfsavecontent variable="content"> 
     <cfinclude template="internal_template.cfm"> 
    </cfsavecontent> 

    <cfsavecontent variable="content"> 
     <cfinclude template="master_template.cfm"> 
    </cfsavecontent>   

    <cfoutput>#content#</cfoutput>   

आप अनावश्यकता को काटने के लिए प्रतिक्रिया दे सकते हैं।

<!--- index.cfm ---> 
    <cfsavecontent variable="content"> 
     <cfinclude template="#url.action#.cfm"> 
    </cfsavecontent> 

    <cfparam name="templates" default="internal,master"> 

    <cfloop list="#templates#" index="t"> 
     <cfsavecontent variable="content"> 
      <cfinclude template="#t#_template.cfm"> 
     </cfsavecontent> 
    </cfloop> 

    <cfoutput>#content#</cfoutput> 

आप एक टेम्पलेट करना चाहते हैं "का विस्तार" एक और, आप शायद एक ढेर में सूची मोड़, और प्रत्येक टेम्पलेट ढेर पर अपनी मूल धक्का होने से ऐसा कर सकते हैं।

<!--- internal_template.cfm ---> 
    <cfset templates = listAppend("master", templates)> 

    ... 
    <cfoutput>#content#</cfoutput> 
    ... 


    <!--- index.cfm ---> 
    <cfsavecontent variable="content"> 
     <cfinclude template="#url.action#.cfm"> 
    </cfsavecontent> 

    <cfparam name="templates" default="internal"> 

    <cfloop condition="listlen(templates) gt 0"> 
     <cfset t = listFirst(templates)> 
     <cfset templates = listRest(templates)> 
     <cfsavecontent variable="content"> 
      <cfinclude template="#t#_template.cfm"> 
     </cfsavecontent> 
    </cfloop> 

    <cfoutput>#content#</cfoutput> 

और इस तरह आप StackBox, एक ColdFusion ढांचे StackOverflow पर आविष्कार किया है। :-)

+0

ओहोह, मुझे यह भी पसंद है! शायद मैं इसे इस तरह से करूँगा। +1 –

संबंधित मुद्दे