2011-08-05 37 views
25

我們正在使用Symfony2構建新網站,而資產看起來非常有希望用於資源管理,特別是用於自動組合和處理所有js/css文件。跨繼承模板組合資產資源

我們將有一些資源用於站點範圍,有些是特定於特定頁面的資源。我們也將對模板使用三層繼承的方法。

有沒有辦法將這兩個概念結合起來,即在繼承的模板中自動添加額外的資源,以便它們都作爲單個資源輸出?

回答

17

不幸的是,你不能:(

您不能覆蓋assetic標籤添加更多的資產但是,您可以執行以下操作:

{% block stylesheets %} 
    {% stylesheets 'your_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

然後,當你擴展模板:

{% block stylesheets %} 
    {% stylesheets 'your_old_assets_here' 'your_new_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

在重寫的塊,你可以使用parent()包括父塊,但你將有2個鏈接,則:你不能老assetic標籤與結合 新的那一個。

然而,您可以製作一個樹枝宏,它將輸出{%stylesheets%}資產標籤和舊資產,並將其作爲輸入包含新的資產位置。

更多信息here

+0

Drat,I儘可能多懷疑。感謝指向樹枝宏的指針。 –

+0

不是資產首先運行嗎? –

+0

我認爲這是一種正確的行爲:將必須在單個頁面/路線上的資產組合起來,我認爲它不會很聰明。這正是我期望的行爲。所以,感謝您解決如何只爲一條路線插入文件的解決方案! :) – Aerendir

23

實際上,你可以做到以下幾點:

在layout.html.twig(或任何你的佈局)

{% block stylesheets %} 
    {% stylesheets 'your_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

而且在擴展任何模板佈局:

{% block stylesheets %} 
    {{ parent() }} 
    {% stylesheets 'additional_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

然後,您不需要按照Nemanja Niljkovic所建議的那樣重新鍵入所有舊資產

+0

是的,但(引自Nemana Niljkovic的答案):「但是你會有2個鏈接,因爲你不能將舊的資產標籤和新的標籤結合起來」 –

+28

將新文件合併到一起沒什麼意義這是來自父級的一組樣式表/腳本,因爲那樣會破壞緩存的目的,因爲您可能擁有許多這樣的頁面以及它們自己的一組附加文件......將它們組合起來將意味着爲每個頁面組合一組新文件* !告訴瀏覽器緩存再見。因此,對於具有自己額外文件的頁面的頁面,單獨設置一組組合文件實際上會更好,因此至少更通用的一組樣式表/腳本將始終被緩存 – Populus