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

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

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

Пример:

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

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

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

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

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

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

6
19.01.2020, 19:11
2 ответа

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

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

/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 <em>basic pages</em> 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 <em>articles</em> 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

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

  1. Это не использует Объект API
  2. st() функция должна только использоваться во время процесса установки Drupal
  3. Узел содержит много из не поля Field API, в которых он обрабатывает node_type_save
  4. Вызовы узла field_attach_create_bundle сказать Полевые модули о новом пакете

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

Я не уверен, как Вы определили свои объекты, но если Вы использовали Объект API затем, Ваш код создания пакета мог бы выглядеть примерно так:

$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);

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

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

Больше об объектах

14
24.01.2020, 22:50
  • 1
    Heh - благодарит за это... это был почти год теперь начиная с моего класса Краеугольного камня Информатики, который является, когда мне было нужно это - НО я закончил тем, что делал что-то подобное Вашему решению :). –  Jack 29.01.2013, 05:53
  • 2
    Ya я знаю, что скрываюсь' по старому вопросу, но я нашел это Google выяснения тот же сам. Я ответил на это больше для моего собственного преимущества (и другие аналогично мыслящие Сотрудники Google), чем Ваше :) –  tmsimont 29.01.2013, 18:25

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

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

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

2
24.01.2020, 22:50

Теги

Похожие вопросы