it-swarm-ko.tech

페이지에 "노드 추가"양식 포함

랜딩 페이지에 "노드 추가"양식을 포함시키는 방법을 찾고 있습니다. Form Block 을 사용하고 있었지만 개발 스냅 샷 버전을 사용하고 있었기 때문에 많은 오류가 발생하는 것으로 보입니다.

18
ousneo

당신이 사용할 수있는:

module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);
28
Daniel Wehner

Daniel Wehner의 answer 는 절대적으로 정확하고 작동하지만이 접근법에 직면 한 두 가지 일반적인 문제와 이러한 문제를 해결하는 방법을 추가하고 싶었습니다. 먼저 내 코드와 설명 :

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() 을 구현하고 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';
}
16
Елин Й.

수락 된 답변 코드를 사용하면 ...

module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);

... 페이지 콜백 함수 내에서 print drupal_render..를 사용하면 테마가 완전히 구분되지 않은 페이지가 나타납니다.

대신, 나는 단지 $formreturn했습니다 :

module_load_include('inc', 'node', 'node.pages');
$form = node_add('program_registration');
return $form;
0
alec