dpwdldgn43486 2016-04-05 13:32
浏览 54

Prestashop如何在查询中获取所有产品on_sale?

so I am have a query that finds all the products that are "on_sale" = 1 but the problem is that in smarty href="{$product.link}" return nothing here is the SQL query

public static function getOnSaleProducts($id_lang, $page_number = 0, $nb_products = 10,
                                      $count = false, $order_by = null, $order_way = null, Context $context = null)
{
    if (!$context)
        $context = Context::getContext();
    $front = true;
    if (!in_array($context->controller->controller_type, array('front', 'modulefront')))
        $front = false;
    if ($page_number < 0) $page_number = 0;
    if ($nb_products < 1) $nb_products = 10;
    if (empty($order_by) || $order_by == 'position') $order_by = 'date_add';
    if (empty($order_way)) $order_way = 'DESC';
    if ($order_by == 'id_product' || $order_by == 'price' || $order_by == 'date_add'  || $order_by == 'date_upd')
        $order_by_prefix = 'p';
    else if ($order_by == 'name')
        $order_by_prefix = 'pl';
    if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way))
        die(Tools::displayError());
    $groups = FrontController::getCurrentCustomerGroups();
    $sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
    if (strpos($order_by, '.') > 0)
    {
        $order_by = explode('.', $order_by);
        $order_by_prefix = $order_by[0];
        $order_by = $order_by[1];
    }
    if ($count)
    {
        $sql = 'SELECT COUNT(p.`id_product`) AS nb
                FROM `'._DB_PREFIX_.'product` p
                '.Shop::addSqlAssociation('product', 'p').'
                WHERE product_shop.`active` = 1
                AND DATEDIFF(
                    product_shop.`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
                '.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').'
                AND p.`id_product` IN (
                    SELECT cp.`id_product`
                    FROM `'._DB_PREFIX_.'category_group` cg
                    LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
                    WHERE cg.`id_group` '.$sql_groups.'
                )';
        return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
    }
    $sql = new DbQuery();
    $sql->select(
        'p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`,
        pl.`meta_keywords`, pl.`meta_title`, pl.`name`, image_shop.`id_image`, il.`legend`, m.`name` AS manufacturer_name'
    );
    $sql->from('product', 'p');
    $sql->join(Shop::addSqlAssociation('product', 'p'));
    $sql->leftJoin('product_lang', 'pl', '
        p.`id_product` = pl.`id_product`
        AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl')
    );
    $sql->leftJoin('image', 'i', 'i.`id_product` = p.`id_product`');
    $sql->join(Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1'));
    $sql->leftJoin('image_lang', 'il', 'i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang);
    $sql->leftJoin('manufacturer', 'm', 'm.`id_manufacturer` = p.`id_manufacturer`');
    $sql->where('product_shop.`active` = 1');
    $sql->where('(image_shop.id_image IS NOT NULL OR i.id_image IS NULL) OR (image_shop.id_image IS NULL AND i.cover=1)');
    if ($front)
        $sql->where('product_shop.`visibility` IN ("both", "catalog")');
    $sql->where('
        DATEDIFF(
            product_shop.`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'
    );
    $sql->where('p.`id_product` IN (
        SELECT cp.`id_product`
        FROM `'._DB_PREFIX_.'category_group` cg
        LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
        WHERE cg.`id_group` '.$sql_groups.')'
    );
    $sql->orderBy((isset($order_by_prefix) ? pSQL($order_by_prefix).'.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way));
    if (Combination::isFeatureActive())
    {
        $sql->select('pa.id_product_attribute');
        $sql->leftOuterJoin('product_attribute', 'pa', 'p.`id_product` = pa.`id_product`');
        $sql->join(Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.default_on = 1'));
        $sql->where('(pa.id_product_attribute IS NULL OR product_attribute_shop.id_shop='.(int)$context->shop->id.')');
    }
    $sql->join(Product::sqlStock('p', Combination::isFeatureActive() ? 'product_attribute_shop' : 0));
    $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
    if ($order_by == 'price')
        Tools::orderbyPrice($result, $order_way);
    if (!$result)
        return false;
    $products_ids = array();
    foreach ($result as $row)
        $products_ids[] = $row['id_product'];
    // Thus you can avoid one query per product, because there will be only one query for all the products of the cart
    Product::cacheFrontFeatures($products_ids, $id_lang);
    return Product::getProductsProperties((int)$id_lang, $result);
}

the query finds all the product I need but the products do not have links.

  • 写回答

1条回答 默认 最新

  • dongsu3654 2016-04-07 12:33
    关注

    Hey you can regenerate the link by passing the Context class object to the smarty template and then $contextobj->link->getProductLink(); passed the requied paramter to the function may be it will take productID, rewrittenURL etc.

    评论

报告相同问题?

悬赏问题

  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测