it-swarm-eu.dev

Na stránku vložte formulář „přidání uzlu“

Hledám způsob, jak vložit na vstupní stránku formulář „přidání uzlu“. Použil jsem Form Block , ale zdá se, že přináší mnoho chyb, protože jsem používal vývojovou verzi snímku.

19
ousneo

Můžeš použít:

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

Přestože je odpověď Daniela Wehnera naprosto správné a funguje, chtěl jsem přidat dva běžné problémy, kterým jsem čelil s tímto přístupem, a řešení, jak tyto problémy překonám. Nejprve můj kód, pak vysvětlení:

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)

Proč jsem to udělal tímto způsobem, místo Danielových jednoduchých node_add ?

Problém 1: node_add() funkce změní nadpis stránky na Vytvořit 'typ uzlu' , to je těžké ve funkci.

Řešení 1: Namísto použití funkce node_add Jsem zkopíroval kód a odstranil drupal_set_title. Výše uvedený kód je stejný kód jako funkce node_add, S výjimkou tohoto jednoho řádku.

Problém 2: Ve vložené podobě nefungovaly některé funkce Ajaxu. Například pokud máte pole, které může mít neomezené hodnoty, takže máte tlačítko 'Přidat další položku', nebo pokud máte ve formuláři pole pro upload souboru, nefungují.

Řešení 2: Ve vašem uživatelském modulu implementujte hook_menu_alter() pro cesty volání Ajax a zahrňte 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
Елин Й.

Pokud použiji kód přijaté odpovědi ...

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

... uvnitř funkce zpětného volání stránky, pak print drupal_render.. výsledkem je zcela netematická (nefunkční) stránka.

Místo toho jsem právě return 'ed the $form:

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