2017-04-23 17 views
0

Prestashopの商品詳細を扱っています。製品ページでは、システムに定義されているすべての属性をjavascript配列に入れています。とき、私今JS変数に配列のキーの順番が変更されています。

{addJsDef attributeGroups = $groups} 

:今

$groups = array(
    '34' => array(//Here key is attribute group id 
      'default_attribute_id' => '105', // default attribute id of this group 
      'attributes' => array( // all the attribute with attr id => attr vaue 
        '105' => 'Small', 
        '115' => 'X-Large', 
        '110' => 'Medium' 
      ), 
     ), 
    ....... 
); 

以下に示すようTPLファイルで変数をjavacriptするために割り当てられた「$グループ」変数を:製品を保持している

PHPの変数属性

を以下に示します。 "attributeGroups"の値をコンソール化すると、 "$ groups"変数のように属性IDの順序が失われます。コンソール内の値を以下に示す:

var attributeGroups = { 
    34: { 
     'default_attribute_id': "105", 
     'attributes': { //Order of attributes id has changed 
      105: "Small", 
      110: "Medium", 
      115: "X-Large" 
     } 
    } 
} 

Iはまた、手動でforeachループを使用して、しかし、結果は同じである「attributeGroups」変数の値を挿入すると試みました。

属性IDの順序を変更したくありません。誰かが私にこれを助けることができますか? javascript変数に代入するときに属性IDの順序が変わる理由を示します。

+0

注文が、これは正常です、guarantiedされていません。それに頼らないでください。固定注文が必要な場合は、arrayを使用してください。 – dfsq

+0

お返事ありがとうございます。あなたの提案に従って、私はそれをオブジェクトから配列に変更しました。しかし、それでも結果は同じです。私はまた、コードをデバッグしている、値は正しい順序でJS変数に割り当てられますが、私はその変数を印刷するとき、それは間違った順序(問題に示されている)でデータを表示しています – Dhirender

+0

配列は、違う。しかし、コードなしで伝えるのは難しいです。 – dfsq

答えて

0

それは(要素の順序を固定している)、単純なJSの配列を作成する必要があり、この方法は:

$groups = array(
    '34' => array(//Here key is attribute group id 
     'default_attribute_id' => '105', // default attribute id of this group 
     'attributes' => array( // all the attribute with attr id => attr vaue 
      ['Small', '105'], 
      ['X-Large', '115'], 
      ['Medium', '110'], 
     ), 
    ), 
    ....... 
); 

それはJSオブジェクトに変換連想配列を、(作成されますので、あなただけの、PHPの配列のインデックスを使用することはできません

var attributeGroups = { 
    34: { 
     'default_attribute_id': "105", 
     'attributes': [ 
      ["Small", 105], 
      ["X-Large", 115], 
      ["Medium", 110] 
     ] 
    } 
} 

またはあなたの属性アレイにsortキーを追加し、並べ替えができます:JS)は何の連想配列を持っていないよう

結果のJSはその後でなければなりませんそれ(Array.sort(callback)経由)あなたがそれを必要なときにJSで:その後、

$groups = array(
    '34' => array(//Here key is attribute group id 
     'default_attribute_id' => '105', // default attribute id of this group 
     'attributes' => array( // all the attribute with attr id => attr vaue 
      '105' => ['Small', 1], 
      '115' => ['X-Large', 2], 
      '110' => ['Medium', 3], 
     ), 
    ), 
    ....... 
); 

そして、あなたがそれを必要なときにそれを並べ替える:プロパティの

attributeGroups[34].attributes.sort(function (a, b) { 
    return a[1] - a[2]; 
}) 
関連する問題