首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于路由的产品页面OpenCart模块

基于路由的产品页面OpenCart模块
EN

Stack Overflow用户
提问于 2013-11-07 16:11:22
回答 1查看 2.7K关注 0票数 2

我在左边的列中设置了两个模块,一个是类别模块,另一个模块是制造商模块,它们都有自己的布局:产品/类别和产品/制造商,

这样做很好:当浏览类别时,只有类别模块显示在左边的列中,而当浏览制造商只显示在左侧列中的canufacturers模块时。

但是当检查产品细节时,它只会显示分配给布局“产品”的模块,这里我无法思考该做什么。如果在两个类别和制造商模块中添加布局“产品”,那么(当然)两个模块都会显示,如何根据路由添加模块?

浏览类别的示例:

1)左列中只显示了类别模块(这里很好)

代码语言:javascript
复制
index.php?route=product/category&path=33

2)进入产品:

代码语言:javascript
复制
index.php?route=product/product&path=33&product_id=31

现在,所有分配给布局“产品”的模块都显示出来了,我只希望显示浏览类别(step1)时显示的模块

示例浏览制造商:

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

代码语言:javascript
复制
index.php?route=product/manufacturer

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

代码语言:javascript
复制
index.php?route=product/product&manufacturer_id=9&product_id=31

现在,所有分配给布局“产品”的模块都显示出来了,我只想显示在浏览制造商(step1)时显示的模块

因此,这是两条通往同一产品的不同路线:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-07 16:18:32

你在这里有一些选择。您可以查看$_SERVER['HTTP_REFERER']头,它可能不会被发送(因此不是100%可靠的),或者您可以使用会话来存储您来自何处的密钥.例如,当列出类别时,在category控制器中执行如下操作:

代码语言:javascript
复制
$this->session->data['user_is_listing'] = 'category';

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

代码语言:javascript
复制
$this->session->data['user_is_listing'] = 'manufacturer';

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

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

代码语言:javascript
复制
    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']
                        );
                    }
                }
            }
        }
    }

现在,存储在会话中的名称必须与该模块的名称相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19840898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档