如何在不知道字段名称的情况下从节点获取第一个图像字段?

时间:2011-07-11 21:09:14

标签: drupal drupal-6 imagefield

我正在处理的网站使用了许多内容类型,而且几乎所有内容都使用了一个或多个图像字段。 内容类型之间不共享图像字段,因此存在大量图像字段。

我需要的是从节点获取第一个图像字段,假设有更多图像字段链接到节点而不知道任何这些字段的名称。第一个被认为是weight较低的那个。

1 个答案:

答案 0 :(得分:1)

这应该为每个内容类型构建一个“最轻”的图像字段数组。

<?php
module_load_include('inc', 'content', 'includes/content.node_form');
$content_types = array('page', 'story', 'product', 'some_content_type');

$lightest_imagefields = array(); // arranged by content type
foreach ($content_types as $content_type_name) {
  $content_type_data = content_types($content_type_name);
  $last_weight = NULL;
  foreach ($content_type_data['fields'] as $field_name => $field_data) {
    if ($field_data['widget']['type'] == 'imagefield_widget' && (is_null($last_weight) || (int)$field_data['widget']['weight'] < $last_weight)) {
        $lightest_imagefields[$content_type_name] = $field_name;
        $last_weight = (int)$field_data['widget']['weight'];
    }
  }
}
/** Hypothetical Usage:
 * $node = load_some_node_i_want();
 * $node->$lightest_imagefields[$node->type]; // Access this node's lightest imagefield.
 */

然后当您加载一个节点,例如“产品”内容类型时,您知道哪个图像字段最轻(即$node->$lightest_imagefields[$node->type])。

希望它有所帮助。 (尽管在使用之前测试它!)