Drupal - автоматизация отправки формы контента - PullRequest
1 голос
/ 15 ноября 2008

Я хотел бы программно (используя php) заполнить существующую форму drupal, чтобы создать тип контента, который включен в добавленный модуль.

Подробности: модуль SimpleFeed, а тип контента - Feed. Я хотел бы вызвать функции модуля для достижения этой цели. Меня интересует метод hook_insert, который требует vid и nid, и я не уверен, что это такое.

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 15 ноября 2008

API друпала предоставляет drupal_execute () , чтобы сделать именно это. Я бы посоветовал вам избегать прямого вызова функций для создания узла (если только это не связано с производительностью). Используя drupal_execute (), будут вызваны все правильные хуки в других модулях, и ваш код с большей вероятностью продолжит работу в будущих версиях drupal.

Обратите внимание, что классическая ошибка при использовании этого метода - сначала не вызывать что-то вроде

module_load_include('inc', 'node', 'node.pages')

, который загрузит код для формы создания вашего узла.

Обращение к node_save напрямую обычно считается устаревшим и может привести к поломке кода в будущих версиях drupal.

Вот хороший пример на этом сообщении колыбельной

1 голос
/ 15 ноября 2008

Можете ли вы предоставить немного больше информации (какие модули?). Как правило, я бы предложил вызывать функции модулей для создания типа контента, а не пытаться передавать его через форму программно. Таким образом, вам не нужно беспокоиться о реализации, и вы можете поверить, что если модуль работает, он будет работать и для вашего скрипта:)

Конечно, это привязывает ваш модуль к их, поэтому любые изменения в их функциях могут повлиять на ваш. (но опять же, вы рискуете, если они тоже обновят свою структуру базы данных)

отл.

// your file.php

function mymodule_do_stuff() {
    cck_create_field('something'); // as an example, i doubt this
                                   // is a real CCK function :)
}

edit : vid и nid - это идентификаторы узла, vid - это идентификатор редакции, а nid - это первичный ключ определенного узла. поскольку это фактический узел, вам может потребоваться выполнить две операции.

  1. программно создать узел

    вам нужно будет ссылаться на базу данных для всех точных полей (таблицы node и node_revisions), но это должно дать вам базовый рабочий узел:

    $node = (object) array(
        'nid' => '',            // empty nid will force a new node to be created
        'vid' => '',
        'type' => 'simplefeed'. // or whatever this node is actually called
        'title' => 'title of node',
        'uid' => 1,             // your user id
        'status' => 1,          // make it active
        'body' => 'actual content',
        'format' => 1,
                                // these next 3 fields are the simplefeed ones
        'url' => 'simplefeed url',
        'expires' => 'whatever value',
        'refresh' => 'ditto',
    );
    
    node_save($node);
    

    теперь я думаю он должен автоматически вызвать hook_insert() simplefeed на этом этапе. если нет, то перейдите к 2. но я бы проверил, сработало ли это уже.

  2. называйте это сами!

    simplefeed_insert($node);
    

edit2 : drupal_execute() тоже неплохая идея, так как вы можете получить некоторую проверку, но таким образом вам не придется иметь дело с API форм, если вам неудобно с этим. я почти уверен, что node_save() все равно вызывает все хуки, так что вам действительно нужно сделать только шаг 1 под этим методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...