Использование пользовательского модуля форматирования для вывода 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&destination=look-book">Edit formatter</a></li>
</ul></div></div></div>
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, и все готово.
Вот что сработало для меня:
В пользовательском коде 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'];
}
Модуль пользовательских форматеров должен содержать пример того, как обрабатывать форматеры изображений с использованием PHP по умолчанию. Я только что включил версию 7.x-2.2, и у нее было это в форматах по умолчанию. Я бы заглянул туда, чтобы получить представление о том, как к этому подойти.
Когда вы нажимаете "Изменить", вот что вы получаете:
// 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;