@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;
    }
	
}


Я надеюсь есть несложный способ это устранить, подскажите.
Хорошего специалиста на подхвате нет, а малознакомым не доверяю, был печальный опыт, не раз. Здесь всё-таки сообщество интеллектуалов и коллективный разум...
А вообще да, еще проблема найти надежного и толкового админа/прогера на периодическую удаленную работу. У одних амбиции и запросы не ответствуют уровню, другие безответсвенные разгильдяи. К жалению на своем опыте это понял и излишнее доверие только усугубило ситуацию. Знаю что есть толковые ребята, но без соотвествующих знаний и опыта сложно сразу оценить профпригодность.
И это у меня средненький интернет-магазин, планы и потенциал для роста как у Наполеона, но к сожалению буксует все именно в человеческом факторе.
  • Вопрос задан
  • 10738 просмотров
Решения вопроса 1
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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы