Использование пользовательского модуля форматирования для вывода URI изображения


Я пытаюсь создать форматер, который печатает URI изображения вместо самого изображения. Моя проблема в том, что я не знаю, что должен вернуть форматер. Справочная информация, по-видимому, не работает при моей установке.

Итак, чего он ожидает в качестве возвращаемого значения? Вот что я пробовал:

function image_path_formatter($vars) {
    $element['content'] = $vars['#items'][0]['uri'];
    return $element;
}

Мое мнение имеет такое содержание:

<div><div class="contextual-links-region">
<div class="contextual-links-wrapper">
<ul class="contextual-links">
<li class="custom-formatters-edit first last">
<a href="/?q=admin/structure/formatters/list/image_path/edit&amp;destination=look-book">Edit formatter</a></li> 
</ul></div></div></div>
Author: cdmo, 2011-06-22

3 answers

Вам следует взглянуть на файловый модуль, который уже многое из этого делает

Для Drupal 7:

/**
 * Implements hook_field_formatter_info().
 */
function file_field_formatter_info() {
  return array(
    'file_default' => array(
      'label' => t('Generic file'),
      'field types' => array('file'),
    ),
    ...
  );
}


/**
 * Implements hook_field_formatter_view().
 */
function file_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();

  switch ($display['type']) {
    case 'file_default':
      foreach ($items as $delta => $item) {
        $element[$delta] = array(
          '#theme' => 'file_link',
          '#file' => (object) $item,
        );
      }
      break;
    ...
  }
  return $element;
}

Вы можете скопировать это и создать свою собственную функцию темы, все, что для этого нужно, - это распечатать uri, и все готово.

 2
Author: googletorp, 2011-06-23 18:09:54

Вот что сработало для меня:

В пользовательском коде PHP форматирования:

if (function_exists('image_path_formatter')) {
    return image_path_formatter($variables);
} else {
    return null;
}

И в template.php

function image_path_formatter($vars) {
    return $vars['#items'][0]['uri'];
}
 1
Author: Joren, 2011-06-22 21:49:35

Модуль пользовательских форматеров должен содержать пример того, как обрабатывать форматеры изображений с использованием PHP по умолчанию. Я только что включил версию 7.x-2.2, и у нее было это в форматах по умолчанию. Я бы заглянул туда, чтобы получить представление о том, как к этому подойти.

screenshot pointing to image(php) option

Когда вы нажимаете "Изменить", вот что вы получаете:

// Formatter settings.
$settings = $variables['#display']['settings'];

$element = array();
foreach ($variables['#items'] as $delta => $item) {
  $element[$delta] = array(
    '#type' => 'link',
    '#href' => file_create_url(image_style_path($settings['destination_image_style'], $item['uri'])),
    '#title' => theme('image_style', array(
      'style_name' => $settings['source_image_style'],
      'path' => $item['uri'],
    )),
    '#options' => array(
      'html' => TRUE,
    ),
  );
}
return $element;
 0
Author: cdmo, 2015-03-02 19:28:32