4

$nodeIdをロードして結果をデフォルト(フル)ビューで出力するAjaxハンドラースクリプトがあります。

$node = node_load($input);
$prerendered_node = node_view( $node, 'default' );
...

次に、ティーザー(要約またはトリミング)も表示する必要があります。

私はこれまでこれを試しましたが、成功しませんでした(要約は内容で埋められています):

1.
$item = $node->body['en'][0];
$output = field_view_value('node', $node, 'body', $item, 'Teaser');
echo $output; (blank)

2. echo $node->body['eng']['0']['summary']; (blank)

この質問からの解決策ですが、機能していません:

3. $output = truncate_utf8(strip_tags($node->body['eng']['0']['summary']),200,true,true);
echo $output; (blank)

不思議なのは、(本体の)、、およびその他の要素をvar_dump($node->body['eng']['0'])含む表示と配列であり、必要な値が入力されていることです。しかし、例2のように、直接アクセスできないため、表示されて空白になっています。valuesummaryclean_summarysummary

ヒントをお願いします?

ありがとうございました。

4

2 に答える 2

10

値に直接アクセスせずにこれを行う正しい方法(つまり、国際化されたバージョンを自動的に取得する)を以下に示します。

$node = node_load($nid);
$body = field_get_items('node', $node, 'body');
$teaser = field_view_value('node', $node, 'body', $body[0],'teaser');

$ teaser値を出力するには、それをrender()関数に渡す必要があります

print render($teaser);

JC

于 2012-03-07T15:09:58.987 に答える
5

これは多言語サイトだと思います。そうでなければ、探していたもの$node->body['und'][0](つまりund、未定義の言語コード)が見つかるでしょう。

Teaser最初のソリューションは機能するはずです。代わりに使用したのはあなただけですteaser。表示モードでは大文字と小文字が区別されると確信しています。また、$node->body['en'][0](の言語コード)を持っていますが、他のすべての例でen言語コードを使用しています...それが問題になる可能性がありますか?eng

2番目のソリューションは、$node->body['eng']['0']['summary']空でない場合は単に機能する必要があるため、正確な結果が得られていることをもう一度確認します(たとえば、呼び出した直後var_dump()の出力を調べて、公正なテストにします)。var_dump()$node = node_load($input);

同様に、3番目のソリューションが空白の文字列を出力している場合、それは$node->body['eng']['0']['summary']絶対に空でなければならないことを意味します。

develモジュールをインストールし、関数を使用して、dpm()検査用にオブジェクト/配列の適切にフォーマットされた階層ビューを印刷することを強くお勧めします。それができない場合、Drupal7debug()には同様の機能があります。これらの関数の両方の出力は、標準のDrupalメッセージスペースに出力されます。

お役に立てば幸いです。

于 2011-08-31T17:56:50.740 に答える