it-swarm-ja.com

D7レンダー配列のリンクにテーマを設定する方法は?

私はこれを試しています:

        $content[] = array(
          '#theme' => 'link',
          '#text' => $row->title,
          '#path' => $base_path . 'node/' . $row->nid,
          '#attributes' => array('attributes' => array('title' => $row->title)),
          '#prefix' => '<h3>',
          '#suffix' => '</h3>',
        );

しかし、Drupalは、「drupal_attributes()に渡されるArg 1は配列でなければならず、nullが指定されている必要がある」と不平を言っています。私の配列は正常に見えますか?...またはxD

これが API doc です。

5
Merrick

theme_link()関数は、l()関数と少し似ています。属性配列は#optionsプロパティ内にある必要があります。

$link = array(
  '#theme' => 'link',
  '#text' => $row->title,
  '#path' => $base_path . 'node/' . $row->nid,
  '#options' => array('attributes' => array('title' => $row->title)),
  '#prefix' => '<h3>',
  '#suffix' => '</h3>'
);

echo render($link);
8
Clive

Cliveの投稿を編集したかったのですが、拒否されました:(


Andy が指摘したように、l()の代わりにtheme_linkを使用することはお勧めしません。 drupal_pre_render_link() を使用すると、レンダリング可能な配列がきれいになります。

 $link = array(
  '#type'  => 'link',
  '#title' => $row->title,
  '#href'  => 'node/' . $row->nid,
);

また、#markupを使用して「簡単で迅速な修正」ソリューションを利用することもできます(ただし、しないでください)。

$link = array(
  '#markup' => l($row->title, 'node/' . $row->nid),
);
3
JudaPriest

あなたのコードは読むべきだと思います

'#attributes' => array('title' => $row->title),

common.inc でのドキュメントの表現は少し不明瞭に思われますが、例については drupal_attributes() のドキュメントを参照してください。

1
keithm