@mihanickq

Как решить ошибку с Warning: count(): Parameter must be an array or an object that implements Countable in ....?

Magento сыпет в логи такими ошибками:
ERR (3): Warning: count(): Parameter must be an array or an object that implements Countable in .../app/code/local/Mage/Catalog/Block/Product/List.php on line 299
Такой код:
/**
     * Retrieve block cache tags based on product collection
     *
     * @return array
     */
    public function getCacheTags()
    {
        $data = array(self::CACHE_TAG);
        if ($category = Mage::registry('current_category')) {
            $data[] = Mage_Catalog_Model_Category::CACHE_TAG . "_" . $category->getId();
        }
!!!Это строка 299 --->       if (count($products = $this->getProductList())) {
            foreach ($products as $p) {
                $data[] = Mage_Catalog_Model_Product::CACHE_TAG . "_" . $p->getId();
            }
        }
        return $data;
    }

    public function getCacheLifetime()
    {
        return ($this->getData('cache_lifetime'))?intval($this->getData('cache_lifetime')):3600;
    }
	
}


Я надеюсь есть несложный способ это устранить, подскажите.
Хорошего специалиста на подхвате нет, а малознакомым не доверяю, был печальный опыт, не раз. Здесь всё-таки сообщество интеллектуалов и коллективный разум...
А вообще да, еще проблема найти надежного и толкового админа/прогера на периодическую удаленную работу. У одних амбиции и запросы не ответствуют уровню, другие безответсвенные разгильдяи. К жалению на своем опыте это понял и излишнее доверие только усугубило ситуацию. Знаю что есть толковые ребята, но без соотвествующих знаний и опыта сложно сразу оценить профпригодность.
И это у меня средненький интернет-магазин, планы и потенциал для роста как у Наполеона, но к сожалению буксует все именно в человеческом факторе.
  • Вопрос задан
  • 402 просмотра
Решения вопроса 2
l3ftoverz
@l3ftoverz Куратор тега PHP
Люблю Финский металкор
Как устранить ошибку: «count(): Parameter must be an array or an object that implements Countable»?

Как "быстрый фикс" могу предложит избавиться от count, так как есть empty: if (!empty($products = $this->getProductList()))
Ответ написан
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
Эту ошибку возвращает count когда в него передается null. До версии php 7.2 вернет 0, а с версии php 7.2 будет описанная ошибка.

Исправить можно, вот так
$products = $this->getProductList();
if ($products) {


а лучше так
$products = $this->getProductList();
if (is_iterable($products)) {


а еще лучше вот так
$products = $this->getProductList();
if (is_countable($products)) {

но для этого варианта нужен или php 7.3 или полифил который можно найти в комментариях к описанию функции https://www.php.net/manual/ru/function.is-countable.php
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Mygento eCommerce Solutions Санкт-Петербург
от 70 000 до 200 000 ₽
Relocats Берлин
от 55 000 до 60 000 €
Aristos Москва
До 150 000 ₽
22 февр. 2020, в 03:24
10000 руб./за проект
21 февр. 2020, в 21:48
12000 руб./за проект
21 февр. 2020, в 21:45
12000 руб./за проект