2015-01-14 26 views
0

我有一個鬍鬚模板,其中包括一些partials。我想在PHP中將部分加載到字符串中,字符串中包含部分的內容。但我不希望模板被解析。隨着鬍鬚PHP,加載partials,但不解析標籤

例如,如果我有這樣的鬍子模板,myTemplate.mustache

{{> partials/myPartial }} 
{{ my_text }} 

,這是partials/myPartial.mustache

{{ my_header }} 

那麼我想加載myTemplate.mustache並有一個包含PHP變量:

{{ my_header }} 
{{ my_text }} 

我可以看到如何獲取th的內容e模板使用new Mustache_Loader_Filesystem()->load()但不包含部分內容。

回答

1

你看不到一種方法來做到這一點,因爲這是不可能的。鬍鬚本身甚至從來沒有像這樣處理合並在一起的模板,所以沒有理由會暴露API來獲取它們。

由於部分的性質,它不像使用該模板的內容替換部分標籤那麼簡單。例如,partials不會從包含它們的模板繼承分隔符更改和編譯指示,因此必須予以解決。部分也縮進到包含它們的標籤的層次,因此用部分內容替換部分標籤也必須這樣做。

我假設你真的想要它,你可以加載模板和partials,然後使用Mustache Tokenizer在模板源中找到partials標籤,然後用關聯partials的內容替換它們(遞歸)。然後,你必須弄清楚如何在內聯部分的開始和結束處更改分隔符(或完全不允許分隔符更改,如果在處理解析的模板時遇到問題,則可以通過拋出異常來執行分隔符更改)。我想不出一種方法來刪除編譯指令,因此您必須禁止編譯指示,或者確保所有內聯部分與父模板中使用的編譯指示兼容。

至少可以說,這將是相當數量的工作。

+0

唉。非常感謝您的全面回答。 –

+0

沒問題。如果你有一個特定的使用案例,請隨時提出具體的問題。有一個很好的機會有另一種方式來實現你想要做的:) – bobthecow

+0

我試圖解決在先前的問題中提出的問題:) http://stackoverflow.com/questions/27927322/having-mustache- templates-both-render-and-not-with-laravel-blade-and-javascript我希望能夠在變量中獲取(展平)模板,然後將其放入「