Drupal - автоматизация отправки формы контента

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 089
2

Ответы 2

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

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

бывший.

// your file.php

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

редактировать: 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 в этом методе.

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

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

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

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

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

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

у вас есть ссылка на это? node_save - это то, как drupal создает узлы, я не видел никаких признаков того, что они переходят на другую модель.

Owen 15.11.2008 02:09

Я должен был быть более ясным. Я не слышал, что node_save устарел, но использовать его для решения проблем такого типа - нет. У меня было несколько разговоров о drupal irc, где мне сказали, что node_save был старым способом решения этой проблемы, а drupal_execute - новым способом.

Steven Noble 15.11.2008 02:43

В комментариях на lullabot.com/articles/quick_and_dirty_cck_imports есть хорошее обсуждение того, когда использовать каждый.

Steven Noble 15.11.2008 02:47

Другие вопросы по теме