Drupal:count():参数必须是实现Countable的数组或对象

时间:2019-05-17 08:06:29

标签: php drupal

  

警告:count():参数必须是在invTranslate_translated_menu_link_alter()(来自\ sites \ all \ modules \ custom \ invTranslate \ invTranslate.module的第55行)中实现Countable的数组或对象。

invTranslate.module是一个自定义模块。

function invTranslate_translated_menu_link_alter(&$item) {
  static $nodeMenu;
  if ($nodeMenu === NULL) {
    if (arg(0) == 'node' && count(arg() == 3 && (arg(1) == 'add' || arg(2) == 'edit'))) {
      $nodeMenu = true;
      ...

第55行是: if (arg(0) == 'node' && count(arg() == 3 && (arg(1) == 'add' || arg(2) == 'edit'))) {。 请帮忙。

2 个答案:

答案 0 :(得分:1)

对我来说,似乎有一个简单的错字,但这取决于您的代码应该做什么。我将代码分成多行以提高可读性:

if (
    arg(0) == 'node'
    && count(arg() == 3   //the count method takes as param the bool from the row below too
    && (arg(1) == 'add' || arg(2) == 'edit'))
) {

它应该看起来像这样:

 if (
    arg(0) == 'node'
    && count(arg()) == 3   // add right bracket after arg()
    && (arg(1) == 'add' || arg(2) == 'edit')   // remove right bracket from here
) {

答案 1 :(得分:1)

  

arg()返回当前Drupal路径的组成部分。   例如,当在路径“ admin / structure / types”上查看页面时,arg(0)返回“ admin”,arg(1)返回“ structure”,而arg(2)返回“ types”。   https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/arg/7.x

在durpal中,节点的路径是这样的

  • / node / add / {node-type} /
  • / node / {nid} / edit
  • / node / {nid}

回顾一下代码: if (arg(0) == 'node' && count(arg() == 3 && (arg(1) == 'add' || arg(2) == 'edit')))

我认为,该条件仅适用于我提到的路径的前2条。因此,将代码更改为以下内容应会导致预期的行为: if (arg(0) == 'node' && count(arg()) == 3 && (arg(1) == 'add' || arg(2) == 'edit'))

count()仅应检查路径中是否有足够的组件。