2014-10-08 2 views
2

배치 위치에 따라 템플릿을 변경할 수 있도록 모듈 위치를 얻으려고합니다. 컨트롤러 내부에서 $setting['position']을 확인한 다음보기로 전달했지만 레이아웃 관리자를 통해 모듈 위치 지정이 완료되면 해당 속성을 더 이상 사용할 수 없습니다.Opencart 2에서 모듈 위치 찾기

이것은 Opencart 1.5.6에서 작동하는 것입니다 - 같은 일이 Opencart이 달성 될 수있는 방법

// Module Controller 
$this->data['position'] = $setting['position']; 

// Module View 
<?php if ($position === "content_top" or $position === "content_bottom") { ?> 
    <!-- position specific markup --> 
<?php } ?> 

? 이전에

+0

아직 OC 2에 대처할 시간이 없었지만 모듈이로드되고 인스턴스화 된 방법을 전체 시스템에서 살펴본 결과, 거대한 핵심 시스템 수정 없이는 불가능한 것처럼 보일 수 있습니다. 내가 그것을 설치하고 조금 돌아 다니면서 더 정확하거나 더 정확하게 말할 수 있습니다 ... – shadyyx

+0

은 OC 2 모듈 위치의 변경 기능입니다. OC 2.0에 따라 코드를 설정해야합니다. OC 2의 모듈 위치 설정에 대한 내용보기 - http://www.harnishdesign.net/blog/2014/10/09/how-to-set-layout-position-of-module-in-opencart-2-0/ – HarnishDesign

+0

@ HarnishDesign은 모듈 위치 설정을 설명하지만 제어기에서 모듈 위치를 찾는 것을 설명하지 않습니다 – mdgriffin

답변

1

우리는

지금 Opencart 2.0에서 우리는 position(content_top/content_bottom) 특히 레이아웃 페이지 (시스템/디자인/레이아웃)

에서 모듈 설정 특정 모듈을위한 모듈 페이지 (확장/모듈)에 position(content_top/content_bottom)을 설정하는 데 사용 그것이 모듈의 컨트롤러에 $setting['position'];이없는 이유입니다.

원하는 컨트롤러에 원하는 position(content_top/content_bottom)과 함께이 코드를 사용하려면이 코드를 사용하십시오. 내가 한 jQuery로 클라이언트 측에서 Opencart 2. 작업을 내 모듈의 일부를 변환하는 동안

$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

+0

이것은 특정 레이아웃과 특정 위치에있는 모든 모듈의 이름 만 반환합니다. 현재 모듈이 적용된 위치입니다. –

1

다른 방법은 할당 된 모듈을 반환합니다, 저도 같은 문제가 있었다 . 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> 

괜찮습니다.