0

我有一个内容类型已变成名为“地球新闻”的功能。它包括一个可选的 CCK 字段,称为“源 URL”。当 CCK 字段不为空时,我希望网站访问者能够点击预告片并直接访问该 URL。

我为这个特性在 .module 文件中添加了以下预处理函数:

function earth_news_preprocess_node(&$vars) {
  $node = node_load($vars['nid']);
  $path = drupal_lookup_path('alias','node/' . $node->nid);
  $url = $node->field_se_news_source['und'][0]['url'];

  path_save(array($path,$url));
}

path_save 抛出了一个致命错误:

Only variables can be passed by reference

我在正确的道路上吗?那个错误是怎么回事?

谢谢。

4

1 回答 1

0

该错误是由于path_save()期望通过引用传递的单个参数这一事实引起的。在这种情况下,您不能使用文字数组;您可以传递包含数组的变量,或返回引用的函数返回的值,但预期作为参数的值需要是包含以下键的关联数组:

  • 来源:内部系统路径
  • 别名:网址别名
  • pid:(可选)唯一路径别名标识符
  • 语言:(可选)别名的语言

在您的情况下,代码应如下所示。

function earth_news_preprocess_node(&$vars) {
  $node = $vars['node'];
  $path = array(
    'alias' => drupal_lookup_path('alias','node/' . $node->nid),
    // You can also use the following line instead of the previous one.
    // 'alias' => drupal_get_path_alias('node/' . $node->nid),
    'source' => $node->field_se_news_source['und'][0]['url'],
  );

  path_save($path);
}

作为旁注,template_preprocess_node()使节点对象可用$vars['node'];无需加载节点。

于 2013-05-03T11:18:43.563 回答