2013-02-14 14 views
5

पर आधारित नहीं है क्या फ़ाइल नाम मानों की सरणी के आधार पर आंशिक लोड करने का कोई तरीका है?PHP मूंछ 2.1 आंशिक लोडिंग फ़ाइल नाम

वर्तमान में यदि मैं यह {{> sidebar}} लिखता हूं तो यह views/sidebar.mustache देखेंगे। (टेम्पलेट लोडर क्लास के आधार पर जहां मैं निर्दिष्ट कर सकता हूं कि टेम्पलेट्स को कहां देखना है)

आदर्श रूप से मैं चाहता हूं कि {{> sidebar}} एक परिवर्तनीय नाम होगा और फ़ाइल नाम नहीं होगा। views/folder1/somefile.mustache:

$partials = array(
    'sidebar' => 'folder1/somefile' 
); 

जो करने के लिए अनुवाद होगा:

क्या मैं हासिल करना चाहते हैं फ़ाइल नाम के आधार नहीं साइडबार आंशिक देखने के लिए, अगर मैं लोडर के पास है।

उत्तर

7

आप आसानी से एक नया आंशिक लोडर कार्यान्वयन जोड़कर ऐसा कर सकते हैं। आपको एक "उर्फ लोडर" है, जो उन लोगों के टेम्पलेट संदर्भ संग्रहीत करता है बना सकता है: तो फिर

class FilesystemAliasLoader extends Mustache_Loader_FilesystemLoader implements Mustache_Loader_MutableLoader 
{ 
    private $aliases = array(); 

    public function __construct($baseDir, array $aliases = array()) 
    { 
     parent::__construct($baseDir); 
     $this->setTemplates($aliases); 
    } 

    public function load($name) 
    { 
     if (!isset($this->aliases[$name])) { 
      throw new Mustache_Exception_UnknownTemplateException($name); 
     } 

     return parent::load($this->aliases[$name]); 
    } 

    public function setTemplates(array $templates) 
    { 
     $this->aliases = $templates; 
    } 

    public function setTemplate($name, $template) 
    { 
     $this->aliases[$name] = $template; 
    } 
} 

, आपको लगता है कि स्थापित करेगा partials लोडर के रूप में:

$partials = array(
    'sidebar' => 'folder1/somefile' 
); 

$mustache = new Mustache_Engine(array(
    'loader'   => new Mustache_Loader_FilesystemLoader('path/to/templates'), 
    'partials_loader' => new FilesystemAliasLoader('path/to/partials'), 
    'partials'  => $partials, 
)); 

... या आप के लिए उपनाम गुजारें सकता लोडर निर्माता हैं, या आप भी उन्हें बाद लोडर या इंजन उदाहरण पर सेट कर सकते हैं:

$loader = new FilesystemAliasLoader('path/to/partials', $partials); 
$loader->setTemplates($partials); 
$mustache->setPartials($partials); 
+0

मैंने कुछ दिनों के पिछले कुछ के लिए AFK था। आपके उत्तर के लिए धन्यवाद, यह वही है जो मैं ढूंढ रहा हूं! – feketegy

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