2010-04-21 64 views
0

我繼承了一個zencart mod,但無法弄清楚什麼是錯的。客戶選擇產品和屬性(型號#)。然後發送到他們完成的另一個表單。當他們提交表格時,產品和屬性應該包含在發送的郵件中。php zencart mod - 有屬性陣列的問題

此時,只有產品才能通過。該屬性只是說「數組」。有趣的部分是,當我刪除打印屬性的行時,products_options_names將打印出來。所以我知道產品和products_options_names都在起作用。該屬性是唯一不正確的東西。

這是我認爲是重要的代碼。這是具有表單的頁面,所以該屬性應該已經傳遞給表單。

//Begin Adding of New features 
//$productsimage = $product['productsImage']; 
$productsname = $product['productsName']; 
$attributes = $product['attributes']; 
$products_options_name = $value['products_options_name']; 

$arr_product_list[] = "<strong>Product Name:</strong> $productsname <br />"; 
$arr_product_list[] .= "<strong>Attributes:</strong> $attributes <br />"; 
$arr_product_list[] .= "<strong>Products Options Name:</strong> $products_options_name <br />"; 
$arr_product_list[] .= "---------------------------------------------------------------"; 

//End Adding of New features 

    } // end foreach ($productArray as $product) 
?> 

在此之上,還有具有屬性的另一部分:

<?php 
    echo $product['attributeHiddenField']; 
    if (isset($product['attributes']) && is_array($product['attributes'])) { 
    echo '<div class="cartAttribsList">'; 
    echo '<ul>'; 
    reset($product['attributes']); 
    foreach ($product['attributes'] as $option => $value) { 
?> 

誰能幫我弄清楚什麼是錯的?我不確定問題是否出現在此頁面上,或者該屬性是否未傳遞給此頁面。

TIA

回答

1

您的第一個片段包含潛在的問題。您正在將新項目添加到數組$arr_product_list,同時還嘗試使用字符串連接.=運算符。這當然會讓PHP感到困惑,因爲你正試圖添加一個尚不存在的字符串。

我相信你的代碼的意圖是建立一個HTML片段,然後添加到陣列中,你可以用下面的操作:

從PHP這個
$str = "<strong>Product Name:</strong> $productsname <br />"; 
$str .= "<strong>Attributes:</strong> $attributes <br />"; 
$str .= "<strong>Products Options Name:</strong> $products_options_name <br />"; 
$str .= "---------------------------------------------------------------"; 
$arr_product_list[] = $str; 

你可能會收到錯誤,但也許他們被壓制了。仔細檢查您的php.ini,並確保您的error_reportingdisplay_errors,display_startup_errorslog_errors設置是正確的。

+0

不幸的是,沒有任何區別。屬性仍然只是說「數組」。 奇怪的是$ product ['attributes']用於在頁面上打印出來。我不明白爲什麼以後它是空的。 – user80151 2010-04-23 00:02:37

+0

,如果我改變這個:$ attributes = $ product ['attributes']; to $ attributes = $ value; 它仍然說「陣列」 – user80151 2010-04-23 00:15:05

0

我意識到這可能來不及幫助解決這個問題,但我在回答,希望別人在類似的問題上遇到這個問題。

您看到「數組」的原因是打印出來的,是因爲存儲在具有關鍵'屬性'的$產品中的值實際上是一個數組。 $ product ['attributes']中的值是一個數組類型,您將存儲到$ attributes中。這意味着$屬性變量是一個數組,所以當你嘗試用這條線來連接它:

$arr_product_list[] .= "<strong>Attributes:</strong> $attributes <br />"; 

解釋不知道如何序列化的Array對象,所以默認打印出對象的正如我們所確定的那樣,類型是一個Array。

如果只在$單個值的屬性,你關心數組,你想先收集該值出像這樣的東西建立你的字符串:

var $attributes = $products['attributes']; 
var $attributeValue = $attributes['my_target_value_key']; 

**(其中「 my_target_value_key'是你希望提取的值的關鍵)*

然後你可以像以前一樣嘗試使用它,只需用$ attributeValue替換字符串中的$ attributes即可。

的第二個代碼塊的工作,因爲你可以看到它檢查是否該值設置並是一個數組類型與此行:

if (isset($product['attributes']) && is_array($product['attributes'])) { 

然後再經過每個項目循環返回的數組中與該線:

foreach ($product['attributes'] as $option => $value) {