web-dev-qa-db-ja.com

画像で配列をレンダリングする

この配列はPHPにあります

$link = array(
    '#type'    => 'link',
    '#title'   => 'link1',
    '#href'    => 'http://www.link1.example',
    '#suffix'  => '<br />',
  );

render()関数を呼び出すと、正しいhtmlが取得されます

<a href="http://www.link1.example">link1</a>

画像をリンクとして含めるために、上記のレンダー配列をどのように変更できますか?

言い換えれば、これをrender()関数からの出力として欲しい

<a href="http://www.link1.example"><img src='images/link1img.png' /></a>

Theme( 'image'、$ array)関数を使用しようとしましたが、theme()の結果がrender()に渡されると、ページに画像が表示されず、実際のHTMLコードが表示されます。

3
user16194

「リンク」要素タイプの事前レンダリング関数は drupal_pre_render_link() ...ドキュメントを見て、次のパラメーターを渡すことができます。

  • #title:l()の引数として渡すリンクテキスト。
  • #href:引数としてl()に渡すURLパスコンポーネント。
  • #options:(オプション)l()に渡すオプションの配列。

_'html' => TRUE_をオプションとして渡すことにより、l()で作成したリンクにHTMLを表示するように強制できます。これにより、レンダー配列を通じて同じことができるようになります。

_$image = theme('image', array('path' => 'images/link1img.png'));

$link = array(
  '#type'    => 'link',
  '#title'   => $image,
  '#href'    => 'http://www.link1.example',
  '#options' => array('html' => TRUE, 'title' => 'link1'),
  '#suffix'  => '<br />',
);
_
4
Clive

単一のレンダー配列を作成して、レンダープロセス全体でオプションで変更できるようにすることをお勧めします。

$image = array(
  '#theme' => 'image_formatter',
  '#item' => array(
    'uri' => '/images/link1img.png',
  ),
  '#suffix'  => '<br />',
  '#path' => array(
    'path' => 'http://www.link1.example',
    'options' => array(
      'attributes' => array(
        'title' => 'link1',
      ),
    ),
  ),
);

にレンダリングする:

<a href="http://www.link1.example" title="link1"><img typeof="foaf:Image" src="/images/link1img.png" alt="" /></a><br />

画像がフィールドまたはファイルモジュールを使用してアップロードされている場合、image_formatterは、画像スタイルを適用するためにも使用できます。 thumbnail

$image = array(
  '#theme' => 'image_formatter',
  '#image_style' => 'thumbnail',
  '#item' => array(
    'uri' => 'public://images/link1img.png',
  ),
  '#suffix'  => '<br />',
  '#path' => array(
    'path' => 'http://www.link1.example',
    'options' => array(
      'attributes' => array(
        'title' => 'link1',
      ),
    ),
  ),
);

にレンダリングする:

<a href="http://www.link1.example" title="link1"><img typeof="foaf:Image" src="http://DOMAIN.TLD/sites/SITENAME/files/styles/thumbnail/public/field/images/link1img.png?itok=Bo4ZpxnG" alt="" /></a><br />

詳細については、 https://api.drupal.org/api/drupal/modules!image!image.field.inc/function/theme_image_formatter/7 を参照してください

1
lmeurs