Как получить первое поле изображения из узла, не зная имени поля?

Сайт, над которым я работаю, использует множество типов контента, и почти все они используют одно или несколько полей изображения. Поля изображения не распределяются между типами контента, поэтому их большое количество.

Что мне нужно, так это получить первое поле изображения из узла, предполагая, что есть больше полей изображения, связанных с узлом, и не зная имени любого из этих полей. Первым считается тот, у которого weight ниже.


person ovi    schedule 11.07.2011    source источник


Ответы (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]).

Надеюсь, поможет. (Однако проверьте его перед использованием!)

person Alexander    schedule 11.07.2011
comment
На самом деле я не тестировал код, но понял его логику, так что теперь я могу без проблем собрать свой собственный код. Благодарю вас! - person ovi; 13.07.2011