web-dev-qa-db-ja.com

NID(ノードID)を使用してビューの行IDをレンダリングする

ビューのフィールドとしてNID(ノードID)を簡単に追加し、フォーマットされていない一般的なビューの行クラスの置換パターンを使用して、ビュー行のクラスとしてレンダリングできます。 (画面キャプチャを参照)。

enter image description here

ただし、NIDを各行の[〜#〜] id [〜#〜]としてレンダリングして、私が行っている特別なテーマで使用したいと思います。 devel themerを使用すると、テンプレートがviews-view-unformatted.tpl.phpもちろん、このテンプレートを自分のビューに固有のカスタム名でテーマのテンプレートフォルダーにコピーしてから、テーマを設定できます。

行クラスをレンダリングするテンプレート内の関連するコード行は次のとおりです。

  <div<?php if ($classes_array[$id]) { print ' class="' . $classes_array[$id] .'"';  } ?>>

それを次のように変更した場合:

<div<?php if ($classes_array[$id]) { print ' class="' . $classes_array[$id] .'"';  } ?> 
    id="<?php print $fields['nid']->content ?>">

...ただし、ビュー行のこのレベルではフィールドを使用できないと思うので、これは機能しません。

だから本質的に今私のレンダリングされた出力は:

<div class="views-row views-row-1 views-row-odd views-row-first mynid-63">
<div class="views-row views-row-2 views-row-even mynid-64">

...なりたいとき

<div class="views-row views-row-1 views-row-odd views-row-first" id="mynid-63">
<div class="views-row views-row-3 views-row-even" id="mynid-64">

私の質問、関連付けられているNIDを、idとして必要な場所にレンダリングする方法はありますか?

5
Danny Englander

ほとんどのビューテンプレートでは、_$view_オブジェクト全体を使用できます。したがって、行にnidフィールドがあると仮定すると、次のようなものでそれにアクセスできるはずです。

_$view->result[$id]->nid
_

だから、与える

_id="my-nid-is-<?php print $view->result[$id]->nid; ?>">
_

テンプレートで試してください。

これが正確に機能しない場合は、テンプレートの上部にあるprint_r($view->result);を使用すると、作業対象を簡単に確認できます。

9
Jimajamma

NIDは、クラス文字列の最後にあるフォーマット設定を介して追加されます。 '$ classes_array [$ id]

クラス文字列の最後のクラス(ビューを介して追加されたNid)を取得します。次に、クラスの後の行に$ lastを適切なIDとして追加します

これを次のように変更します。

<div<?php if ($classes_array[$id]) { print ' class="' . $classes_array[$id] .'"';  } ?>>

に:

<div<?php if ($classes_array[$id]) { 
    $class_string = explode(' ', $classes_array[$id]);
    $last = end($class_string); 
    print ' class="' . $classes_array[$id] .'"' . ' id="' . $last . '"';  
 } ?>>
1
jorisx