Estou procurando uma maneira de incorporar um formulário de "adição de nó" em uma página de destino. Eu estava usando o bloco de formulário , mas parece trazer muitos erros porque estava usando uma versão de instantâneo de desenvolvimento.
19
Respostas:
Você pode usar:
fonte
node_add()
indefinido, adicioneif (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }
-o no início. Esta informação vem de aqui: ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )Embora a resposta de Daniel Wehner esteja absolutamente correta e funcione, eu queria adicionar dois problemas comuns que enfrentei com essa abordagem e soluções alternativas para superar esses problemas. Primeiro meu código, depois as explicações:
Por que fiz dessa maneira, em vez das simples de Daniel
node_add
?Problema 1: a
node_add()
função altera o título da página para Criar 'tipo de nó' , isso é codificado na função.Solução alternativa 1: em vez de usar a
node_add
função, copiei o código e removi odrupal_set_title
. O código acima é o mesmo código danode_add
função, exceto nesta linha.Problema 2: No formulário incorporado, algumas funções do ajax não funcionavam. Por exemplo, se você possui um campo que pode ter valores ilimitados, para ter um botão "Adicionar outro item" ou se possui um campo de upload de arquivo em seu formulário, eles não funcionam.
Solução alternativa 2: em seu módulo personalizado, implemente
hook_menu_alter()
para caminhos de chamada ajax e incluanode.pages.inc
.fonte
function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
Se eu usar o código da resposta aceita ...
... dentro de uma função de retorno de chamada da página,
print drupal_render..
isso resulta em uma página completamente sem tema (aparência quebrada).Então, em vez disso, eu apenas
return
editei$form
:fonte