需要将节点的路径更改为CCK值

时间:2013-05-02 20:51:07

标签: drupal-7 drupal-modules

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

我已将以下预处理函数添加到.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

我是在正确的道路上吗?这个错误究竟是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

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

  • source:内部系统路径
  • 别名:网址别名
  • 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'];无需加载节点。