ビューのPHPを使用してフィールドの結果を書き換える方法


7

ビューのフィールドを書き換えるためにビューのPHPを使用しています。すべての変数にアクセスできますが、ビルドモードを持つ変数にアクセスできます。私の場合、私はContent:Nodeフィールド(任意の表示に従って構築することができます)を持っています$row->nodefield。これは変数を使用してアクセスできる必要があります。ただし、その変数の内容は常に空です。他の変数を試してみましたが、ビルドモードのすべてのフィールドがViews PHPでレンダリングされません。

ここに画像の説明を入力してください

これは設計上の問題ですか、それとも何か不足していますか?

Drupal 7とViews 3を使用しています

編集

使用可能な値に対してdpm()を使用すると、次のものが返されます。

dpm($行)

ここに画像の説明を入力してください

dpm($ data)

ここに画像の説明を入力してください

回答:


6

「出力コード」セクションの上$dataで、「値」フィールドの変数を確認する必要があります。

通常dpm($data)、必要なフィールドを見つけるだけです。次に、それを$static['myvalue']変数に保存して、「出力コード」フィールドで使用できます。

混乱を招きますが、何らかの理由で$row->xxx「出力コード」セクションの変数だけを試すと、変数が空になるか、ノードIDに設定されます。


ありがとうございました。私はこれを初めて使用するので、さらに助けてください。dpm($data)値フィールドにコピーすると、Viewsが「call to undefined function dpm()」エラーを返します
znat

OK。DPMはdevel関数であるため、develモジュールがインストールされていないと機能しません。それをインストールするか、単にprint_r($ data)を使用してください。
チャンスG

該当するコンテンツは見つかりませんでした。(私の編集を参照)$ rowオブジェクトのすべてのフィールドがnullのようです。$ viewや$ handlerなどの他の変数を試しましたが、成功しませんでした。ただし、トークン[nodefield]は結果の書き換えで使用できるため、どこかにあるはずです。他のアイデアは?
znat

3

$rowビュー内の利用可能な変数アイテムは、フィールド値を取得するのに一種の役に立たないものです。ただしnoad_load、必要なデータを取得するためにを使用する必要はありません。まず、いつものように、書き換えたいフィールドの出力を非表示にしてから、PHPフィールドの[出力コード]フィールドで次の$dataように使用できます。

<?php echo check_markup($data->field_field_body[0]['rendered']['#markup'], 'nitf_body'); ?>

この場合、NITFエクスポートで使用するために、コンテンツから許可されていないタグと属性を削除します。の内容がわからない$data場合は、もちろんそれprint_r($data)を確認できます。


「最初に、いつものように、書き換えたいフィールドの出力を非表示にする」とはどういう意味ですか?書き換えたいフィールドの[表示から除外]チェックボックスを使用していますか?
アントニオ

はい。フィールドの値を取得して後続のカスタムフィールドで使用する場合は、常に「ディスプレイから除外」を使用します。
Scott Lahteine、2014年

1
を使用$data->field_field_body[0]['raw']['value']して生の値を取得できます。
user2534880 2015

1

追加のヒント:$ data配列には実際に生のノードデータが含まれており、印刷できます。しかし、正しくレンダリングするには、field_view_fieldなどの関数を使用してフィールドを処理する必要があります。


1

これを内部ビューで実行しようとしていますか?PHPグローバルを使用するのではなく、ビューテンプレート自体にテーマを設定しないのはなぜですか?print_rがビューフィールド内で機能するかどうかはわかりません。それが私なら、テーマをクリックするだけです->情報、views-view-field--MyViewName.tpl.phpのようなものが表示されます

(編集、明確化)ビューモジュールのテーマフォルダーの下で、「views-view-field.tpl.php」をコピーし、「views-view-field--MyViewName.tpl.php」に名前を変更して、/ templatesフォルダーの下に置きますあなたのサイトでそれら。ファイルには、次のようなものが表示されます

<?php print $output; ?> 

あなたはそれを削除してすべてのフィールドを手動で追加することができます

<div class="MyPrettyTitle"><?php print $row->_field_data['nid']['entity']->title; ?></div> 
<div class="MyNodeBody">
<?php print $row->_field_data['nid']['entity']->body['und'][0]['value'];?>
</div>

etc.または、$ outputを必要なものでラップします。

また、私はDEVELであまり運がなかったので、常に次のように使用します。

<?php print var_dump($row);?> 

次に、ページのソースを見て変数を取得します。多分私はただDEVELを間違って使用していますが、通常の古いPHPのvar_dumpを使用すると、各行の変数をはるかに簡単に取得できます。


これにより、行が重複します。
user219492 2014

0

解決策を見つけるために2日間を費やしました。最も簡単な方法は、「Views Php Module」を7.x-2.x-devに更新することです。メンテナは、2.xバージョンでこの問題を修正しました。

ここからダウンロードできます(必ず7.x-2.x-devをダウンロードしてください):https : //www.drupal.org/project/views_php

希望は誰かを助けることができます。


0

PHPコードをデータベースに保存しないでください(View PHPを使用すると、データベースを保存できます)。代わりにViewsフックを使用して結果を変更します。


こんにちは@ssibal、そして貢献してくれてありがとう。これを避けるべき理由を説明できますか?投稿の品質が大幅に向上します。
Neograph734
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.