2012-08-22 69 views
1

我有'顏色'&'strength'屬性的產品。我試圖讓這些選項列在這些屬性下作爲視圖的字段,以便我可以將它們用作過濾器。所以例如按顏色&強度排序。Drupal 7 - Ubercart - 屬性在視圖字段

我在谷歌上搜索了所有的東西,只能找到Drupal 6的模塊。任何人都知道7的東西?

回答

0

你可以看看這些沙箱項目:UC Views Attributes WorkUC attribute views

我正在尋找一個類似的功能,因爲它似乎無法將UC屬性放入視圖中。我現在無法測試自己,因爲本週末我有一個項目最後期限,但我很樂意收到您的反饋。

+0

我最終的屬性值的任何產品自己寫SQL查詢。如果你想看看它的代碼,請致電。 –

+0

是的,我想看看代碼! Holling! :) – Kojo

+0

我也很抱歉! – Matt

1

就像上一篇文章中說的那樣,我有兩個屬性'顏色'&'strength',我需要匹配確切的產品匹配,但ubercart沒有這方面的任何內容,所以我將它們寫入URL以獲取語句變量1 & 2,因此,例如其中有選擇看起來既像屬性的URL:

www.website.com/node/68?1=96&2=7

有時候一個變量設置而不是其他,所以我必須彌補這也可以通過使用一個%通配符。下面是這部分

// Since PHP's serialize function sometimes serializes in the incorrect order, 
// here we manually build the comparison key 
// Additionally append the image links urls with provided strength/color data 

if(isset($_REQUEST['1'])) { 
    $_1 = $_REQUEST['1']; 
    if($_1 !== '%') $url[] = "1=$_1"; 
} else $_1 = '%'; 

if(isset($_REQUEST['2'])) { 
    $_2 = $_REQUEST['2']; 
    if($_2 !== '%') $url[] = "2=$_2"; 
} else $_2 = '%'; 

$combination = "a:2:{i:1;s:"; 
$combination .= $_1 == '%' ? '%:"%";' : strlen($_1) . ':"' . $_1 . '";'; 
$combination .= "i:2;s:"; 
$combination .= $_2 == '%' ? '%:"%";' : strlen($_2) . ':"' . $_2 . '";'; 
$combination .= '}'; 

// if some products don't have a second attribute at all 
$combination2 = "a:1:{i:1;s:"; 
$combination2 .= $_1 == '%' ? '%:"%"' : strlen($_1) . ':"' . $_1 . '";'; 
$combination2 .= ';}'; 

底下,我不得不做一些額外的查詢,如如果一個分類設置並檢查是否存在動力學特性設置,這就是爲什麼WHERE存儲在一個變量的代碼。坦率地說,他們會混淆任何人,所以我把他們排除在外。但爲了你的緣故,下一部分你只需要查詢它。

$where = "WHERE (pa.combination LIKE :pattern1 OR pa.combination LIKE :pattern2) AND s.stock IS NOT NULL"; 
$comparison = array(':pattern1' => $combination, 
        ':pattern2' => $combination2); 

$filtered = db_query(
    " 
     SELECT pa.nid, pa.model, pa.combination, n.title, p.sell_price, f.uri 
     FROM {uc_product_adjustments} pa 
     LEFT JOIN {node} n ON pa.nid = n.nid 
     LEFT JOIN {uc_products} p ON pa.nid = p.nid 
     LEFT JOIN {field_data_uc_product_image} i ON i.entity_type = 'node' AND i.entity_id = n.nid 
     LEFT JOIN {file_managed} f ON f.fid = i.uc_product_image_fid 
     LEFT JOIN {uc_product_stock} s ON pa.model = s.sku AND s.stock <> '0' 
     $where 
    ", 
    $comparison 
); 

對結果最後環並將其存儲在一個正常的陣列

foreach($filtered as $i => $record) { 
    if(is_int(array_search($record->nid, $nids))) continue; 
    else { 
     $nids[] = $record->nid; 
     $result[] = $record; 
    } 
} 

此代碼檢查匹配任何當前在庫存