it-swarm-eu.dev

Jak mohu programově vytvořit jednoduchý uzel stránky?

Už jsem našel Drupal 6 dokumentace o tom, jak programově vytvořit uzel stránky.
Jak je možné toho dosáhnout v Drupal 7?


Změnil jsem strategii a používám jiný přístup, ale dostávám následující chybu:

Závažná chyba: Nelze získat přístup k prázdné vlastnosti v C:\...\...\...\...\modules\field\field.attach.inc na řádku 198

Používám následující kód:

$form_state = array();
module_load_include('inc', 'node', 'node.pages');

$node = array('type' => 'page');
$form_state['values']['uid'] = 1;
$form_state['values']['name'] = 'admin';

$form_state['values']['title'] = 'Programatic Page';
$form_state['values']['language'] = 'en';

$form_state['values']['body']['en'][0]['value'] = 'My own value';
$form_state['values']['body']['en'][0]['summary'] = 'My own summary';
$form_state['values']['body']['en'][0]['format'] = 'filtered_html';

$form_state['values']['menu']['enabled'] = 1;
$form_state['values']['menu']['link_title'] = 'Auto-page';
$form_state['values']['menu']['description'] = 'Own Programatic Page';
$form_state['values']['menu']['parent'] = 'main-menu:0';
$form_state['values']['menu']['weight'] = 5;

$form_state['values']['path']['alias'] = 'auto-page';
$form_state['values']['comment'] = 1;

$form_state['values']['status'] = 1;
$form_state['values']['promote'] = 0;
$form_state['values']['revision'] = 0;

$form_state['values']['op'] = t('Save');

drupal_form_submit('page_node_form', $form_state, $node);

Je něco špatně?


Pomocí Firebug (plugin pro Mozilla Firefox) jsem zjistil jméno prvků a pak jsem je vyplnil správnými hodnotami.
Programové vytvoření uzlu 'page' v Drupal 7) se provádí pomocí následujícího kódu:

global $user;

$customNode = new stdClass();

$customNode->type = 'page';
node_object_prepare($customNode);
$customNode->uid = $user->uid;
$customNode->name = $user->name;

$customNode->title = 'Your page title';
$customNode->language = 'en';
$customNode->body[$customNode->language][0]['value'] = 'Your value';
$customNode->body[$customNode->language][0]['summary'] = 'Your summary';
$customNode->body[$customNode->language][0]['format'] = 'filtered_html';

$customNode->menu['enabled'] = 1;       // 1 to enable providing a link in main menu
$customNode->menu['link_title'] = 'Your page link title';
$customNode->menu['description'] = 'Your page description';
$customNode->menu['parent'] = 'main-menu:0';
$customNode->menu['weight'] = 2;

$customNode->path['alias'] = 'Your Alias';
$customNode->comment = 1;

$customNode->status = 1;        // 1 means published
$customNode->promote = 0;
$customNode->revision = 0;

$customNode->changed = $_SERVER['REQUEST_TIME'];
$customNode->created = $_SERVER['REQUEST_TIME'];

node_submit($customNode);
node_save($customNode);

To nefunguje úplně.
Stránka se úspěšně vytváří se všemi hodnotami, ale odkaz se v navigaci v hlavní nabídce nezobrazí (myslím na kartách hlavní nabídky poblíž karty Domů).
".

Chci, aby se automaticky zobrazovala, když je vytvořena. Máš nějaký nápad?

4
Peter

Projekt Devel obsahuje modul nazvaný Devel Generate pro generování falešného obsahu. Můžete to použít jako příklad. Myslím, že části, které potřebujete, jsou v souboru devel_generate.inc .

4
Matt V.

Příklad, jak to udělat, je zde - prostě to vyzkoušejte a funguje to opravdu pěkně:
Jak programově vytvářet uzly, komentáře a taxonomie v Drupal 7

(Toto bylo ve skutečnosti nalezeno codeinthehole pro toto odpověď , takže díky němu)

1
Yarin