2

我在左栏中设置了 2 个模块,一个带有类别,一个带有制造商,都有自己的布局:产品/类别和产品/制造商,

这可以正常工作:浏览类别时,左栏中仅显示类别模块,而浏览制造商时,左栏中仅显示制造商模块。

但是在检查产品详细信息时,它只会显示分配给布局“产品”的模块,这就是我无法弄清楚该怎么做的地方。如果将布局“产品”添加到类别和制造商模块,那么(当然)两个模块都会显示,如何根据路线添加模块?

示例浏览类别:

1) 左栏中仅显示类别模块(这里都很好)

index.php?route=product/category&path=33

2) 输入产品:

index.php?route=product/product&path=33&product_id=31

现在显示分配给布局“产品”的所有模块,我只想显示浏览类别(步骤1)时显示的模块

示例浏览制造商:

1)只有制造商模块显示在左栏中(这里都很好)

index.php?route=product/manufacturer

2)输入与类别示例中相同的产品:

index.php?route=product/product&manufacturer_id=9&product_id=31

现在显示分配给布局“产品”的所有模块,我只想显示浏览制造商(步骤1)时显示的模块

所以这是同一产品的两条不同路线:

index.php?route=product/product&path=33&product_id=31
index.php?route=product/product&manufacturer_id=9&product_id=31

但是适用的布局是带有路线产品/产品的称为“产品”的布局

那么有没有办法将这两条不同的路线添加到两种不同的布局中,这样模块就可以正确显示,或者我想错了?

对此的任何输入都会很棒

OpenCart 1.5.6

4

1 回答 1

1

你在这里有一些选择。您可以查看$_SERVER['HTTP_REFERER']可能未发送的标头(因此不是 100% 可靠),或者您可以使用 session 来存储您来自哪里的键......例如,在列出类别时,在category控制器中做类似的事情:

$this->session->data['user_is_listing'] = 'category';

如果用户跳转到manufacturer控制器中的制造商列表设置相同的键,不同的值:

$this->session->data['user_is_listing'] = 'manufacturer';

然后,在column_left控制器中为这两个模块添加一个新检查(必须将制造商和类别模块都分配给产品详细信息页面)并检查键下会话中存储的值user_is_listing......然后,允许模块渲染或不是...

编辑:好的,让我们假设您自己的模块有名称category1manufacturer1(如果您使用的是默认模块,那么名称将没有 number 1)。现在,在左列中找到foreach ($extensions as $extension) {循环,我们将这样修改它:

    foreach ($extensions as $extension) {
        $modules = $this->config->get($extension['code'] . '_module');

        if ($modules) {
            foreach ($modules as $module) {
                if ($module['layout_id'] == $layout_id && $module['position'] == 'column_left' && $module['status']) {
                    if ($route == 'product/product' && in_array($extension['code'], array('category1', 'manufacturer1'))) {
                        if($this->session->data['user_is_listing'] == $extension['code'])) {
                            $module_data[] = array(
                                'code'       => $extension['code'],
                                'setting'    => $module,
                                'sort_order' => $module['sort_order']
                            );
                        }
                    } else {
                        $module_data[] = array(
                            'code'       => $extension['code'],
                            'setting'    => $module,
                            'sort_order' => $module['sort_order']
                        );
                    }
                }
            }
        }
    }

现在需要存储在会话中的名称与该模块的名称相同。

于 2013-11-07T16:18:32.597 回答