0

PHP フィルターをオンにして、PHP をブロック テキストに入れることができるようにしましたが、次の変数を使用します。

<?php print $node_url; ?>
<?php print $title ?>
<?php print $directory; ?>

次のエラーが発生します。

Notice: Undefined variable: node_url in eval() (line 2 of /modules/php/php.module(80) : eval()'d code).
Notice: Undefined variable: directory in eval() (line 2 of /modules/php/php.module(80) : eval()'d code).
Notice: Undefined variable: title in eval() (line 3 of /modules/php/php.module(80) : eval()'d code).

これが Drupal 6 で機能したことは知っています。何か提案はありますか?

――マーシャル

4

3 に答える 3

2

答えは、Drupal 7 テーマでは、ノード オブジェクトが必ずしも存在しないということです。図に行きます。したがって、自分で宣言し、独自の変数を作成する必要があります。それを操作するときは、「if isset()」ステートメント内で行う必要があります。したがって、変数を生成するには、次のようにします。

<?php
$directory = drupal_get_path('theme', 'THEME_NAME');
$node = menu_get_object();
if (isset($node)) {
    $nid = $node->nid;
    $node_url = 'node/' . $nid;
    $title =  $node->title;
    ...[rest of code goes here]
    ...[can't use variables derived from $node outside the 'if isset()']
}

?>

于 2013-01-22T05:57:47.327 に答える
1

About your variable << $directory >>, I suppose that you mean to get node alias: If you get already the NID, you cat get it in the follow way:

$path = drupal_get_path_alias('node/' . $node->nid);
于 2013-01-22T12:44:29.803 に答える
0

ブロックコンテンツは、テーマレイヤーが実行される前に作成されます。これは、ブロックが構築された時点では、これらの変数は使用できないことを意味します。自分でノードをロードし、必要な変数を作成する必要があります。

于 2013-01-22T09:04:33.133 に答える