2012-02-20 53 views
0

如何在使用Perl的HTML::Template模塊時訪問哈希中的變量?在Perl模板中訪問哈希

我建立以下散在我的Perl代碼:

# Load success/error flash messages 
if ($query->param("submit")) { 
    $template->param(
    FLASH => { 
     CLASS => "success", 
     MESSAGE => "Your cart has been successfully updated!" 
    } 
); 
} 

我想在我的模板來訪問這些變量。要訪問一個普通變量,你這樣做:

<TMPL_VAR NAME=FLASH> 

如何可能我在模板訪問FLASH [「類」]?

回答

1

沒有什麼表示你可以設置一個參數爲hashref的文件中。最接近你想要做的就是把hashref在數組引用:

$template->param(
    FLASH => [ { 
     CLASS => "success", 
     MESSAGE => "Your cart has been successfully updated!" 
    } ] 
); 

然後你就可以訪問它:

<TMPL_LOOP NAME=FLASH> 
    <TMPL_VAR NAME=CLASS> 
    <TMPL_VAR NAME=MESSAGE> 
</TMPL_LOOP> 

但與單一元素的數組可能是矯枉過正。另一種方法是擺脫hashref並使結構扁平化:

$template->param(
    FLASH.CLASS => "success", 
    FLASH.MESSAGE => "Your cart has been successfully updated!" 
); 

... 

<TMPL_VAR NAME=FLASH.CLASS> 
<TMPL_VAR NAME=FLASH.MESSAGE> 
+0

這是在文檔中的[TMPL_LOOP部分](https://metacpan.org/module/HTML::Template#TMPL_LOOP)末尾描述的。 – Quentin 2012-02-20 10:52:13

+0

我通過文檔閱讀並找不到它,但我認爲可能有一個我錯過的技巧。謝謝你的解釋。我會壓扁這個結構。 – 2012-02-20 16:58:04

2

訪問與。 (點)

FLASH.CLASS

1

HTML ::模板總是需要散列數組的哈希等。 如果你有一個任意的數據結構,你可能想嘗試HTML :: Template :: Compiled,你可以使用點語法(聲明:我是作者)

還有HTML :: Template :: Plugin ::點,但我從來沒有測試過它,似乎有點更有限。