1

「色」と「強度」の属性を持つ製品があります。これらの属性の下にリストされているオプションをビューのフィールドとして取得して、それらをフィルターとして使用できるようにしようとしています。たとえば、色と強度で並べ替えます。

私はグーグルであちこちを見回しましたが、Drupal 6のモジュールしか見つけることができません.7のことを知っている人はいますか?

4

2 に答える 2

1

前の投稿で述べたように、正確な製品一致のために一致させる必要がある 2 つの属性「色」と「強度」がありましたが、ubercart にはそのためのものがなかったので、get ステートメントの URL に変数 1 と 2 としてそれらを書き込みましたたとえば、両方の属性が選択されている URL は次のようになります。

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

1 つの変数が設定され、もう 1 つの変数が設定されない場合があるため、% ワイルドカードを使用してそれを補う必要がありました。その部分のコードはこちら

//  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;
    }
}

このコードは、現在在庫がある属性値のいずれかに一致する製品をチェックします。

于 2012-12-19T17:07:50.797 に答える
0

これらのサンドボックス プロジェクトを見ているかもしれません: UC Views Attributes WorkおよびUC 属性ビュー

UC 属性をビューに取り込むことができないように見えるため、同様の機能を探しています。今週末にプロジェクトの締め切りがあるため、今は自分自身をテストすることはできませんが、フィードバックをいただければ幸いです.

于 2012-11-23T13:07:54.340 に答える