2

カスタム モジュールによって作成されたフィールドを自動的にグループ化しようとしていますが、うまくいきません。私の期待は、フィールド グループが作成され、既存のフィールドがそれに割り当てられることです。かなり標準的なように見えるので、フィールド グループ モジュールを使用しています。

http://drupal.org/node/1606758でアドバイスされているように、ctools 一括エクスポートを使用してコードを生成しました。次のコードをモジュールに移動しました。これが機能しない理由がわからない:

  • hook_field_group_info()の とhook_ctools_plugin_api()両方とも攻撃されています。追加したデバッグ フラグがログに記録されています。
  • 指定されたフィールドの名前は正しく、データベースに存在します。

私は何を間違っているのでしょうか?

========== Ctools Bulk Exporter から: ===========

これを nmc_directory.info に配置します

name = nmc_directory export module
description = Export objects from CTools
dependencies[] = field_group
package = Chaos tool suite
core = 7.x

これを nmc_directory.module に配置します

<?php

/**
 * Implements hook_ctools_plugin_api().
 */
function nmc_directory_ctools_plugin_api($module, $api) {
  if ($module == 'field_group' && $api == 'field_group') {
    return array('version' => 1);
  }
}

これを nmc_directory.field_group.inc に配置します。

<?php

/**
 * Implements hook_field_group_info().
 */
function nmc_directory_field_group_info() {
  $field_groups = array();

  $field_group = new stdClass();
  $field_group->disabled = FALSE; /* Edit this to true to make a default field_group disabled initially */
  $field_group->api_version = 1;
  $field_group->identifier = 'group_dir_phys_consumer_info|node|dir_physicians|form';
  $field_group->group_name = 'group_dir_phys_consumer_info';
  $field_group->entity_type = 'node';
  $field_group->bundle = 'dir_physicians';
  $field_group->mode = 'form';
  $field_group->parent_name = '';
  $field_group->data = array(
    'label' => 'Online Medical Providers Directory: Website (Consumer Information)',
    'weight' => '0',
    'children' => array(
      0 => 'dir_phys_gender',
      1 => 'dir_phys_category',
      2 => 'dir_phys_title',
      3 => 'dir_phys_fname',
      4 => 'dir_phys_lname',
      5 => 'dir_phys_suffix',
      6 => 'dir_phys_medfield_1',
      7 => 'dir_phys_medfield_2',
      8 => 'dir_phys_phone_public',
    ),
    'format_type' => 'fieldset',
    'format_settings' => array(
      'label' => 'Online Medical Providers Directory: Website (Consumer Information)',
      'instance_settings' => array(
        'required_fields' => 1,
        'classes' => '',
        'description' => '',
      ),
      'formatter' => 'collapsed',
    ),
  );
  $field_groups['group_dir_phys_consumer_info|node|dir_physicians|form'] = $field_group;

  return $field_groups;
}
4

1 に答える 1

2

今後の参考のために - このコード (およびアプローチ) は完全に機能します。

私の問題は、このモジュールが大きくなりすぎて (4 つのコンテンツ タイプ、60 以上のフィールド、6 つの語彙など)、私のローカルホストでの実行が非常に遅くなることです。ステージング サーバーで実行したところ、非常にうまく機能しました。ローカルホスト php.ini の最大実行時間を増やし、ローカルでも正常に動作するようになりました。

FWIW: /devel/reinstall (Devel モジュールから) を使用して、モジュール管理ページを経由するよりも少し速くモジュールを再インストールできました。これもタイムアウトしなかった理由はわかりませんが、そうではありませんでした。

編集: うーん..数日後、問題が完全にphpの実行時間に起因していたかどうかはわかりません。それは役割を果たしました(一部のフィールドは作成されませんでした+その他の問題)が、モジュールをアンインストールして再インストールすると、フィールドグループで散らばった結果が生成されます。

  • 一部のフィールド グループがまったく表示されない (DB の {field_group} テーブルにレコードがありません)
  • ただし、Bulk Exporter モジュールには、私のグループがエクスポート可能としてリストされます
  • 追加されたフィールド グループは、必ずしも指定された重みをその子に適用するとは限りません
  • モジュールをアンインストールすると、フィールド グループが削除されたように見えます (これは、この方法論に従います) 。
于 2013-02-28T19:45:49.053 に答える