Я пишу пользовательский модуль, который я делал раньше, но я впервые пытаюсь создать тип контента с полями. Я реализовал hook_node_info, и Тип контента отображается в списке Типов контента в выпадающем меню admin_menu, однако при просмотре admin/structure/types
его нет в списке.
Я реализовал hook_install и собрал некоторый код, который я нашел в другом вопросе SO. У меня есть код, который выводит некоторую отладочную информацию в мой журнал ошибок, и он выглядит так, как будто все работает, но когда я перехожу к типу содержимого структуры, он не показывает добавленное мной поле.
Вот крючки:
function mymod_node_info() {
return array(
'mymod_content' => array(
'name' => t('My Mod'),
'base' => 'mymod_content',
'description' => t('A Description'),
)
);
}
function mymod_install() {
error_log('mymod_install');
$types = node_type_get_types();
if ( ! field_info_field('field_mymod_myfile') ) {
$field = array(
'field_name' => 'field_mymod_myfile',
'type' => 'file',
);
$created_field = field_create_field($field);
error_log('---- field_create_field -----');
error_log(var_export($created_field, true));
}
$instance = array(
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => TRUE,
);
$created_instance = field_create_instance($instance);
error_log('---- field_create_instance -----');
error_log(var_export($created_instance, true));
}
Я вижу таблицу field_data_field_mymod_myfile
в базе данных, поэтому знаю, что первая часть сработала. Однако таблица пуста.
Журнал ошибок показывает, что field_create_instance()
метод вернул это:
array (
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => true,
'field_id' => '5',
)
Почему мое поле не отображается в этом типе контента?
источник
Ответы:
Это не столько ответ, сколько расширение предыдущего ответа.
Я нашел эти две ссылки очень полезными для выяснения того, что нужно системе для добавления пользовательских полей к типу узла вашего пользовательского модуля.
Лучший: http://www.sitepoint.com/creating-a-new-drupal-node-type/
Хорошая дополнительная информация: http://public-action.org/content/drupal-7-field-api-drupal-7-adding-custom-content-type-custom-fields-field-api
Проблема, с которой я столкнулся, заключалась в том, что эти (и все другие примеры, которые я могу найти в Интернете) являются очень конкретными примерами без достаточного количества документации, чтобы помочь мне найти решение для моего собственного варианта использования.
Что помогло, так это комментарий Tenken к OP об использовании модуля Features для получения массивов для пользовательских полей.
Поэтому я скачал модуль «Функции» и включил его: https://drupal.org/project/features
Затем я создал поля для своего типа контента, используя интерфейс администратора в Drupal, как вы обычно это делаете, и хотел, чтобы модуль создавался. Затем я просмотрел «Структура»> «Объекты»> «Создать объект» и добавил поддельное имя (я использовал «test») для объекта, а затем в области компонентов нажмите «Экземпляры полей» и установите флажки для настраиваемых полей. Все поля называются как-то вроде node- [имя вашего компьютера типа узла] - [имя поля], поэтому в моем случае, так как я хотел создать поле изображения, это было node-novel_section-field_image.
После выбора настраиваемых полей для моего типа узла я просто щелкнул «Функция загрузки» и сохранил файл .tar на моем рабочем столе, открыл его, открыл папку «test», затем просмотрел test.features.field_base.inc и test. features.field_instance.inc, чтобы получить массивы, которые мне нужны для моих полей.
Затем я просто использовал структуру, описанную в той первой ссылке, которую я разместил, и после этого она отлично работала. Для меня.
Я не смог найти никакой документации по структурам массивов, необходимых для таких вещей, как поля изображения и справочные поля таксономии, и казалось, что все другие учебные пособия и запросы помощи онлайн сосредоточены на конкретных вещах, таких как текстовые поля.
Надеюсь, любой, у кого возникли те же проблемы, что и у меня, увидит это и сможет выполнить настройку, используя эти примеры и модуль «Функции», как я.
Спасибо tenken за указание на эту функциональность модуля Features, я никогда не использовал его и не знал, что он это сделает.
источник
Это код, в котором будет создан новый тип контента, который следует добавить в файл .install.
Добавление hook_install ():
Вы должны сделать сообщение drupal и записать это событие в журнал:
Предоставьте hook_uninstall () для удаления вашего типа контента :
источник
admin/structure/types
Этот пост несколько устарел, но если он поможет, я нашел эту статью очень ясной. Он показывает, как создать новый тип контента, шаг за шагом.
Ссылка на учебник
источник