Virtuemart и PHP 7

Владельцы сайтов, где установлен компонент Virtuemart, могут столкнуться с проблемами при переходе на версию PHP 7. Определенные страницы, как на фронтальной части, так и в административной панели могут отображаться с ошибкой. В данном материале я решил коллекционировать ошибки и их решения.

Ошибка в административной панели. Раздел «Настройки»

[] operator not supported for strings

Вызвана тем, что к строковой переменной применяется оператор массива.

Для устранения находим файл

/administrator/components/com_virtuemart/models/config.php

Далее в методе getCurrencyConverterList меняем $result = ''; на $result = array();

Должно получиться, как на картинке:



Ошибка на фронтальной части сайта при просмотре товара


Cannot access property started with '\0'

Может возникать если у товара есть дочерние товары

Для устранения находим файл:

/administrator/components/com_virtuemart/models/product.php

Далее меняем код:
foreach ($attribs as $k=> $v) {
    if ('product_in_stock' != $k and 'product_ordered' != $k) {// Do not copy parent stock into child
        if (strpos ($k, '_') !== 0 and empty($child->$k)) {
            $child->$k = $v;
            //	vmdebug($child->product_parent_id.' $child->$k',$child->$k);
        }
    }
}

На:
foreach ($attribs as $k=> $v) {
    if (strpos($k, "\0")===0) continue;
    if ('product_in_stock' != $k and 'product_ordered' != $k) {// Do not copy parent stock into child
        if (isset($parentProduct->$k) && strpos ($k, '_') !== 0 && empty($child->$k)) {
            $child->$k = $v;
            //	vmdebug($child->product_parent_id.' $child->$k',$child->$k);
        }
    }
}

Ошибка с отображением групп пользователей

Не так давно всплыла еще одна ошибка. Собственно говоря, это все следствие того же неправильного указания типа данных. Ошибка с отображением групп пользователей. Группы эти выбираются при доставке, оплате, на странице товара. В общем то, много где.

Изначально у данного списка была возможность мультивыбора. То есть, у одного способа доставки могло быть несколько групп пользователей. Однако, после перехода на PHP 7 эта возможность "отвалилась". Как это исправить?

Находим файл /administrator/components/com_virtuemart/helpers/shopfunctions.php

В этом файле находим метод(функцию) под названим renderShopperGroupList

Далее меняем $attrs = ''; на $attrs = array();

Сохраняем файл