一千萬個為什麽

搜索

條目保留已從條目類型布局中刪除的字段數據

我有一個標題為“關於”的單頁部分。有一次,我為條目類型布局分配了一個“文本”富文本字段。然後我在此字段中添加了一些填充文本並保存了該條目。後來我從字段布局中刪除了這個字段。

問題是工藝仍然在前端填充此輸入字段,即 {{entry.text}} 仍然顯示填充文本。

由於幾個原因,這是有問題的,但最重要的是(在我的場景中),因為我正在處理搜索結果模板,該模板顯示每個條目的摘錄;不同的條目可能有不同的字段,所以我做一個基本的if/else來查看哪些字段可用,即:

{% if entry.text is defined %}
    {{ entry.text }}
{% elseif entry.multiContent.text is defined %}
    {{ entry.multiContent.text }}
{% endif %}

這提出了兩個問題:

1)有沒有辦法判斷一個字段是否實際主動分配給條目布局?

2)我理解為什麽字段數據將保留在數據庫中,即使該字段已從布局中刪除,但在什麽情況下填充“已刪除”字段的條目是期望的行為?它肯定會增加開銷,它是違反直覺的(imo)並且有可能引發各種問題。

最佳答案

從技術上講,所有條目都包含所有字段,無論其布局如何。字段布局大多只是一個UI事物。

1)有沒有辦法判斷一個字段是否實際上是主動分配給條目布局?

這有點麻煩,需要 MN Break and Continue 插件,但是:

{% for flf in entry.getFieldLayout().getFields() %}
    {% set field = flf.getField() %}

    {% if field.handle == 'text' %}
        {{ entry.text }}
        {% break %}
    {% elseif field.handle == 'multiContent' %}
        {{ entry.multiContent.text }}
        {% break %}
    {% endif %}
{% endfor %}

2)我理解為什麽字段數據會保留在數據庫中,即使該字段已從布局中刪除,但在什麽情況下填充“已刪除”字段的條目是所需的行為?它肯定會增加開銷,它是違反直覺的(imo)並且有可能引發各種問題。

實際上,對於Craft來說,更快可以不擔心現場布局,這就是為什麽它現在不被考慮在內。獲取的數據更少,運行的邏輯更少。如果您檢查 entry.text ,Craft只會假設您知道自己在做什麽。

也許更好的方法是檢查條目類型的ID /名稱:

{% if entry.typeId in [1,2,3] %}
    {{ entry.text }}
{% elseif entry.typeId in [4,5,6] %}
    {{ entry.multiContent.text }}
{% endif %}

(要麽)

{% if entry.type.handle in ['one', 'two', 'three'] %}
    {{ entry.text }}
{% elseif entry.type.handle in ['four', 'five', 'six'] %}
    {{ entry.multiContent.text }}
{% endif %}

轉載註明原文: 條目保留已從條目類型布局中刪除的字段數據