20

很有可能我只是在寻求帮助来查找 drupal (7) 中已经存在的函数的名称,但有时文档有点难以浏览。希望有人可以帮助我。

我有一个具有自定义字段的节点。

我在模板中工作field--mycustomcontenttype.tpl.php,因此试图找到输出的 PHP 函数的名称和带有图像样式的图像字段。

mycustomcontenttype是具有以下附加字段的节点:

[field_image] => Array
(
    [und] => Array
    (
        [0] => Array
        (
            [fid] => 51
            [alt] => ImageAltText
            [title] => 
            [width] => 150
            [height] => 150
            [uid] => 29
            [filename] => myimagename.jpg
            [uri] => public://myimagename.jpg
            [filemime] => image/jpeg
            [filesize] => 8812
            [status] => 1
            [timestamp] => 1339445372
            [uuid] => a088ea8f-ddf9-47d1-b013-19c8f8cada07
            [metatags] => Array
        (
    )
)

所以我可以使用一个(丑陋的)手工滚动函数来显示图像,该函数采用在中找到的值$item['#options']['entity']->field_image并替换public://实际的服务器路径,然后我也可能想要加载正确的图像drupal 图像样式(缩略图、自定义样式等)

可悲的是,我只是不知道像这样工作的函数的名称是什么unknown_function_name_drupal_image_print($item['#options']['entity']->field_image, 'thumnail');

有没有人可以帮我找到这个?

4

10 回答 10

23

你正在寻找image_style_url(style_name, image_url);

例如:

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['filename']).'" />'?>

编辑

正如所指出的,您还可以在“管理显示”页面中为内容类型设置图像样式,然后使用渲染输出。

<?php print render($content['field_image']); ?>
于 2012-06-21T15:49:20.400 回答
14

我会结合使用field_get_itemsfield_view_value来做到这一点。

例如:

    <?php

    // In some preprocessor...
    $images = field_get_items('node', $node, 'field_image');
    if(!empty($images)) {
      $image = field_view_value('node', $node, 'field_image', $images[0], array(
        'type' => 'image',
        'settings' => array(
          'image_style' => 'custom_image_style' // could be 'thumbnail'
        )
      )
     );
    }
    $variables['image'] = $image;

    // Now, in your .tpl.php
    <?php print render($image); ?>

我在这里写了一篇关于字段访问和这件事的文章

祝你好运。

于 2013-04-01T13:48:15.950 回答
12

SpaceBeers 的回答是正确的——你可以用这种方式打印图像。但在 Drupal 方面,这很糟糕。您的语言未定义,如果它是多值字段,则仅直接使用第一个字段。此外,您正在对 Drupal 的一些好东西进行硬编码,例如使用 UI 更改图像样式。

<?php print render($content['field_image']); ?>

这将以适当的尺寸(在 img 标签中)、alt 标签打印图像,并始终尊重您在 mycustomcontenttype 节点类型的“管理显示”选项卡中设置的内容。

于 2012-06-21T16:37:50.627 回答
8

我用这个:

print theme('image_style', array('path' => [image uri from field], 'style_name' => [image style]));

您还可以包含一个“属性”数组变量,其中包含(例如)类、alt 和标题的元素。我认为这是允许您选择图像样式的更好选择,同时仍使用 Drupal(或您的主题)的默认图像渲染。

于 2012-06-22T01:14:57.653 回答
3

你应该使用

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['uri']).'" />'?>

代替

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['filename']).'" />'?>
于 2013-10-07T17:02:15.007 回答
1

我认为 Ayesh K 的答案是将字段打印到页面的首选 Drupal 方式。更容易阅读,并保留您对 UI 中的图像所做的任何操作/预设。

您可以将其分解,但似乎只适用于狭窄的用例。

于 2012-06-21T17:22:07.193 回答
1
<?php
global $base_url;
$nid=6;//node id
$node=node_load($nid);
echo '<div style="margin-right:350px;">';
echo "<marquee>";
foreach($node->field_image_gallery['und'] as $v){
$image=$v['uri'];
$image_path=explode("public://",$image);
$url_path=$base_url.'/sites/default/files/'.$image_path[1];
echo '<img src="'.$url_path.'" width="100" height="100">&nbsp;';
 }

echo "</marquee>";
echo "</div>";
?>
于 2017-04-19T07:06:08.013 回答
0

这可以这样做:

   $style='full_width';
   $path=$node->my_img_field['und']['0']['uri'];
   $style_url = image_style_url($style, $path);
   print "<img src=".file_create_url($style_url)." >";
于 2015-10-05T13:53:55.447 回答
0
 $field_image = field_view_field('node', $promoNode, 'field_image');
 $variables['promo_image'] = render($field_image);

渲染:

<div class="field field--name-field-image field--type-image field--label-above">
  <div class="field__label">Image:&nbsp;</div>
  <div class="field__items">
      <div class="field__item even">
        <img typeof="foaf:Image" 
             src="http://domain/sites/domain/files/promo1.png"
             width="360" 
             height="301"
             alt="Promotional Image"
             title="Promotional Image Title">
      </div>
  </div>
</div>

注意:可以使用字段的内容类型管理显示设置删除 label-above 类,方法是将 Label 设置为 ,但这对我现在不起作用,所以我只是使用 CSS 来隐藏 . field__label 类。

于 2016-06-08T08:13:15.720 回答
-2

这对我将图像添加到我的搜索结果页面很有用:

<?php if ($result['node']-> field_image): ?>
  <?php
  $search_image_uri = $result['node']-> field_image['und'][0]['uri'];
  // assuming that the uri starts with "public://"
  $search_image_locate = explode('//', $search_image_uri);
  $search_image_filepath = '/sites/actual/path/to/public/' . $search_image_locate[1];
  ?>
  <div class="search-image">
    <img src="<?php print $search_image_filepath; ?>" />
  </div>
<?php endif; ?>
于 2014-05-23T19:07:21.267 回答