Создание контента Drupal CCK программно / через API

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

  1. Загрузить все упражнения в массив
  2. Загрузить личную информацию пользователя (введенную ранее)
  3. Определите наиболее подходящие упражнения
  4. Создать новый тип содержимого программы
  5. Сохранить программу

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


person Macros    schedule 21.04.2009    source источник


Ответы (4)


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

Шаг 1: вы можете использовать node_load ($ nid) для всех упражнений. Шаг 2: вы можете использовать user_load ($ uid). Шаг 4/5. Я бы создал новый $ node = stdClass (); объект и заполните атрибуты правильными данными, затем выполните node_save ($ node); это присвоит ему $ node-> id и т. д.

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

Фил

person Community    schedule 21.04.2009
comment
Я планирую написать для этого модуль - как работает node_save? будет ли это просто сохранено в таблице узлов или на самом деле также будут созданы записи для программы? - person Macros; 21.04.2009
comment
node_save работает с объектом узла и сохраняет его в таблицах node и node_revisions, а затем для него вызываются все остальные хуки модуля. - person ; 21.04.2009

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

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

person Eaton    schedule 21.04.2009

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

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

person greggles    schedule 21.04.2009

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

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

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

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

Мысль.

person Community    schedule 23.04.2009
comment
Изначально мы пошли по этому пути, однако при этом учитывается много пользовательских данных, и программы не были настолько адаптированы, как следовало бы. Алгоритм, который устанавливает лучшие упражнения на шаге 3, теперь довольно сложен. - person Macros; 23.04.2009
comment
Да, я подумал, что это был ответ. Но с правильным запросом вы можете загрузить все потенциальные совпадения упражнений, а затем сузить его, упорядочив оставшиеся результаты и отобразив этот список. Просто голосование за то, что фабрика узлов не нужна. - person ; 24.04.2009