只应通过引用传递变量

时间:2014-08-27 22:52:27

标签: php drupal drupal-7

我继承了Drupal 7网站的维护,我没有PHP经验,我需要一些帮助。我刚刚将Drupal更新为7.31,并且在.inc文件的第43和86行收到错误“只有变量应该通过引用传递...”。

这是第43行:     $ item = array_shift(array_values($ data));

这是第86行:     $ item = array_shift(array_values($ data));

任何人都可以帮助我吗?

我不知道这是否允许,但这里是.inc文件的代码

<?php

$plugin = _cdd_core_content_type_plugin('nauticus_core', 'menu_full_leaf', 'Page: menu leaf', array(
'description' => 'Add menu children',
), array(
'override_title'      => 1,
'override_title_text' => ''
), 'Sail Nauticus');

function nauticus_core_menu_full_leaf_content_type_plugin_render($subtype, &$conf, $panel_args) {
$trail = menu_get_active_trail();
$menu  = '';
if (is_array($trail)) {
$leaf = array_pop($trail);
if (isset($leaf['menu_name'])) {
  $menu_name = $leaf['menu_name'];
  if ($menu_name !== 'navigation') {
    $depth = $leaf['depth'];
    $p1    = $leaf['p1'];

    $data = menu_tree_page_data($menu_name, $depth + 1);
    foreach ($data as $i => $item) {
      if ($item['link']['mlid'] !== $leaf['plid']
        && !($leaf['plid'] == 0 && ($item['link']['mlid'] == $leaf['mlid']))
      ) {
        unset($data[$i]);
      }
    }

    if (sizeof($data) > 1) {
      $menu = menu_tree_output($data);
      foreach ($menu as $i => $item) {
        if (isset($item['#original_link'])) {
          if ($item['#original_link']['mlid'] !== $p1) {
            if (isset($menu[$i]['#below'])) {
              $menu[$i]['#below'] = array();
            }
          }
        }
      }
    }
    elseif (sizeof($data) == 1) {
      $item = array_shift(array_values($data));
      if (isset($item['below']) && !empty($item['below'])) {
        $menu = menu_tree_output($item['below']);
        foreach ($menu as $i => $item) {
          if (isset($item['#original_link'])) {
            if ($item['#original_link']['mlid'] !== $p1) {
              if (isset($menu[$i]['#below'])) {
                $menu[$i]['#below'] = array();
              }
            }
          }
        }
      }
    }
  }
}
}

return $menu;
}

function nauticus_core_menu_full_leaf_content_type_plugin_title($subtype, &$conf, $panel_args) {
$title = 'Navigation';

$trail = menu_get_active_trail();
if (is_array($trail)) {
$leaf = array_pop($trail);
if (isset($leaf['menu_name'])) {
  $menu_name = $leaf['menu_name'];
  if ($menu_name !== 'navigation') {
    $depth = $leaf['depth'];
    $p1    = $leaf['p1'];

    $data = menu_tree_page_data($menu_name, $depth + 1);
    foreach ($data as $i => $item) {
      if ($item['link']['mlid'] !== $leaf['plid']
        && !($leaf['plid'] == 0 && ($item['link']['mlid'] == $leaf['mlid']))
      ) {
        unset($data[$i]);
      }
    }

    if (sizeof($data) >= 1) {
      $item = array_shift(array_values($data));
      if (isset($item['link']) && !empty($item['link'])) {
        if (isset($item['link']['link_title'])) {
          $title = $item['link']['link_title'];
        }
      }
    }
  }
}
}

return $title;
}

2 个答案:

答案 0 :(得分:0)

array_shift要求第一个参数是引用传递,array_values返回一个数组。

将您$item = array_shift(array_values($data));的那些行更改为

$item = array_values($data);
$item = array_shift(&$item);

&表示变量通过引用传递。这应该可以解决你的问题。

如果不起作用,只需删除&amp;。

答案 1 :(得分:0)

更改

$item = array_shift(array_values($data));

$tmp = array_values($data);
$item = array_shift($tmp);