Como posso abordar a implementação do seguinte no Drupal 7?
O que eu preciso fazer é criar um módulo que defina uma nova entidade de campo, chamada 'Empresa'. Eu tenho uma lista de, digamos, 20 campos que precisam ser preenchidos por cada instância da empresa. Essas perguntas são predefinidas e algumas podem conter validação personalizada.
No momento, estou no momento em que posso adicionar novos campos à entidade da empresa. Isso funciona bem no momento. Meu problema é que preciso que todos esses campos estejam lá assim que o módulo for instalado, portanto, adicioná-los pela interface não é uma opção.
Fiquei me perguntando como posso abordar isso? Eu diria que é possível fazer o que pode ser feito usando a interface do usuário 'Gerenciar campos' programaticamente.
node_type_set_defaults()
enode_type_save()
, claro, tambémhook_install()
.Respostas:
Use field_create_field () para criar o próprio campo e field_create_instance () para ter uma instância para o pacote configurável de entidade especificado.
Ao criar campos como parte de um módulo personalizado, você pode ou não desejar excluir o campo quando o módulo for desinstalado. Para fazer isso, você pode usar field_delete_field () se desejar excluir o campo e toda a instância do campo, ou se desejar excluir instâncias específicas, poderá usar field_delete_instance () .
fonte
Exemplo de como adicionar programaticamente campos ao perfil do usuário e como utilizá-los, ou não, no formulário Registro do Usuário.
fonte
Se você precisar criar / excluir rapidamente campos de um Tipo ou Entidade de conteúdo existente, sem usar a interface do usuário nem a programação, poderá usar estes comandos Drush pouco conhecidos:
Por exemplo: crie dois novos campos para o artigo:
Outros comandos:
fonte
Conforme indicado por outras pessoas, você pode usar as funções da API de campo na implementação hook_install () do seu módulo para criar campos e suas instâncias para o seu tipo de conteúdo. Consulte o node_example_install () para exemplo de uso da função.
Outra solução é usar o módulo Recursos . Os recursos podem exportar vários componentes do site para codificar em um módulo. Os tipos e campos de conteúdo estão entre esses exportáveis. Você pode gerar um módulo de Recursos e substituir o código existente. Os Recursos farão o possível para evitar a quebra do código. Ou você pode gerar um módulo fictício e copiar. / Cole o código relacionado aos campos no seu módulo. Isso requer um entendimento básico de como os Recursos funcionam.
fonte
No seu arquivo de instalação, você precisará definir o 'hook_install' e o 'hook_uninstall'. Exemplo incluído, mas leia tudo sobre as chaves extras nas referências da API (o código não foi testado, portanto pode haver erros de digitação).
No
hook_install
você pode adicionar os campos usando:field_create_field , Esta função cria um modelo para um campo.
field_create_instance Pode ser usado após a criação do campo para adicioná-lo ao content_types (também conhecido como bundles).
OBSERVAÇÃO Os nomes dos vários tipos de campos podem ser encontrados nos módulos que os geram (é a chave do item da matriz em hook_field_info). Você pode encontrar todos os módulos de implementação de campo principal na pasta modules / field / modules.
As configurações também podem ser derivadas dos módulos de campo. As configurações definidas em
field_create_field
são as de todo o site. Os que você definefield_instance_create
são os específicos do node_typeNo
hook_uninstall
field_delete_instance e field_delete_field podem ser usados para removê-los novamente.
field_delete_field
É chamado automaticamente se você excluir a última instância (normalmente).fonte
Recentemente, tive uma necessidade semelhante de um projeto, eis como eu o abordei, espero que ajude alguém.
Basicamente, você criará os campos necessários usando a interface do usuário dos campos, exportará para o código e os incluirá em seu módulo personalizado. Você precisará do módulo Devel ativado.
Eu também criei um Gist com esta informação.
Aqui vamos nós....
Defina as 3 primeiras variáveis e clique em executar
Você receberá 2 matrizes, algo assim, espero que com todas as propriedades preenchidas.
Agora adicione o seguinte código ao seu arquivo .install. Substitua todas as instâncias do mymodule pelo nome real do módulo. Cole o código da saída devel nos _mymodule_field_data e _mymodule_instance_data, conforme observado nas respectivas funções abaixo. Você pode fazer isso para quantos campos quiser, basta colocar todas as matrizes $ fields na função _mymodule_field_data e todas as instâncias $ na função _mymodule_instance_data.
fonte
Você também pode considerar usar o módulo Recursos para criar os campos no momento da instalação.
Como o Features gera código para os campos, uma opção é usar o módulo Feature para gerar o código em um módulo fictício e depois copiar e colar no arquivo .install do módulo.
O benefício é que o módulo não depende do módulo Recursos em seu ambiente de destino.
fonte
Você pode usar o código do módulo da empresa personalizado fornecido abaixo para criar programaticamente um tipo de conteúdo com seus vários campos.
Você pode adicionar esse código em um arquivo .install do seu módulo personalizado. Ele adiciona programaticamente um tipo de conteúdo chamado "empresa" e seus vários tipos de campos (texto, numérico, data (nota: você precisará instalar o módulo Data, pois o campo Data não é fornecido por padrão), imagem, lista).
Também adicionei o código de desinstalação que removerá o tipo de conteúdo "empresa" junto com todos os seus campos e dados quando você desinstalar o módulo 'customcompanymodule'.
Você pode modificar / remover esses campos conforme suas necessidades:
fonte