2010-11-15 9 views
10

मुझे सप्ताहांत के दौरान शुरू की गई एक परियोजना के लिए मूंछ का लटका मिल रहा है।मूंछ आंशिक और कोड पुन: उपयोग

मैं PHP कार्यान्वयन का उपयोग कर रहा हूं। हालांकि, मेरे पास कुछ पूछताछ हैं क्योंकि मुझे सिस्टम में उपयोग नहीं किया जाता है।

आप टेम्पलेट विरासत को कैसे प्रबंधित करते हैं, या पुन: उपयोग करते हैं? मुझे आंशिक जानकारी है, लेकिन मुझे उनका उपयोग कैसे करना चाहिए? मैं कुछ इस तरह कर रहा हूँ, आला में शामिल हैं:

top.mustache:

<!DOCTYPE html> 
<html lang='es'> 
<head> 
    <meta charset=utf-8" /> 
    <link rel="stylesheet" href="/media/style.css" type="text/css" media="screen" /> 
</head> 
<body> 
    <header><h1><a href="/">Top</a></h1> 
    </header> 
    <section> 

bottom.mustache:

 </section> 
     <footer><a href="http://potajecreativo.com/">potaje</a></footer> 
</body> 
</html> 

और इस टेम्पलेट रेंडर करने के लिए एक दृश्य:

{{>top}} 
<form action="/album/" method="post"> 
    <p><label for="name">Name</label> <input type="text" name="name" value=""/></p> 
    <p><label for="description">Description</label> <textarea name="description" rows="8" cols="40"></textarea></p> 
    <p><input type="submit" value="Save" /></p> 
</form> 
{{>bottom }} 

क्या यह सही दृष्टिकोण है?

उत्तर

4

ynkr के जवाब पुराने संस्करणों के लिए ठीक है, लेकिन मैं सिर्फ संस्करण 2.4.1 करने के लिए उन्नत और आप filesystemloader उपयोग कर रहे हैं वहाँ अपने दृष्टिकोण काम करना चाहिए।

विवरण के लिए https://github.com/bobthecow/mustache.php/wiki/Template-Loading#partials-loading देखें।

6

यहां एक उदाहरण है कि मूंछ के PHP कार्यान्वयन कैसे काम करता है। ध्यान दें कि Mustache.php शामिल आंशिक/टेम्पलेट्स का विस्तार नहीं करेगा, इसलिए आपको नीचे दिखाई देने के साथ उन्हें मूंछ में रखना होगा। यह उदाहरण एक पुराने केकफैप ढांचे पर एक साथ पाई गई थी।

<? 
    # php cannot recognize multiple acceptable file extensions for partials, 
    # so toggle it to mustache's extension 
    $this->ext = '.mustache'; 

    # Mustache says it's logic-less, but that's not exactly true. 
    # Render out the basic header which calls the logo partial and has 
    # a {{# logged_in? }} condition which dictates which user box we 
    # show. Thus, we need to render out the html for both the logged in 
    # and logged out user boxes 
    $basic_header_html = $this->renderElement('basic_header'); 
    $logo  = $this->renderElement('shared/logo'); 
    $logged_in = $this->renderElement('shared/logged_in_user_box'); 
    $logged_out = $this->renderElement('shared/logged_out_user_box'); 

    $m = new Mustache($basic_header_html,      
        array('logged_in?' => !empty($this->Auth->userData), 
          'cache_buster' => time(), 
          'display_name' => 'StackOverflow Customer'), 
        array('shared/logo' => $logo, 
          'shared/logged_in_user_box' => $logged_in, 
          'shared/logged_out_user_box' => $logged_out)); 
?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>Mustache Test</title> 
</head> 

<body> 
    <?= $m->render(); ?> 
</body> 
</html> 

basic_header.mustache

<div id="header" class="basic"> 
    {{> shared/logo }} 

    {{# logged_in? }} 
    {{> shared/logged_in_user_box }} 
    {{/ logged_in? }} 

    {{^ logged_in? }} 
    {{> shared/logged_out_user_box }} 
    {{/ logged_in? }} 
</div> 

साझा/logo.mustache

<a class="logo" href="/foo/bar"><img alt="" src="/images/logo.png?{{ cache_buster }}" /></a> 

साझा/logged_in_user_box.mustache

Hello {{display_name}}, you are logged in. 

साझा/logged_out_user_box.mustache

Hello. You are not logged in. 
+5

मुझे लगता है कि आप यहां अपने उदाहरण में केक फ्रेमवर्क का उपयोग कर रहे हैं, हालांकि प्रश्न में कोई भी प्रश्न या आपका उत्तर उस पर निर्भर नहीं है। आप यह स्पष्ट करना चाहते हैं कि इसे कम भ्रमित करने के आपके उत्तर में। – jsdalton

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