特定のフィールドタイプのフィールドを取得するにはどうすればよいですか?


14

私はとエンティティとのバンドルでフィールドのリストを取得する方法を見てきたfield_info_instances()field_info_field()、私は特定のタイプのすべてのフィールドを取得する方法が表示されません。

私はこれを調理して、私が望むことを正確に行うことができました:

function field_get_fields_of_type($type) {
  $fields_info = field_info_instances();
  $return = array();
  foreach ($fields_info as $entity => $bundles) {
    foreach ($bundles as $bundle => $fields) {
      foreach ($fields as $field_name => $info) {
        $more_info_because_type_isnt_included = field_info_field($field_name);
        if ( $more_info_because_type_isnt_included['type'] == $type) {
          $return[$field_name] = $more_info_because_type_isnt_included;
        }
      }
    }
  }
  return $return;
}

dpm(field_get_fields_of_type('entityreference')); // prints out all entityreference fields

しかし、それは非常に多くのコードであり、おそらくフィールドAPIを介して到達可能なものを取得するための非常に多くのループのようです。

私が探しているデータをより効率的に取得するフィールドAPI関数を知っている人はいますか?

回答:


23

先日これに遭遇し、この質問を見たことを思い出したので、ここでそれはどういうわけか非常に未知の機能です(ブログなどで言及されている人を見たことがあります):

field_read_fields()

およびコンパニオン関数:

field_read_instances()

たとえば、すべての分類用語フィールドを取得します。

$taxonomy_fields = field_read_fields(array('type' => 'taxonomy_term_reference'));

または、マシン名がfield_image次のフィールドのインスタンスを取得します。

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.