我在编写第一个prestashop模板时遇到了问题。所以我想要的是获取同一父类别下所有子类别的列表。所以运行foreach循环我需要发送父类别ID。
在互联网上没有关于prestas编码,模块或东西的信息,但我发现了两种可能的解决方案。
一个是:{$product->id_category_default}
但只能在产品页面内工作(?)也许我错了,有可能得到一个解决方案吗?
另一种方式听起来有点绝望:{$cookie->last_visited_category}
这个问题,只有当你直接来自父类别时它才有效,但是当跟随直接链接或任何其他方式时它会失败。
另外我还在考虑编写php函数,它发送MySQL查询并返回父类别id,但这是最佳方式吗?此外,我还没有尝试过在smarty中编写我自己的php函数,似乎它只是以不同的方式调用函数。
总而言之,有人知道如何获取父类别ID而没有单独的php函数,如果它是如此绝望,在哪里以及如何为smarty定义自己的php函数以及如何调用它们。
我正在使用prestashop 1.4。
感谢您的关注。
答案 0 :(得分:3)
我在模块中使用过这段代码,你可能需要调整它,但基本上,父类别的id存储在数据库中。
$parentCategoryList = array(2, 3, 4, 5);
if(!in_array($id_category, $parentCategoryList)){
$parentCategory = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT DISTINCT c.id_parent
FROM '._DB_PREFIX_.'category c
WHERE c.id_category = '.(int)($id_category)
);
$id_category_parent = $parentCategory[0]['id_parent'];
}
else{
$id_category_parent = $id_category;
}
在我的代码中,$parentCategoryList
存储了我的主要类别的ID(将其更改为您的值)。然后它会检查您正在查看的类别($id_category
)是否为主要类别。如果没有,它会在数据库中查找父类别。
我对使用数组手动存储主要类别感到高兴,但它确实有效。
希望这有帮助!