我在左边的列中设置了两个模块,一个是类别模块,另一个模块是制造商模块,它们都有自己的布局:产品/类别和产品/制造商,
这样做很好:当浏览类别时,只有类别模块显示在左边的列中,而当浏览制造商只显示在左侧列中的canufacturers模块时。
但是当检查产品细节时,它只会显示分配给布局“产品”的模块,这里我无法思考该做什么。如果在两个类别和制造商模块中添加布局“产品”,那么(当然)两个模块都会显示,如何根据路由添加模块?
浏览类别的示例:
1)左列中只显示了类别模块(这里很好)
index.php?route=product/category&path=332)进入产品:
index.php?route=product/product&path=33&product_id=31现在,所有分配给布局“产品”的模块都显示出来了,我只希望显示浏览类别(step1)时显示的模块
示例浏览制造商:
1)只有制造商模块显示在左栏中(这里很好)。
index.php?route=product/manufacturer2)输入与类别示例中相同的产品:
index.php?route=product/product&manufacturer_id=9&product_id=31现在,所有分配给布局“产品”的模块都显示出来了,我只想显示在浏览制造商(step1)时显示的模块
因此,这是两条通往同一产品的不同路线:
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
发布于 2013-11-07 16:18:32
你在这里有一些选择。您可以查看$_SERVER['HTTP_REFERER']头,它可能不会被发送(因此不是100%可靠的),或者您可以使用会话来存储您来自何处的密钥.例如,当列出类别时,在category控制器中执行如下操作:
$this->session->data['user_is_listing'] = 'category';如果用户跳转到manufacturer控制器中列出的制造商,设置相同的键,不同的值:
$this->session->data['user_is_listing'] = 'manufacturer';然后,在column_left控制器中为这两个模块添加一个新的检查(制造商和类别模块都必须分配到产品详细信息页),并检查会话中存储在user_is_listing键下的值。那么,要么允许模块渲染,要么不允许.
编辑: OK,让我们假设您自己的模块有名称category1和manufacturer1 (如果您使用的是默认模块,那么名称将没有编号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']
);
}
}
}
}
}现在,存储在会话中的名称必须与该模块的名称相同。
https://stackoverflow.com/questions/19840898
复制相似问题