1

私の Magento system.log は次のエラーでいっぱいです: Notice: Array to string conversion in /app/code/core/Mage/Core/Block/Abstract.php on line 1232.

ここにコードを追加しました: (ルール 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

これはマジェントのコアコードなので、このコードの外から $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

私のサイトのホームページへの1回の訪問で、この警告が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お気に入りのエディタで
新しいファイルを開き、1232 行までスクロールします。~/public_html/app/code/local/Mage/Core/Block/Abstract.php

これから変更:
    $key = implode('|', $key );
に:
    $key = $this->implodeRecursive('|', $key );

ステップ 4
この現在の関数の上にスクロールpublic function getCacheKey()し、その上の空きスペースに再帰的な implode 関数を追加します。

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

試行錯誤の結果、信頼できる唯一のテストは$value文字列の場合でした。私の通常のトリックis_array()またはテストは機能count() > 0しませんでした。このバグの修正は興味深い取り組みでした。

ステップ 5
保存して閉じAbstract.php、新しいファイルをバージョン管理システムにチェックインします。私はマージ --no-ff分岐
で git を使用します。

于 2014-09-11T07:39:45.610 に答える