使用现有字段的正确方法是什么?


13

我是Drupal初学者。我对将字段添加到内容类型有些困惑。

情况1:假设我有三个content-type BookArticleWhite Paper。我创建了Authors包含所有作者列表的词汇表。

  1. 现在,我应该为每种内容类型创建“作者”字段(对作者的术语引用)还是为一种内容类型创建该字段并将其用于其他内容类型?

  2. 两种方法的优点/缺点是什么?

  3. 如果我从一种内容类型中删除了一个重用字段,会发生什么?它是否会在所有其他位置被删除?

情况2:我关注以下内容类型:(具有指定的字段要求)

+--------------+----------------------+
| Content Type | Field Required       |
+--------------+----------------------+
| Book         | Year of publication  |
+--------------+----------------------+
| Presentation | Date of Presentation |
+--------------+----------------------+
| Article      | Date of Publication  |
+--------------+----------------------+
| Event        | Held On              |
+--------------+----------------------+

我该怎么办?我应该为一种内容类型创建一个字段并将其用于所有其他内容类型,还是为每种内容类型创建字段?

帮助我清楚地了解何时以及如何适当地重用现有字段。

Answers:


8

我应该为每种内容类型创建“作者”字段(对作者的术语引用)还是为一种内容类型创建该字段并将其用于其他内容类型?

如果需要为不同的内容类型收集相同的信息,则应使用一个字段。您的“撰写人”字段听起来像是完美的案例。如果您的作者使用不同的词汇,例如说“书作者”,“文章作者”等,则您希望(并且需要)为每个人使用单独的字段。

两种方法的优点/缺点是什么?

优势之一是您可以通过一个字段查询所有内容类型。因此,如果您发现自己想要查看由单个作者撰写的所有内容,或者甚至是由所有作者撰写的所有内容,那么创建视图即可轻松做到这一点。但这显然仅在您需要时才有用。我想主要的一点是,领域本身的用例实际上将决定这两种方法的相对优点/缺点。

另外,无论何时创建字段,都将创建两个数据库表(一个用于当前数据,一个用于修订数据)。从性能的角度来看,对于这种存储方法是否是最好的主意,我们有种“混杂”的感觉,而且有些人喜欢减少表的数量。当您将现有字段附加到另一种内容类型时,所有它们都使用相同的数据库表,因此该框会被打勾。同样,这仅在可以分离数据时才有意义。

如果我从一种内容类型中删除了一个重用字段,会发生什么?它是否会在所有其他位置被删除?

只有将该字段与所有内容类型分离后,该字段才会被删除。属于您从中分离字段的内容类型的数据将被移到已删除的数据表中,并在cron运行期间清除。

关于案例2,问问自己这个问题...

请记住,对于同一字段的每种内容类型的实例,您可以具有不同的标签,这是否将为您提供足够的可视化提示(或以数据为主导),让您知道数据之间的差异?

如果是这样,请使用单个日期字段来获得上述优势。如果不是这样,那么对您的数据设计而言,拥有单独的字段将更有意义。

一切都取决于适合您的特定网站,但是希望以上内容可以为您提供一些前进的方向。


我不明白这一点:Keeping in mind that you can have different labels for each content type's instance of the same field, will that give you enough of a visual (or data-led) cue to let you know the differences between the data?
爪子

4
我只是说要由您决定要根据您对数据的处理方式进行选择-以发布日期和演示日期为例,如果将它们分开,对您来说是否重要?您是否需要根据该日期过滤内容?如果使用单个字段,是否会给您带来不必要的结果,并且在该字段上进行过滤时会获取所有内容类型的数据?这些是要问自己的问题。这确实是一个数据设计问题,Drupal的实体/字段系统只是其抽象层。如果在Drupal之外进行设计,您是否会将这些数据放在同一张表中?
克莱夫(Clive)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.