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


19

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


1
양식 블록과 관련된 특정 문제가있는 경우 가장 적합한 곳은 해당 모듈의 문제 대기열 일 수 있습니다.
Jeremy French

답변:


28

당신이 사용할 수있는:

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

3
node_add()정의되지 않은 오류가 발생 if (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }하면 처음 에 추가하고 싶을 것 입니다. 이 정보는 여기에서 온다 : ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )
mbrakken

이것을 블록에 넣는 방법이 있습니까? 아니면 이것을 tpl.php 파일에 포함시켜야합니까?

Ajax 요소가있는 양식에 코드를 사용할 수 없습니다 (예 : 파일 업로드). 가능한 해결책
Dimetry

@Dimetry 는 임베디드 노드 형태로 Ajax 요소를 사용하는 것에 대한 내 대답 을 참조하십시오 .
Елин Й.

16

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';
}

인라인 엔티티 형식이 대안일까요? 모듈을 가지고 놀았지만 프론트 엔드에 노드 추가 양식을 표시 할 수 없었습니다. 노드를 편집 할 때만 노드 추가 양식을 표시하는 엔티티 참조 필드를 제공 할 수 있습니다.
AlxVallejo

1
인라인 엔터티 양식은 엔터티 참조 필드 용이며이 질문과 관련이 없습니다.
Елин Й.

1
파일 업로드 등에 hook_menu_alter ()를 사용하지 않으려면 대신 노드 양식에 대한 alter 양식에 include를 추가 할 수 있습니다. function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
joe_flash

@ ЕлинЙ. 이 질문에 대한 답변이 적용됩니까 ?
Umair

1
@Umair 내 대답은 페이지에 노드 양식을 추가하는 것입니다. AJAX를 통해 양식을 제출하거나 뷰를 업데이트하지도 않습니다. 그러나 AJAX Framework를 사용하여 달성 할 수 있습니다 .
Елин Й.

0

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

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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.