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'))) {.
Пожалуйста помоги.
Можете ли вы сказать мне, как я могу изменить этот код на правильный код?
@04FS просто удаляет "количество"? так что результат будет if (arg(0) == 'node' && (arg() == 3 && (arg(1) == 'add' || arg(2) == 'edit'))) {
Это было бы наиболее вероятным предположением, да. (Угадайте, потому что нам не сказали, чего это должно достичь в первую очередь.)
В зависимости от того, что arg() вернет, это может быть count(arg()) == 3






Мне кажется, что это простая опечатка, однако это зависит от того, что должен делать ваш код. Я разделил код на несколько строк для лучшей читабельности:
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 Пожалуйста, рассмотрите возможность голосования за этот ответ как окончательный (зеленая метка слева), если он помог вам решить проблему. Спасибо
Спасибо за помощь, окончательный ответ за вами.
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() должен только проверять, достаточно ли компонентов в пути.
arg() == 3 && (arg(1) == 'add' || arg(2) == 'edit')— это логическое выражение, результатом которого будет либо истина, либо ложь. Использование count для true или false просто не имеет смысла.