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

关于您的变量 << $directory >>,我想您的意思是获取节点别名:如果您已经获得了 NID,您可以通过以下方式获取它:

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

块内容是在主题层生效之前创建的。这意味着在构建块时,这些变量不可用。您必须自己加载节点并创建所需的变量。

于 2013-01-22T09:04:33.133 回答