【问题标题】:PHP Filter in Blocks doesn't recognize standard variables块中的 PHP 过滤器无法识别标准变量
【发布时间】:2013-01-21 22:00:14
【问题描述】:

我已经打开了 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 中有效。有什么建议吗?

--马歇尔

【问题讨论】:

    标签: drupal drupal-7 drupal-theming


    【解决方案1】:

    答案是在 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()']
    }
    

    ?>

    【讨论】:

      【解决方案2】:

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

      $path = drupal_get_path_alias('node/' . $node->nid);
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-27
          • 1970-01-01
          • 2017-04-27
          相关资源
          最近更新 更多