從嵌入模板擴展父塊
P粉033429162
P粉033429162 2023-12-20 21:08:59
0
1
527

我想在佈局中的樣式和腳本區塊內注入新值,但來自嵌入區塊。 當然,它會拋出錯誤 在區塊之外呼叫“parent”是禁止的.。 有什麼解決辦法嗎?

layout.html.twig:

<!DOCTYPE html>
<html>
    <head>
        {% block style %}
            <link rel="stylesheet" href="foo.css">
        {% endblock %}
    </head>
    <body>

        {% block content "" %}

        {% block scripts %}
            <script src="foo.js"></script>
        {% endblock %}

    </body>
</html>

list.html.twig:

{% extends 'layout.html.twig' %}

{% block content %}
    {% embed datatable.html.twig %}
        {% block tbody %}
            <tr>
                <td>my awesome table</td>
            </tr>
        {% endblock %}
    {% endembed %}
{% endblock %}

datatable.html.twig:

<table id="myDatatable">
    <tbody>
        {% block tbody "" %}
    </tbody>
</table>

{% block styles %}
    {{ parent() }}
    <link rel="stylesheet" href="dataTables.css">
{% endblock %}

{% block scripts %}
    {{ parent() }}
    <script src="dataTables.js"></script>
{% endblock %}

(我不能/不會使用scriptsstyles 內的list.html.twig 區塊。它們是資料表模板的一部分,在 list.html.twig.)。 遺憾的是我不能使用 use 因為這個函數不支援動態屬性,只支援字串。

來自文件:

由於 use 語句的解析與傳遞給模板的上下文無關,因此模板引用不能是表達式。

P粉033429162
P粉033429162

全部回覆(1)
P粉333395496

如評論所述,包含/嵌入不能更改其包含器中的區塊。 也就是說,有一個可用的擴充功能可以解決您的問題。

這個延遲的Twig擴充可以在這裡找到

基本上,節點延遲了所述塊的執行。 透過這種方式,您可以建立一個變數來保存所有 javascript 連結並輸出它們。這可以在高級範例中看到github。

感謝 Eugene Leonovich 製作此擴充功能

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板