我正在尝试获取模块位置,以便我可以根据模板的放置位置更改模板。我曾经从控制器内部检查$setting['position']
,然后将其传递给视图,但是当通过布局管理器完成模块的定位时,该属性不再可用。
这适用于Opencart 1.5.6 -
// Module Controller
$this->data['position'] = $setting['position'];
// Module View
<?php if ($position === "content_top" or $position === "content_bottom") { ?>
<!-- position specific markup -->
<?php } ?>
如何在Opencart 2中实现同样的目标?
答案 0 :(得分:1)
之前我们使用在特定模块的模块页面(扩展/模块)中设置position(content_top/content_bottom)
现在在Opencart 2.0中我们将position(content_top/content_bottom)
和模块设置在特定的布局页面(系统/设计/布局)
这就是你在模块控制器中没有$setting['position'];
的原因。
如果您只想在所需的控制器中使用所需position(content_top/content_bottom)
的代码。
$this->load->model('design/layout');
if (isset($this->request->get['route'])) {
$route = (string)$this->request->get['route'];
} else {
$route = 'common/home';
}
$layout_id = 0;
if ($route == 'product/category' && isset($this->request->get['path'])) {
$path = explode('_', (string)$this->request->get['path']);
$layout_id = $this->model_catalog_category->getCategoryLayoutId(end($path));
}
if ($route == 'product/product' && isset($this->request->get['product_id'])) {
$layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
}
if ($route == 'information/information' && isset($this->request->get['information_id'])) {
$layout_id = $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']);
}
if (!$layout_id) {
$layout_id = $this->model_design_layout->getLayout($route);
}
if (!$layout_id) {
$layout_id = $this->config->get('config_layout_id');
}
$data['modules'] = array();
$modules = $this->model_design_layout->getLayoutModules($layout_id, 'content_top');
它将返回分配给content_top
答案 1 :(得分:1)
这是另一种方法,我在将一些模块转换为Opencart 2时遇到了同样的问题。我在客户端用jQuery做了。我JSON编码了我的模块数据,并在tpl中执行了以下操作:
<div id="my_module_<?php echo $module; ?>"></div>
<script type="text/javascript">
var data_json = '<?php echo $my_module_json; ?>';
var data = $.parseJSON(data_json);
var target = $('#my_module_<?php echo $module; ?>');
var position = '';
if ($(target).closest('#column-left').length){
position = 'column-left';
}
else if ($(target).closest('#column-right').length){
position = 'column-right';
}
else{
position = 'content';
}
var html = '';
if (position == 'content') {
$html +='HTML for content position';
// ... do whatever
}
else
{
$html +='HTML for column position';
// ... do something else
}
$(target).html(html);
</script>
似乎工作正常。