在Opencart 2中查找模块位置

时间:2014-10-08 11:01:48

标签: opencart opencart2.x

我正在尝试获取模块位置,以便我可以根据模板的放置位置更改模板。我曾经从控制器内部检查$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中实现同样的目标?

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>

似乎工作正常。