랜딩 페이지에 "노드 추가"양식을 포함시키는 방법을 찾고 있습니다. Form Block 을 사용 하고 있었지만 개발 스냅 샷 버전을 사용하고 있었기 때문에 많은 오류가 발생하는 것으로 보입니다.
랜딩 페이지에 "노드 추가"양식을 포함시키는 방법을 찾고 있습니다. Form Block 을 사용 하고 있었지만 개발 스냅 샷 버전을 사용하고 있었기 때문에 많은 오류가 발생하는 것으로 보입니다.
답변:
당신이 사용할 수있는:
module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);
node_add()
정의되지 않은 오류가 발생 if (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }
하면 처음 에 추가하고 싶을 것 입니다. 이 정보는 여기에서 온다 : ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )
Daniel Wehner의 답변 은 절대적으로 정확하고 작동하지만이 접근법에 직면 한 두 가지 일반적인 문제와 이러한 문제를 극복하는 방법을 추가하고 싶었습니다. 먼저 내 코드와 설명 :
global $user;
module_load_include('inc', 'node', 'node.pages');
$node = (object) array(
'uid' => $user->uid,
'name' => (isset($user->name) ? $user->name : ''),
'type' => 'YOUR_NODE_TYPE',
'language' => LANGUAGE_NONE,
);
$form = drupal_get_form('YOUR_NODE_TYPE . '_node_form', $node);
print drupal_render($form)
다니엘의 간단한 대신 내가 왜 이런 식으로 node_add
했습니까?
문제 1 : node_add()
함수가 페이지 제목을 'node type'만들기로 변경하면 함수 에 하드 코딩됩니다.
해결 방법 1 : node_add
함수 를 사용하는 대신 코드를 복사하고를 제거했습니다 drupal_set_title
. 위의 코드는 node_add
이 한 줄을 제외하고 함수 와 동일한 코드 입니다.
문제 2 : 임베디드 형식에서 일부 아약스 기능이 작동하지 않았습니다. 예를 들어, 무제한 값을 가질 수있는 필드가있어 '다른 항목 추가'단추가 있거나 양식에 파일 업로드 필드가 있으면 작동하지 않습니다.
해결 방법 2 : 사용자 정의 모듈에서 hook_menu_alter()
ajax 호출 경로를 구현 하고 포함하십시오 node.pages.inc
.
function YOURMODULE_menu_alter(&$items) {
$items['file/ajax']['file path'] = drupal_get_path('module', 'node');
$items['file/ajax']['file'] = 'node.pages.inc';
$items['system/ajax']['file path'] = drupal_get_path('module', 'node');
$items['system/ajax']['file'] = 'node.pages.inc';
}
function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
수락 된 답변 코드를 사용하면 ...
module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);
... 페이지 콜백 함수 내부 print drupal_render..
에서 완전히 테마가없는 (깨진 모양의) 페이지가됩니다.
그래서 그 대신, 난 그냥 return
'는 에드 $form
:
module_load_include('inc', 'node', 'node.pages');
$form = node_add('program_registration');
return $form;