Создать пакет программно?
=========================

Я пытался выяснить эту проблему разрешения пользователю динамично создать бланки запроса проекта (добавьте его собственные поля включая холмы отбрасывания, мультивыбирает, и т.д....). Пользователю нужен способ создать несколько типов запроса проекта (пакеты, возможно?), для различных подразделений. Я изобразил объект / отношения пакета идеально подойдут для этого. Таким образом, вот моя идея:

Используйте Схему API для определения моей базовой таблицы "проект". Используйте Объект API hook\_entity\_info (), чтобы сказать Drupal о моем новом объекте, указывая на него на таблицу "проекта". Теперь в этом рычаге я могу определить пакеты - который является большим. Но мне нужно, чтобы пользователь смог создать пакет. Где является entity\_create\_bundle ($entity_type, $bundle) вызовом?

Пример:

ТИП объекта: Проект (с общими полями, определенными в DB, и это fieldable),

Пакет: Проект в сфере ИТ, Проект HR - которые совместно используют общие поля из Проекта

project\_type таблица сохранит дополнительную группировку, в которой я нуждаюсь (запросы проекта на подразделения). 

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

Как я могу позволить пользователям создавать пакеты типа объекта "проекта"? 

Я пропускаю что-то или являюсь функциональностью не там [уже]?

 

**Исследование пакетов Узла по умолчанию**

Модуль Узла не создает "Статью", и "Основная страница" Связывает себя. После некоторого рытья я нашел определения для этих пакетов в стандартном файле установки профиля установки.

*/profiles/standard/standard.install*

```
  // Insert default pre-defined node types into the database. For a complete
  // list of available node type attributes, refer to the node type API
  // documentation at: http://api.drupal.org/api/HEAD/function/hook_node_info.
  $types = array(
    array(
      'type' => 'page',
      'name' => st('Basic page'),
      'base' => 'node_content',
      'description' => st("Use basic pages for your static content, such as an 'About us' page."),
      'custom' => 1,
      'modified' => 1,
      'locked' => 0,
    ),
    array(
      'type' => 'article',
      'name' => st('Article'),
      'base' => 'node_content',
      'description' => st('Use articles for time-sensitive content like news, press releases or blog posts.'),
      'custom' => 1,
      'modified' => 1,
      'locked' => 0,
    ),
  );

  foreach ($types as $type) {
    $type = node_type_set_defaults($type);
    node_type_save($type);
    node_add_body_field($type);
  }

  // clear the site cache

Несколько примечаний об этом коде

Это не использует [Объект API](http://drupal.org/project/entity)
st() функция должна только использоваться во время процесса установки Drupal
Узел содержит много из не поля Field API, в которых он обрабатывает node_type_save
Вызовы узла field_attach_create_bundle сказать Полевые модули о новом пакете

---

Создание пакета с Объектом API

Я не уверен, как Вы определили свои объекты, но если Вы использовали [Объект API](http://drupal.org/project/entity) затем, Ваш код создания пакета мог бы выглядеть примерно так:

$bundle = new stdClass();
$bundle->type = 'project_hr';
$bundle->label = t('HR Project');
$bundle->is_new = true;
$bundle->description = t("A super cool project");

$controller = new ProjectTypeController('project_type'); //assuming you defined this extension of EntityAPIController
$controller->save($bundle);

```

---

**Примечание об Объектах**

* Тип объекта является абстрактным базовым классом
* Пакет является расширенным классом типа объекта
* Поле является участником класса, свойством, переменной или полевым экземпляром
* Объект является объектом или экземпляром основы или расширенного класса

[Больше об объектах](http://drupal.org/node/1261744)

 

Я пытаюсь сделать что-то как этот, и похоже, что модуль Узла уже содержит код, как тогда, когда Вы создаете новый тип содержания, это создает новый пакет для объекта узла и добавляет поле "тела" к нему по умолчанию (использующий поле API). Все эти операции и формы (таблица пакетов, CRUD пакетов и и т.д.) сделаны вручную.

Благодаря разработчикам Drupal можно скопировать код, содержавшийся в модуле Узла.

Я думаю позже, что я могу опубликовать свою работу как drupal модуль для визуального создания объектов, и это - иерархия пакетов.