2009-04-21 1 views
5

Я работаю с системой Drupal 6.x для создания физических упражнений и личных тренировочных программ, а также использую CCK с типами контента Exercise и Program, где программа содержит несколько полей заголовка и список ссылок на узлы, из которых он состоит. Это отлично работает, и я могу вручную создавать программы, которые отлично работают. Теперь я хочу, чтобы создать модуль, который может генерировать эти программы автоматически на основе ряда алгоритмов я разработал, этот процесс будет выглядеть следующим образом:Создание контента Drupal CCK программно/через API

  1. нагрузки все упражнения в массив
  2. пользователей Загрузка личные данные (ранее введенные)
  3. Установление лучше всего подходят упражнения
  4. Создать новый тип содержимого программы
  5. Сохранить программу

Упражнение имеет ряд связанных атрибутов, и хотя я мог бы использовать все вышеперечисленное, используя SQL непосредственно в таблицах, он был бы довольно сложным и не чувствовал бы себя хорошо. Я хотел бы, чтобы на шаге 1 загрузить упражнения в виде массива объектов Exercise (node_load?), А затем создать объект программы и сохранить. Является ли этот подход типа OO возможным или мне нужно прибегать к непосредственному манипулированию данными?

Благодаря

ответ

5

Лучший способ для решения этой проблемы было бы написать свой собственный модуль, чтобы сделать это.

Шаг 1 Вы можете сделать node_load ($ НДИ) на всех excercies Шаг 2 Вы можете использовать user_load ($ UID) Шаг 3 Вы должны будете перебирать пользовательского объекта и совпадают с соответствующими excercies. Шаг 4/5 Я бы создал новый $ node = stdClass(); объект и заполнить атрибуты с правильными данными, а затем перенести node_save ($ node); это присвоит ему $ node-> id и т. д.

Если вы не уверены в том, какие атрибуты находятся в вашем узле учебной программы, то выполните print_r ($ node); на тот, который вы создали уже.

Phil

+0

Я планирую написать модуль для этого - как работает node_save? будет ли это просто сохранять в таблице узлов или будет ли он фактически создавать записи для программы? – Macros

+0

node_save работает над узловым объектом и сохраняет его в таблицах node и node_revisions, а затем на него вызывается все остальные блокировки модуля. –

1

Drupal не дает какой-либо «каскадные» сохранить механизм, чтобы сохранить иерархию узлов одним махом. Вам нужно будет построить каждый узел в коде и вызвать node_save() на нем явно, как описано Phil Carter.

Модуль Node Export может генерировать образец кода для создания узла (в комплекте с полями CCK) программно.

0

Существует тонна модулей, которые пытаются правильно импортировать товар. Посмотрите на их сравнение. http://groups.drupal.org/node/21338

Если вам нужны стратегии или примеры импорта материала в узлы, это отличный ресурс.

0

Я не думаю, что «создание» этих программ даже необходимо.

Почему бы не просто отобразить список упражнений, соответствующих вашим требованиям, и поделиться «характеристиками» с пользователем.

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

Это будет динамично и специфично для пользователя, и обратите внимание на необходимость предварительной загрузки нескольких программ.

Мысли.

+0

Изначально мы шли по этому маршруту, однако во внимание было учтено много пользовательских данных, а программные модули были не так адаптированы, как должны быть. Алогорифм, который устанавливает лучшие упражнения на шаге 3, довольно сложный. – Macros

+0

Да, я понял, что это был ответ. Но при правильном запросе вы можете загрузить все возможные матчи упражнений, а затем сузить его, организовав оставшиеся результаты и отображая этот список. Просто голосуйте за то, что вам не нужна фабрика узлов. – 2009-04-23 23:36:51