如何在PrestaShop产品列表页筛选区获取并显示分类描述?
解决PrestaShop产品列表页筛选区显示分类描述的问题
嘿,我之前做PrestaShop项目时也碰到过一模一样的需求,整理了几个靠谱的方案,帮你搞定:
方案1:通过Override扩展Category类(推荐,符合PrestaShop规范)
PrestaShop不建议直接修改核心文件,所以用**类重写(Override)**给Category类加个获取描述的方法,这样后续升级版本也不会丢失修改:
- 在PrestaShop根目录下创建/编辑
override/classes/Category.php文件 - 插入以下代码:
class Category extends CategoryCore { /** * 获取指定语言的分类描述,默认取当前站点语言 * @param int|null $id_lang 语言ID * @return string 分类描述(空字符串表示无数据) */ public function getDescription($id_lang = null) { if ($id_lang === null) { $id_lang = Context::getContext()->language->id; } $description = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue( 'SELECT `description` FROM `'._DB_PREFIX_.'category_lang` WHERE `id_category` = '.(int)$this->id.' AND `id_lang` = '.(int)$id_lang ); return $description ?: ''; } }
- 删除
var/cache/class_index.php文件,让PrestaShop加载我们的重写类 - 现在你就能在模板或控制器里直接调用
$category->getDescription()获取描述了
方案2:在模板/控制器里直接查询数据库(快速临时方案)
如果不想修改类,也可以在产品列表控制器(比如 controllers/front/ProductListingFrontController.php)或者筛选区域的模板里直接查库:
假设你在模板里能拿到分类ID $id_category,可以这么写:
{php} $id_lang = Context::getContext()->language->id; $description = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue( 'SELECT `description` FROM `'._DB_PREFIX_.'category_lang` WHERE `id_category` = '.(int)$id_category.' AND `id_lang` = '.(int)$id_lang ); {/php} <!-- 输出描述 --> <p class="category-description">{$description}</p>
方案3:利用PrestaShop内置的多语言加载方法
其实Category类本身有内置的多语言字段加载逻辑,你可以在拿到分类对象后手动触发:
// 假设你已经获取到了$category对象 $id_lang = Context::getContext()->language->id; $category->loadLanguage($id_lang); // 现在直接访问属性就能拿到描述 echo $category->description;
注意:如果你的分类对象是通过 Category::getCategories() 这类方法批量获取的,可能需要手动调用 loadLanguage() 来加载对应语言的字段数据。
内容的提问来源于stack exchange,提问作者patricia
相关产品推荐
相关产品推荐

