0

「オンライン限定」の商品を商品リストから除外したい。

product-list.tpl の冒頭は次のとおりです。

<ul id="product_list" class="categorie_product clear">
    {foreach from=$products item=product name=products}
        <li class="ajax_block_product ........etc........>

これを入れます:

<li {if $product.online_only}style="display:none"{/if}>

リストから製品を削除しますが、リスト内のスペースを占有します。したがって、唯一の方法は、オンラインに設定されている製品を foreach 自体から除外することだと考えていますが、これを行う方法についてちょっと迷っています。

4

2 に答える 2

0

編集:ああ、はい、ページネーションを忘れていました。最初からこれらの製品を MySQL クエリから除外する必要があるようです。

classes/category.php に移動し、関数 getProducts を見つけます。

最後の行を見つけif ($getTotal)て次のように置き換えます。 '.($id_supplier ? 'AND p.id_supplier = '.(int)$id_supplier : '').' AND p.online_only = 0'); これにより、NOT (オンラインのみ) 製品の数が返されるため、ページネーションが正しく機能します。

そのすぐ下に、変数 $sql が表示されます。最後の行を次のように置き換えます '.($id_supplier ? 'AND p.id_supplier = '.(int)$id_supplier : '').' AND p.online_only = 0'; 。NOT (オンラインのみ) の製品のみが取得されるようにします。

それはうまくいくはずです。(オンラインのみ) ではない製品のみがデータベースから取得されるため、前述の {continue} は必要ありません。

それがうまくいくかどうか教えてください。

于 2013-04-09T18:52:14.697 に答える
0

はい、それは私がしたことですが、効果はありません。全体の category.php の一部:

        if ($getTotal)
    {
        $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
        SELECT COUNT(cp.`id_product`) AS total
        FROM `'._DB_PREFIX_.'product` p
        LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON p.`id_product` = cp.`id_product`
        WHERE cp.`id_category` = '.(int)($this->id).($active ? ' AND p.`active` = 1' : '').'
        '.($id_supplier ? 'AND p.id_supplier = '.(int)$id_supplier : '').' AND p.online_only = 0');
        return isset($result) ? $result['total'] : 0;
    }

    $sql = '
    SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new,
        (p.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice
    FROM `'._DB_PREFIX_.'category_product` cp
    LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product`
    LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND default_on = 1)
    LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.(int)($id_lang).')
    LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).')
    LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1)
    LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).')
    LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group`
                                               AND tr.`id_country` = '.(int)Country::getDefaultCountryId().'
                                               AND tr.`id_state` = 0)
    LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
    LEFT JOIN `'._DB_PREFIX_.'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = '.(int)($id_lang).')
    LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`
    WHERE cp.`id_category` = '.(int)($this->id).($active ? ' AND p.`active` = 1' : '').'
    '.($id_supplier ? 'AND p.id_supplier = '.(int)$id_supplier : '').' AND p.online_only = 0';
于 2013-04-14T10:01:40.097 に答える