Eu tenho uma situação em que gostaria de poder criar nós e nós referenciados ao mesmo tempo. Existem soluções para isso que funcionam bem para isso?
Para esclarecer o que estou falando, considere a seguinte situação ( altamente simplificada por uma questão de explicação):
Há uma classe do tipo de conteúdo que possui um campo referenciado pelo nó, Student . Gostaria que os usuários pudessem criar nós de classe e de aluno ao mesmo tempo. Também gostaria que eles pudessem usar a referência normal do nó para concluir automaticamente um Aluno que já existe.
Idealmente, eu gostaria que tudo isso funcionasse em uma única página e também dentro dos limites do sistema de permissões Drupal, para que eu possa ter várias funções e várias permissões.
Sim, eu sei que, nesse caso, o Student seria melhor servido como usuário (e não como um nó), mas Class e Student são apenas para ilustrar a situação. O cenário real realmente precisa de referências de nós.
Há uma pergunta semelhante a isso: Criando nós referenciados junto com o nó pai , mas estou especificamente interessado apenas nas soluções Drupal 7.
EDITAR:
Não apenas procurando módulos existentes, mas também um código personalizado.
Respostas:
Eu uso a caixa de diálogo Referências , que coloca um pequeno "+" nos campos de referência existentes, permitindo que o usuário crie um novo aluno diretamente do formulário de edição do nó da classe .
fonte
Para alguns sites diferentes agora, eu fiz isso usando um modal ctools, e aqui está o esboço básico de como eu o implementei (muito simplesmente):
Crie um retorno de chamada de página personalizada no hook_menu () do seu módulo que exiba um formulário básico de nó para o nó que você deseja referenciar (para um nó 'aluno', basta ter um campo de nome e talvez um campo de ano de graduação). Nesse formulário, em seu retorno de chamada de envio, salve o nó usando node_save () e armazene o ID do nó (que deve estar em $ node-> nid depois de passar um novo objeto de nó para node_save ()) nos formulários
$form_state['storage']['student_id']
.Altere o formulário do nó mestre / classe usando hook_form_alter () . Você precisa fazer algumas coisas aqui:
Primeiro, você precisa adicionar o javascript e a funcionalidade modal do ctools para que o ctools saiba o que fazer com o seu link especial:
Segundo, você precisa adicionar um link ao retorno de chamada da página criado na etapa 1 no menu hook e, com esse link, adicionar a classe 'ctools-use-modal'. Então, por exemplo:
Aqui está um exemplo de retorno de chamada:
Em
mymodule_create_student_form($form, $form_state)
, crie seu formulário como faria normalmente e, na funçãomymodule_create_student_form_submit(form, &$form_state)
(enviar), defina o valor do NID do nó do aluno recém-criado$form_state['storage']['student_id']
. É assim que você fará com que o ctools / AJAX repasse o novo nid para o seu formulário de classe original.Na minha situação, eu estava usando o modal para cuspir algumas marcações na página original, então passei a marcação para uma divisão de espaço reservado usando
ajax_command_append()
, então eu tinha algum jQuery na página original monitorando a divisão de espaço reservado e, quando encontrou conteúdo em moveria o HTML para o local apropriado em outro lugar no formulário do nó. No seu caso, você precisará preencher um campo de referência de nó único ou com vários valores, o que pode ser um pouco mais complexo. Ainda não precisei fazer isso ... então não tenho mais conselhos a oferecer para essa parte da equação.fonte
Uma opção pode ser adicionar suporte de nó ao módulo Inline Entity Form .
EDIT: Inline Entity Form tem suporte de nó hoje em dia.
fonte
Os seguintes módulos podem ser usados no Drupal 7:
Noderefcreate criar apenas um novo nó se ele não existir usando o assistente de preenchimento automático. Nodeconnect e entityconnect fornecem o botão adicionar / editar na referência do nó, se o assistente de preenchimento automático for usado. O Nodeconnect fornece apenas para referência do nó, enquanto o entityconnect fornece para referência do nó, referência da entidade, referência do termo e referência do usuário.
Inline_entity_form fornece dois widgets extras para referência de entidade (apenas).
fonte
Se isso é realmente semelhante ao cenário da escola e seus alunos podem participar de várias classes, eu usaria:
Isso também exigiria o uso de Token , filtrando a visualização dependendo do nid de Classe e configurando um valor padrão para o campo de referência do nó de Atendimento como o nid de Classe atual.
Eventualmente, você pode mapear o tipo de conteúdo do aluno para Usuário com uma referência do usuário.
fonte