Estou escrevendo um módulo personalizado, o que já fiz antes, mas é a primeira vez que tentei criar um tipo de conteúdo com campos. Eu implementei hook_node_info e o Tipo de conteúdo está aparecendo na lista de Tipos de conteúdo no menu suspenso do admin_menu, no entanto, quando eu o navego, admin/structure/types
ele não está listado.
Eu implementei o hook_install e peguei algum código que encontrei em outra questão SO. Eu tenho o código para imprimir algumas informações de depuração no meu log de erros e parece que tudo funciona, mas quando eu navego para o Tipo de conteúdo da estrutura, ele não mostra o campo que eu adicionei.
Aqui estão os ganchos:
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));
}
Eu posso ver uma tabela chamada field_data_field_mymod_myfile
no banco de dados, então eu sei que a primeira parte funcionou. No entanto, a tabela está vazia.
O log de erros mostra que o field_create_instance()
método retornou isso:
array (
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => true,
'field_id' => '5',
)
Por que meu campo não aparece nesse tipo de conteúdo?
fonte
Respostas:
Isso não é tanto uma resposta, mas uma expansão da resposta anterior.
Achei esses dois links muito úteis para descobrir o que o sistema precisa para adicionar campos personalizados ao seu tipo de nó de módulo personalizado.
Melhor: http://www.sitepoint.com/creating-a-new-drupal-node-type/
Boas informações adicionais: http://public-action.org/content/drupal-7-field-api-drupal-7-adding-custom-content-type-custom-fields-field-api
O problema que tive foi que esses (e todos os outros exemplos que posso encontrar on-line) são exemplos muito específicos, sem documentação suficiente para me ajudar a descobrir uma solução para meu próprio caso de uso.
O que ajudou foi o comentário da tenken ao OP sobre o uso do módulo Recursos para obter as matrizes para os campos personalizados.
Então, baixei o módulo Recursos e o habilitei: https://drupal.org/project/features
Em seguida, criei os campos no meu tipo de conteúdo, usando a interface administrativa do Drupal, como você faria normalmente, que eu queria que o módulo criasse. Depois naveguei para Estrutura> Recursos> Criar recurso e coloquei um nome falso (usei "teste") para o recurso e, em seguida, na área de componentes, clique em "Instâncias de campo" e marque as caixas dos campos personalizados. Os campos são todos nomeados como node- [nome da máquina do tipo de nó] - [nome do campo]; portanto, no meu caso, como eu queria um campo de imagem, era node-novel_section-field_image.
Depois de selecionar os campos personalizados para o meu tipo de nó, cliquei em "Recurso de download" e salvei o arquivo .tar na minha área de trabalho, abri-o, abri a pasta "test" e depois vi o test.features.field_base.inc e test. features.field_instance.inc para obter as matrizes necessárias para meus campos.
Então eu apenas usei a estrutura descrita pelo primeiro link que eu postei e depois disso funcionou perfeitamente. Para mim.
Não consegui encontrar nenhuma documentação sobre as estruturas de matriz necessárias para itens como campos de imagem e campos de referência de taxonomia e parecia que todos os outros tutoriais e solicitações de ajuda on-line estão focados em itens específicos, como campos de texto.
Espero que qualquer pessoa com o mesmo problema que eu estava tendo veja isso e consiga fazer sua instalação funcionar usando esses exemplos e o módulo Recursos, como eu fiz.
Graças à tenken por apontar essa funcionalidade do módulo Recursos, eu nunca a usei e não sabia que faria isso.
fonte
Este código que será criado novo tipo de conteúdo que deve ser adicionado ao arquivo .install.
Adicionando hook_install ():
Você deve enviar uma mensagem drupal e gravar este evento no log:
Forneça hook_uninstall () para remover seu tipo de conteúdo :
fonte
admin/structure/types
Esta postagem está um pouco desatualizada, mas, se ajudar, achei este artigo muito claro. Ele mostra como criar um novo tipo de conteúdo passo a passo.
Link para o tutorial
fonte