Drupal: count(): параметр должен быть массивом или объектом, который реализует Countable

Warning: count(): Parameter must be an array or an object that implements Countable in invTranslate_translated_menu_link_alter() (line 55 from \sites\all\modules\custom\invTranslate\invTranslate.module).

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'))) {. Пожалуйста помоги.

arg() == 3 && (arg(1) == 'add' || arg(2) == 'edit') — это логическое выражение, результатом которого будет либо истина, либо ложь. Использование count для true или false просто не имеет смысла.
04FS 17.05.2019 10:17

Можете ли вы сказать мне, как я могу изменить этот код на правильный код?

sailormoon 17.05.2019 10:22

@04FS просто удаляет "количество"? так что результат будет if (arg(0) == 'node' && (arg() == 3 && (arg(1) == 'add' || arg(2) == 'edit'))) {

sailormoon 17.05.2019 10:24

Это было бы наиболее вероятным предположением, да. (Угадайте, потому что нам не сказали, чего это должно достичь в первую очередь.)

04FS 17.05.2019 10:25

В зависимости от того, что arg() вернет, это может быть count(arg()) == 3

brombeer 17.05.2019 10:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
224
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Мне кажется, что это простая опечатка, однако это зависит от того, что должен делать ваш код. Я разделил код на несколько строк для лучшей читабельности:

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
) {

@sailormoon Пожалуйста, рассмотрите возможность голосования за этот ответ как окончательный (зеленая метка слева), если он помог вам решить проблему. Спасибо

Tatranskymedved 17.05.2019 12:22

Спасибо за помощь, окончательный ответ за вами.

sailormoon 23.05.2019 13:48

arg() Returns a component of the current Drupal path. When viewing a page at the path "admin/structure/types", for example, arg(0) returns "admin", arg(1) returns "structure", and arg(2) returns "types". https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/arg/7.x

В дурпале пути для узлов такие

  • /узел/добавить/{тип узла}/
  • /узел/{нид}/изменить
  • /узел/{нид}

Оглядываясь назад на код: if (arg(0) == 'node' && count(arg() == 3 && (arg(1) == 'add' || arg(2) == 'edit')))

Я думаю, что это условие должно выполняться только для первых двух путей, которые я упомянул. Таким образом, изменение кода на следующий должно привести к ожидаемому поведению: if (arg(0) == 'node' && count(arg()) == 3 && (arg(1) == 'add' || arg(2) == 'edit'))

count() должен только проверять, достаточно ли компонентов в пути.

Другие вопросы по теме