2017-05-11 42 views
0

我第一次使用木材,我發現很難將純粹的PHP思想轉換爲模板模型。擴展木材

我現在困惑的是使用一個日期,這是一個輸入字段,而不是發佈日期。

所以我有一個來自ACF的中繼器字段。它有三個子字段:release_date,document_file和document_title。我的發佈日期格式是YYYY-MM-DD

正如您可能已經猜到的那樣,此中繼器字段以PDF列表的形式輸出。

到目前爲止這麼好,但我想要一些高級功能 - 即默認情況下通過release_date顯示PDF。我還希望能夠按年過濾,即 - 如果點擊「2015」,則只顯示該年的文檔。

我完全知道如何在直接的WordPress中做到這一點,但我很困惑,使它在木材。我一直在嘗試使用自定義過濾器來做到這一點,但我已經感覺到我真正想要的是一個自定義類。

此外,當我安裝木材它沒有與首發主題,所以我做了搜索,並從GitHub下載。我有一種感覺,這是一個傳統版本,因爲文件結構和語法似乎不符合文檔。

從這裏下載:https://github.com/timber/starter-theme

但是例如該代碼在啓動主題的functions.php:

function add_to_twig($twig) { 
    /* this is where you can add your own functions to twig */ 
    $twig->addExtension(new Twig_Extension_StringLoader()); 
    $twig->addFilter('split_date', new Twig_SimpleFilter('split_date', array($this, 'split_date'))); 
    return $twig; 
} 

並不完全在https://github.com/timber/timber/wiki/Extending-Timber匹配「添加到嫩枝」下的語法。

+0

用於添加「過濾器」的語法有點不同,但仍然正確。使用'array($ this,'split_date')'等於告訴'twig':添加一個新的過濾器'split_date'併爲它分配基於'$ this'類的函數。該文檔中的示例使用全局函數而不是類方法 – DarkBee

+0

好吧,很酷,所以不要棄用。但是,儘管我正在努力達到目標,這是否是一種合理的方式?我希望能夠分割日期(因此'split_date')並分別使用日,年和月。 – rickibarnes

+0

如果你的發佈是一個有效的日期字符串,我會去:'{{ release_date | date('Y-m-d') }}' – DarkBee

回答

0

這裏有一些輔助功能,使我能夠輕鬆地擴展木材。

function add_context_var($key, $var) { 
    add_filter('timber_context', function ($context) use ($key, $var) { 
     $context[ $key ] = $var; 

     return $context; 
    }); 
} 

function add_context_func($key, $callback) { 
    add_filter('timber/twig', function ($twig) use ($key, $callback) { 
     $twig->addFunction(new \Twig_SimpleFunction($key, $callback)); 

     return $twig; 
    }); 
} 

function add_to_context($key, $val) { 
    if (is_callable($val)) { 
     add_context_func($key, $val); 
    } else { 
     add_context_var($key, $val); 
    } 
} 

function add_to_context_filter($key, $callback) { 
    add_filter('get_twig', function ($twig) use ($key, $callback) { 
     $twig->addExtension(new Twig_Extension_StringLoader()); 
     $twig->addFilter(new Twig_SimpleFilter($key, $callback)); 

     return $twig; 
    }); 
} 

//php file 
add_to_context("blue", "this key is blue") 
add_to_context("red", function($extra = ""){ 
    return "this key is red and it has $extra"; 
}) 
add_to_context_filter("relative_link", function ($content) { 
    return str_replace("http://", "//", $content);; 
}); 

//twig file 
color: {{ blue }} 
color: {{ red("a function parameter") }} 
github: {{ "http://github.com/"|relative_link }} 

//output html 
color: this key is blue 
color: this key is red and it has function parameter 
github: //github.com/