- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们想在产品页面上进行快速比较,比较当前产品,然后比较该类别中的两个畅销产品。我有所有的 SQL 来获取当前产品和两个最畅销的产品,但是我在向这些产品添加功能时遇到了麻烦。这就是我面临的问题。
这只是一个例子。此 SQL 将提取类别中的产品功能。
SELECT ps_product.id_product, ps_feature_lang.name, ps_feature_value_lang.value FROM ps_product LEFT JOIN ps_feature_product ON ps_feature_product.id_product = ps_product.id_product LEFT JOIN ps_feature_lang ON ps_feature_lang.id_feature = ps_feature_product.id_feature LEFT JOIN ps_feature_value_lang ON ps_feature_value_lang.id_feature_value = ps_feature_product.id_feature_value WHERE ps_product.id_category_default = '6' AND ps_feature_lang.id_feature IS NOT NULL
返回
id_product | name | value
9 Height 5
9 Width 5
9 Depth 5
9 Weight 5
10 Height 10
我曾尝试按 id_product 进行分组,但当然这只会显示该产品功能列表中的部分值。我也尝试过按产品将它们放入数组中,但无法让它们在前端正确排列。
我不确定 prestashop 是否已经内置了拉取产品功能的功能
最佳答案
对于 MySQL,您可以尝试使用有助于此查询的 GROUP_CONCAT()。不过,我们编写了一个快速代码片段,让您大致了解您可以做什么。
这段代码:
最终结果如下:
代码:
<?php
include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/init.php');
ini_set('display_errors', 'On');
$id_product = 1; /* Current Product ID */
$id_category = 2; /* Current Category ID */
$id_lang = 1; /* Current Language ID */
/* Retrieve the two Best sellers for this category, excluding the current product */
$best_sellers = Db::getInstance()->ExecuteS('
SELECT ps.id_product, pl.name product_name
FROM '._DB_PREFIX_.'product_sale ps
LEFT JOIN '._DB_PREFIX_.'category_product cp ON (cp.id_product = ps.id_product)
LEFT JOIN '._DB_PREFIX_.'product p ON (p.id_product = cp.id_product)
LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product)
WHERE cp.id_category = '.(int)$id_category.' AND cp.id_product != '.(int)$id_product.' AND p.active = 1 AND pl.id_lang = '.(int)$id_lang.'
ORDER BY ps.sale_nbr DESC
LIMIT 2');
if (count($best_sellers))
{
$products_to_compare = array();
$products_names = array();
foreach ($best_sellers as $best_seller)
{
$products_to_compare[] = (int)$best_seller['id_product'];
$products_names[(int)$best_seller['id_product']] = $best_seller['product_name'];
}
$products_to_compare[] = (int)$id_product;
$products_names[(int)$id_product] = 'Current product'; /* Replace by the current product name */
$features = Db::getInstance()->ExecuteS('
SELECT fp.id_product, fp.id_feature, fl.name feature_name, fvl.value feature_value
FROM '._DB_PREFIX_.'feature_product fp
LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = fp.id_feature)
LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = fp.id_feature_value)
WHERE fp.id_product IN ('.pSQL(implode(',', $products_to_compare)).')');
$features_to_display = array();
foreach ($features as $feature)
{
if (!isset($features_to_display[(int)$feature['id_feature']]))
{
$features_to_display[(int)$feature['id_feature']] = array();
$features_to_display[(int)$feature['id_feature']]['name'] = $feature['feature_name'];
}
$features_to_display[(int)$feature['id_feature']][(int)$feature['id_product']] = $feature['feature_value'];
}
echo '
<table cellpadding="5" cellspacing="0" border="1">
<tr>
<td></td>';
foreach ($products_to_compare as $product_to_compare)
echo '<td>'.($product_to_compare == $id_product ? '<b>' : '').Tools::safeOutput($products_names[(int)$product_to_compare]).($product_to_compare == $id_product ? '</b>' : '').'</td>';
echo '</tr>';
foreach ($features_to_display as $feature_to_display)
{
echo '
<tr>
<td>'.Tools::safeOutput($feature_to_display['name']).'</td>';
foreach ($products_to_compare as $product_to_compare)
echo '<td>'.($product_to_compare == $id_product ? '<b>' : '').Tools::safeOutput($feature_to_display[(int)$product_to_compare]).($product_to_compare == $id_product ? '</b>' : '').'</td>';
echo '
</tr>';
}
echo '
</table>';
}
else
die('Sorry, no best sellers for this category');
可以改进此代码以节省内存并将结果传输到 Smarty(而不是直接在 Controller 中显示这些)。
关于php - Prestashop 产品特性 PHP SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17151576/
我想使用位于 prestashop 文件夹外但仍在同一服务器上的 php 脚本 (external_script.php) 中的 prestashop 应用程序。 我可以使用 Magento 做到这一
我是 PrestaShop 的新手。我遇到了一个问题,无法在 PrestaShop 从库存中减去商品的代码中找到。 当客户创建订单并选择付款时,商品将从库存中减去,但如果客户不付款并返回,则商品不会退
我正在开发一个必须列出现有产品列表的 prestashop 模块。 对于模块的配置面板,使用 renderForm() 和 getContent(),我试图复制“附件”功能,从这里开始编写输入产品的一
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题
没有模块安装线路UPS,但仍然出现错误。 错误: **发现错误:CData 部分未完成 UPS 模块可以通过 must_have_module_list.xml 文件中的 UPS Ge 处理运输。 发
我创建了一个名为“blockallproducts”的模块,它也在主页和分页中显示所有产品。但是如何将 paginaton 页面值的值传递给模块?或者我需要再创建一个 Controller 吗?任何人
这是我的代码。文件 mymodule.php: class Mymodule extends Module { public function __construct() {
我正在为 prestashop 开发一个非常简单的(对于新手用户)后端,我想知道在哪里可以找到上传的产品图片名称.. 我知道它们在“img/p”目录中。但我不知道: 1.它们在哪个数据库表中..链接
我试图在 prestashop 中有一个静态页面作为主页。我能想到的唯一方法是创建一个新页面(即shop.php),然后将主页中当前 Hook 的模型 Hook 到新的shop.php。 我试着关注这
function get_user_id() { global $cookie; $userid = NULL; if (isset($cookie->id_customer)
我已将我的 prestashop 1.5.6 电子商务站点迁移到新服务器, 我所做的过程只是将文件上传到新服务器并导入数据库。 我清理了 Cache/smarty/compile 和 Cache/sm
我想在 prestashop 模块中显示一个表单,并想将该值存储在数据库中。这怎么可能??有prestashop专家吗?? 最佳答案 您可以使用自定义 HTML block 并在其中添加您的表单代码。
我想更改订单确认电子邮件模板的内容,前提是已订购了特定产品。有什么解决办法吗? 最佳答案 您可以在mails/language/order_conf.(html/txt)中找到电子邮件订单确认的通用模
我想在 prestashop 模块中显示一个表单,并想将该值存储在数据库中。这怎么可能??有prestashop专家吗?? 最佳答案 您可以使用自定义 HTML block 并在其中添加您的表单代码。
我正在尝试从模块中获取管理员 url 和管理员目录。 你能举个例子,从一个模块 php 页面中找到 admin url 和 admin dir 吗? getAdminLink('AdminTest',
我使用以下代码尝试在 prestashop 中获取当前用户 ID。 我将此代码放在我的模块目录中的另一个 php 文件中,并通过模块文件调用它。 $id = $this->context->cust
Prestashop 我遇到了一个关于 cookie 的问题。在 prestashop 1.4.7 中,我使用 setcookie 创建了一个自定义 cookie 变量,但是当我尝试在前端 Contr
我是 prestashop 的新手。 2 天前,我在我的本地主机上安装了 prestashop Version 1.6.1.6。但现在我忘记了它的管理面板 URL。有什么办法可以找出网址。任何人都请帮
是否可以在不直接注入(inject)模板 smarty 的情况下将 javascript 集成到模块中? 最佳答案 已解决, 我在我的模块目录中添加了一个 Js 文件(例如:mymodule/view
我正在尝试从 prestashop 获取当前的购物车 ID: $cookie->id_cart; 但在我将产品添加到购物车之前,它是空白的。 是否有任何选项可以创建该购物车以便我获取 ID? 谢谢。
我是一名优秀的程序员,十分优秀!