1

我的 Magento system.log 充满了这个错误:注意:第 1232 行 /app/code/core/Mage/Core/Block/Abstract.php 中的数组到字符串转换。

我在这里添加了代码:(规则 1232 是 $key = implode('|', $key);)

   /**
      * Get Key for caching block content
      *
      * @return string
      */
     public function getCacheKey()
     {
         if ($this->hasData('cache_key')) {
             return $this->getData('cache_key');
         }
         /**
         * don't prevent recalculation by saving generated cache key
          * because of ability to render single block instance with different data
          */
         $key = $this->getCacheKeyInfo();
         //ksort($key);  // ignore order
         $key = array_values($key);  // ignore array keys
         $key = implode('|', $key);
         $key = sha1($key);
         return $key;
    }

你知道出了什么问题,我需要改变什么吗?先感谢您!

4

2 回答 2

0

好吧,这是 magento 核心代码,所以我确实希望从该代码外部进入 $key 变量的一些错误值。

您可以尝试记录 $key 变量并检查它是否为数组。

就像是:

Mage::log(print_r($key,true), null, 'mycustomerror.log', true);

或者

Mage::log($key, null, 'mycustomerror.log', true);

如果您想要更好的答案,您应该告诉我们此通知何时生成以及您正在使用的模块。

额外信息后

嗯,这是一个猜测,因为你给我的信息并不多。但是您的日志显示以下内容:

2013-01-17T16:52:36+00:00 DEBUG (7): Array
(
    [0] => CATALOG_PRODUCT_HIGHLIGHT
    [1] => 1
    [2] => default
    [3] => a058
    [4] => 0
    [5] => highlight/product/grid.phtml
    [6] => 8
    [7] => 4
    [8] => Array
        (
        )

    [9] => Array
        (
        )

    [10] => Array
        (
        )

    [11] => Aanbiedingen
    [12] => highlight-special
    [13] => special_from_date,special_to_date
    [14] => -special
    [15] => product_special
)

我认为问题是:

[8] => Array()
[9] => Array()
[10] => Array()

当他们内爆时,他们会发出通知。

见: http ://codepad.viper-7.com/qb5tIW

我会检查 CATALOG_PRODUCT_HIGHLIGHT (highlight/product/grid.phtml)

您可以浏览您的站点,以便加载 highlight/product/grid.phtml 并查看此调用是否确实将该通知放入您的日志文件中。

祝你好运 !

于 2013-01-16T13:19:07.110 回答
0

在注意到对我网站主页的一次访问在 中发出了 90 多行此警告后system.log,我解决了 khoekman 的答案中推断的嵌套数组的问题。我的 Magento 版本是 1.7.0.1

步骤 1
创建路径:app/code/local/Mage/Core/Block然后cd到该目录。

第 2 步
将 Abstract.php 从核心复制到本地:
cp ~/public_html/app/code/core/Mage/Core/Block/Abstract.php .
这是您为自定义编辑“覆盖核心文件”的方式。

第 3 步
在您喜欢的编辑器中 打开新文件~/public_html/app/code/local/Mage/Core/Block/Abstract.php,向下滚动到第 1232 行:

从此:更改
    $key = implode('|', $key );
为:
    $key = $this->implodeRecursive('|', $key );

第 4 步
滚动到当前函数上方public function getCacheKey(),然后在其上方的空闲空间中,添加递归内爆函数:

//  ckck: fix of system.log Notice: Array to string conversion in app/code/core/Mage/Core/Block/Abstract.php on line 1232
private function implodeRecursive( $_glue, $_arrIn ) {
    $_arrTmp=Array();
    if( count( $_arrIn ) > 1 ) {
        foreach( $_arrIn as $key => $value ) {
            if( is_string($value) || is_null($value) )
                $_arrTmp[] = $value;
            else
                $_arrTmp[] = $this->implodeRecursive( $_glue, $value );
        }
    }
    $_strReturn = implode( $_glue, $_arrTmp );
    return $_strReturn;
}

通过反复试验,唯一可靠的测试是 if$value是一个字符串。我通常的技巧is_array()或测试count() > 0没有奏效。修复这个错误是一项有趣的尝试。

第 5 步
保存然后关闭Abstract.php,然后将新文件签入您的版本控制系统。
我将 git 与merge --no-ff分支一起使用。

于 2014-09-11T07:39:45.610 回答