2016-12-19 62 views
0

我的自定義塊模板中有一個複雜的變量{{course_type.title[language] | nl2br}}language是當前的網站語言,但內容僅在構建緩存時以該語言提供。根據drupal 8中的語言,是否可以有多個緩存條目?

我有語言在我的渲染陣列和它的作品在樹枝模板{% trans %}命令:

return array(
    '#theme' => 'block__vt_course_offer', 
    '#data' => $courseData, 
    '#cache' => [ 
     'contexts' => ['languages'], 
     'tags' => $cacheTags, 
    ] 
); 

有沒有辦法來得到一個基於網頁的當前語言的Drupal來處理多個緩存條目?

Thx很多!
Andreas

+0

模板的使用也許這可以給你答覆:https://www.drupal.org/docs/8/api/cache-api/cache-contexts – Fky

+0

Hi @Fyk,thx很多 - 我的緩存上下文中有'''languages''',但它不影響變量。它適用於'''{%trans%}'''命令,但不適用於''{{}}''' – Andreas

回答

0

因此,我們找到了一個解決方案 - 我們將不同的部分提取到子渲染數組中,並且僅爲它們分配緩存。 重要的是是,數據[$語言]的訪問發生在主模塊中,不在模板中。

 foreach ($courses as &$courseType) { 
      $courseType['d_url'] = $dcm->getCourseUrl($courseType['id']); 

      $courseType['output'] = array(
       '#theme' => 'block__vt_course_offer_item', 
       '#data' => [ 
        'id' => $courseType['id'], 
        'image' => $courseType['image'], 
        'duration' => $courseType['duration'], 
        'price' => $courseType['price'], 
        'd_url' => $courseType['d_url'], 
        'title' => $courseType['title'][$language], 
        'short_description' => $courseType['short_description'][$language], 
       ], 
       '#cache' => [ 
        'disabled' => TRUE, 
        'contexts' => ['languages'], 
        'tags' => ['courseType:' . $courseData['data']['course'][0]['id']], 
       ] 
      ); 

然後我們就可以在樹枝把它作爲:

{% for course_type in courses|slice(i * 4, (i+1) * 4) %} 
     {{ course_type.output }} 
{% endfor %} 

簡而言之它歸結爲的{{variable.preset_language_value}}代替{{variable.value[language]}}

相關問題