Добавить поле для нескольких типов контента одновременно?


9

Я хочу добавить поле для нескольких типов контента одновременно, а также настроить его для всех сразу.

Причина в том, что у меня есть много типов контента, каждый из которых необходимо обновить, добавив это новое поле к каждому. Это поле будет настроено одинаково для всех типов контента. Я должен повторить этот процесс добавления и настройки поля для каждого типа контента, к которому я хочу добавить его, и через некоторое время он становится трудным.

Есть ли способ массового добавления / настройки нового поля для многих типов контента?


Сколько типов контента у вас есть?
bobylapointe

Я предполагаю, что этот вопрос больше не актуален для ОП, но актуален для Найджела Уотерса, который назначает награду. Не могли бы вы Найджел прокомментировать?
Кари Kääriäinen

Их 25 (это очень большой сайт, который требует, чтобы они были отдельными типами контента).
Найджел Уотерс

Кстати, другое решение состоит в том, чтобы нанять кого-нибудь дешево для такого рода вещей :)
donquixote

Или макрос браузера?
Donquixote

Ответы:


9

Широкие линии, использующие модуль Features, могут быть:

  1. Добавьте поле к двум (чтобы увидеть шаблон) типам контента вручную
  2. Создайте элемент, включающий базы полей и экземпляры полей для вновь создаваемых полей
  3. Отредактируйте созданный модуль, умножив базы и экземпляры полей на все необходимые типы контента
  4. Включить отредактированный модуль

Я не помню, как именно объекты имеют дело с полями. Можно ли отключить функцию после создания полей?
Donquixote

Новорожденный модуль будет зависеть от особенностей, поэтому в принципе нет, насколько я знаю.
Кари Kääriäinen

Я имею в виду отключение новорожденного модуля, а не отключение функций. Вопрос в том, будут ли экземпляры поля все еще там. Может быть, Лестер Пибоди или Найджел Уотерс могут попробовать и доложить.
Donquixote

Ой, извини. Да, на самом деле оба могут быть отключены, поля будут жить в базе данных, я вижу, как я сейчас тестирую это сам.
Кари Kääriäinen

Это правильный ответ для стандартных настроек друпалов и большинства других настроек друпалов. Но если у вас есть разные режимы отображения, доступные для разных типов контента, вам лучше настроить поля в каждом типе контента вручную или убедиться, что вы используете правильные типы отображения в коде массива field_instance.
Сумит Парик

5

Используйте модуль Field Tools :

Коллекция полезных инструментов пользовательского интерфейса для работы с полями:

Overview of fields with links to edit single instances, and all instances at once
Clone any field instance to multiple entities and bundles
Clone all field instance of a bundle to multiple entities and bundles
Import and export fields
Delete multiple instances of a field
Apply a vocabulary to multiple entities and bundles at once (the same way vocabularies were applied to content types on Drupal 6)
... your idea here. Patches welcome!

Это звучит довольно круто, мне придется взглянуть на это.
Лестер Пибоди

3

Если вы не возражаете написать собственный модуль для этого, относительно легко добавить поле к типу контента с помощью кода:
$instance = array(
'field_name' => 'field_firstname',
'label' => 'First name',
'entity_type' => 'node',
'bundle' => 'person',
);
field_create_instance($instance);

Приведенный выше код добавит поле «field_firstname» к типу контента с именем машины «person». Таким образом, вы можете создать модуль, форма которого позволяет вам выбрать поле и номер типа контента, а после отправки поле добавляется ко всем выбранным типам контента.


1

Несколько раз, когда мне приходилось делать это, я использовал Field Collection .

Предоставляет поле для сбора полей, к которому может быть прикреплено любое количество полей.

Это все еще довольно сложно, так как вы должны добавить поле коллекции полей для каждого типа контента. Тем не менее, если вы добавляете 5 или 6 полей к нескольким типам контента, вам нужно настроить первые 5 или 6 полей только один раз в коллекции полей.

После этого вы создаете поле коллекции полей (для примера, давайте его назовем field_collection_field) для одного из ваших типов контента, а затем повторно используем это поле для всех остальных.

Как я уже сказал, вам все равно нужно настроить одно поле на х количество типов контента ... но это лучше, чем создавать 10 полей на 10 типов контента (например).


aah..sorry. Я только что перечитал ваш вопрос, и ему нужно только одно поле. Извините, что потратили ваше время> _ <
Chapabu

Тем не менее, вы можете поместить это одно поле в коллекцию полей и настроить его так, как хотите, а затем сослаться на коллекцию полей с уже настроенным полем. Однако это немного излишне.
Чапабу

Нет проблем, Чапабу, это все еще полезная информация на случай, если мне понадобится что-то подобное в будущем.
Лестер Пибоди

1

Если вам удобно управлять базой данных напрямую, экземпляры полей хранятся в таблице {field_config_instance}. Вы можете добавить / настроить поле для одного типа контента, затем найти запись в таблице базы данных и продублировать ее.

Вам придется изменить два значения столбца в дублированной строке:

  • id: должно быть новое целое число, уникальное для таблицы
  • bundle: должно быть именем компьютера нового типа контента
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.