【问题标题】:Prestashop - Product images not showing in category loop with friendly URLsPrestashop - 产品图片未显示在具有友好 URL 的类别循环中
【发布时间】:2018-09-11 20:29:05
【问题描述】:

启用友好 URL 后,我的产品图片未按类别显示。如果我关闭它,它们会再次出现。

我试过了:

  • 在后台重新生成图片
  • 关闭缓存

当我检查带有友好 URL 的代码时,图像链接以一种奇怪的格式显示:https://www.website.fr/3689-home_default/.jpg

Prestashop 1.6

编辑:

看来问题出在我在自定义类别 TPL 中查询产品的方式上。我正在手动查询子类别中的产品(我不是一次显示该类别的所有产品),如下所示:

{foreach from=$subcategories item=subcategory}
    {if $subcategory.id_category == 64659}

        {assign var="subcategory_id" value=$subcategory.id_category}
        {assign var="subcategory_object" value=$subcategories_objects.$subcategory_id}
        {include file="./product-list.tpl" products=$subcategory_object->getProducts('1','1','100','price','asc')}

    {/if}
 {/foreach}

当我使用以下行查询产品时,图像显示正常:

{include file="./product-list.tpl" products=$products}

在 product-list.tpl 中,这是获取图像的行:

src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home_default')|escape:'html':'UTF-8'}"

谢谢。

【问题讨论】:

  • 首选项 -> 管理面板中的图像中是否有类似“移动图像”的选项?
  • 我没有看到任何看起来像这样的选项,不。当我重新生成缩略图时,有一个“保留以前的图像”选项,但我尝试了有无它,它都无法修复。
  • 你能在产品列表的管理面板中看到图片吗?
  • 是的,它们显示得很完美。
  • 图片的网址是什么?

标签: loops prestashop


【解决方案1】:

默认情况下,您将仅在$subcategories 变量中获得子类别数组;因此,除非您确实有子类别对象,否则获取该子类别的产品将永远不会工作$subcategory_object->getProducts('1','1','100','price','asc')

首先您需要获取子类别对象,为此您需要通过覆盖 Category 类来覆盖classes/Category.php 文件中的默认函数getSubCategories

按照下面提到的步骤(1-2)创建覆盖类并修改步骤(3)中提到的模板中的代码

1) 在路径override\classes 上创建文件Category.php 并在其中添加以下代码。 这将覆盖默认函数以获取类别。

<?php
/**
 * @override classes/Category.php
 * 
 */
class Category extends CategoryCore
{
    /**
     * @override
     * Return current category childs
     *
     * @param int $id_lang Language ID
     * @param bool $active return only active categories
     * @return array Categories
     */
    public function getSubCategories($id_lang, $active = true)
    {
        $result = parent::getSubCategories($id_lang, $active);
        foreach ($result as &$row) {
            // Preapre object of sub category here
            $row['object'] = new Category($row['id_category'], $id_lang);
        }
        return $result;
    }
}

2) 从cache 文件夹中删除文件class_index.php

您的覆盖功能现已准备就绪。

3) 将以下代码添加到您的模板中以显示产品

{foreach from=$subcategories item=subcategory}
    {if $subcategory.id_category == 64659}
        {include file="./product-list.tpl" products=$subcategory.object->getProducts('1','1','100','price','asc')}
    {/if}
{/foreach}

希望这对你有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2013-01-15
    • 2018-04-11
    相关资源
    最近更新 更多