2012-08-27 3 views
0

2 개 제품으로 만 시작되는 사이트를 만들고 있으므로 카테고리 메뉴가 적합하지 않으며 제품 전용 메뉴를 만들려고합니다.Opencart에서 제품 전용 메뉴를 만드는 방법은 무엇입니까?

나는 상업 테마를 사용하고 있는데 그것은 자동적 header.tpl의 카테고리 메뉴를 생성

나는 제품 메뉴를 만들 필요가 있지만 까다로운 도착 코더 PHP없는, 지금까지 내가 가진 :

<ul id="topnav"> 
<?php foreach ($products as $product) { ?> 
<li><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></li> 
<?php } ?> 
</ul> 

내가 어디에서 잘못 될지 아는 사람이 있습니까?

+0

이 때문에 정의되지 않은 변수이지만, 어떻게이 $ 제품 및 $ 제품 변수를 정의합니까 : 당신이 그것을 필요로하는 곳에

그냥이 코드를 넣어? – morktron

+1

foreach 조건을 실행하기 전에 $ 제품에 배열 또는 오브젝트 형식의 데이터가 포함되어 있는지 확인하십시오. 그런데 print_r을 사용하고 출력을 먼저 확인하기 위해 종료 할 수 있습니다. –

+0

에릭 덕분에 에릭, 나는 그걸 줬어.하지만 내가 시작한 곳으로 데려다 줄 변수를 정의해야한다고 생각해.) – morktron

답변

0

OpenCart 포럼의 친절한 회원 덕분에 답변을 찾았습니다.

<?php 
    $this->load->model('catalog/product'); 

    $products_1 = $this->model_catalog_product->getProducts($data = array());         
    if ($products_1) {$output = '<ul id="topnav">';}            
    foreach ($products_1 as $product_1) {               
     $output .= '<li>';                           
     $unrewritten = $this->url->link('product/product', 'product_id=' . $product_1['product_id']);       
     $output .= '<a href="'.($unrewritten).'">' . $product_1['model'] . '</a>';       
    } 
    if ($products_1) {$output .= '</ul>';}            
    echo $output;               
    ?> 

Credit goes to the forum member here.

2

Opencart는 Model-View-Controller 프레임 워크 (MVC)를 사용하여 컨트롤러가 모델과 데이터를 검색하고 데이터를 준비한 다음 View (Opencart의 .tpl 파일)에 전달하여 적절하게 표시합니다 .

header.tpl에는 아직 header.php 컨트롤러에서 준비되지 않았기 때문에 $ products 배열에 대한 데이터가 없습니다. 그래서 헤더 컨트롤러 (카탈로그/컨트롤러/header.php)의 인덱스() 함수에서 우리가 원하는 방법을 준비의 우리의 모델에서 모든 데이터를 얻을 수 있도록 다음 뷰에 전달 :

$this->load->model('catalog/category'); // 
$this->load->model('catalog/product'); //Load our models so the controller can get data 
$categories = $this->model_catalog_category->getCategories(0); //get all top level categories 
$all_products = array(); 
foreach ($categories as $category) //go through each category and get all the products for each category 
{ 
$category_products = $this->model_catalog_product->getProductsforCategoryId($category['category_id']); //returns product IDs for category 
foreach ($category_products as $category_product) 
{ 
    $product_data = $this->model_catalog_product->getProduct($category_product); //fetch product data for this product then add it to our array of all products 
    $all_products[] = array(
     'href'  => $this->url->link('product/product', 'product_id=' . $product_data['product_id']), 
     'name'  => $product_data['name'] 
    ); 
} 
} 
$this->data['products'] = $all_products; //Now pass our product array data to the view, in the view this will be the $products array 

이를 모든 제품이 최상위 카테고리에만 속하고 하위 카테고리에는 속하지 않는다고 가정합니다. 장래에 최상위 카테고리의 하위 카테고리를 만드는 경우 해당 하위 카테고리를 반복하고 각 카테고리의 제품을 가져와야합니다.

+0

Wow thanks Bhavik! MVC 프레임 워크에 익숙합니다. 프론트 엔드 개발자의 관점에서 볼 수 있습니다. 이것이 내 기술을 뛰어 넘는 방법이라고 생각합니다. 누군가를 고용해야만합니다. 또한이 모든 vqmod를 사용하여 코어 파일을 편집하고 업그레이드 할 필요가 없도록해야합니다. 다시 감사 Bhavik! :) – morktron

+0

헤더 컨트롤러 (index() 함수 어딘가에)에 코드를 복사하여 복사 한 다음보기 (header.tpl)에서 질문에 지정한 코드를 추가하면됩니다. 또한 vqmod를 사용하지 않아도 opencart에서 기본값으로 개발을 시작할 때 기본 테마를 자신의 테마로 복제 한 다음 업그레이드 한 후에이 폴더를 테마 폴더에 복사/붙여 넣기하십시오. –

+0

감사 Bhavik, 나는 그것을 줬다. 그러나 나는 얻었다 : 치명적인 오류 : ***/catalog/controller/common/header의 정의되지 않은 메소드 ModelCatalogProduct :: getProductsforCategoryId()를 호출한다.PHP on line 153 : $ category_products = $ this-> model_catalog_product-> getProductsforCategoryId ($ category [ 'category_id']); // 범주의 제품 ID를 반환합니다. header.php 파일은 템플릿의 일부가 아니므로 확실하게 핵심 모듈입니다. – morktron

관련 문제