我的产品具有“颜色”和“颜色”的属性。 '强度'。我正在尝试将这些属性下列出的选项作为视图的字段,以便我可以将它们用作过滤器。因此,例如按颜色排序&强度。
我在谷歌上四处寻找,只能找到Drupal 6的模块。有人知道7的任何内容吗?
答案 0 :(得分:1)
就像上一篇文章中所说,我有2个属性'color'& 'strength',我需要匹配精确的产品匹配,但是ubercart没有任何东西,所以我把它们写入URL,get语句作为变量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;
}
}
此代码检查与当前库存中的任何属性值匹配的任何产品
答案 1 :(得分:0)
您可以查看这些沙箱项目:UC Views Attributes Work和UC attribute views。
我正在寻找类似的功能,因为似乎无法将UC属性放入视图中。我现在无法测试自己,因为我本周末有一个项目的截止日期,但我很乐意收到您的反馈。