2

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

4

2 回答 2

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>

似乎工作正常。

于 2015-01-03T08:10:52.160 回答
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

于 2014-10-13T05:34:10.340 回答