0

製品 ID とそれに関連付けられたスーパー属性を配列セッションに適用するための小さなメソッドを書くのに行き詰まってしまいました。

私がやろうとしているのは、特定の属性セット (チョッキなど) が既に配列に存在する場合、配列に追加されず、代わりに更新された ID とスーパー属性で位置を上書きすることです。現在、magento をカートに追加して、オプションの構成可能な製品をバンドルで使用できるようにする方法を書き直しています。

現在、スクリプトは ajax 引数を取り、(冗長で不要なデータをいくつか分割した後) カートに追加メソッドが呼び出されるまで保持されるセッションにこれを適用します。

私の現在のコードベースは次のもので構成されています。

<?php
// Handler for holding onto package products.
umask(0);
require_once 'app/Mage.php';
Mage::app();
Mage::getSingleton('core/session', array ('name' => 'frontend'));
$product = $_POST['productAdd'];
$split = explode(",",$product);
$actual = $split[0] . ',' . $split[1] . ',' . $split[2];
$_product = Mage::getModel('catalog/product')->load($split[0]);
$attributeSet = Mage::getModel('eav/entity_attribute_set')->load($_product->getAttributeSetId())->getAttributeSetName();
if(!empty($_SESSION['products'])) {
$arrayLength = count($_SESSION['products']);
    for($i = 0; $i <= $arrayLength; $i++) {
        if(strstr($_SESSION['products'][$i], $attributeSet)) {
            $_SESSION['products'][$i] = $actual;
            break;
        }else{
            $_SESSION['products'][] = $actual;
        }   
    }
}else{
    $_SESSION['products'][] = $product;
}
var_dump($_SESSION['products']);
?>

これは配列内の最初の出現に対して機能し、インデックス位置を適切に上書きしますが、その後の配列への追加は上書きされず、代わりに配列の最後に追加されるだけです。これは私が求めているものではありません! ]

出力例:

array(4) { 
   [0]=> string(19) "15302, 959, Jackets" 
   [1]=> string(21) "15321, 1033, Trousers" 
   [2]=> string(21) "15321, 1033, Trousers" 
   [3]=> string(21) "15321, 1033, Trousers" 
} 

誰かが私に正しい方向への突き刺しを与えることができれば、それは最も感謝されます!

ありがとう!

4

2 に答える 2

0

テストを変更して確認する

if(strstr($_SESSION['products'][$i], $attributeSet) !== FALSE) {

strstr は、検索する文字列が最初の位置から始まる場合、以前のテストに失敗する 0 を返す可能性があります。

ステートメントの「then」部分も不要です。

于 2013-07-16T13:34:07.970 に答える