2010-02-04 2 views
4

좋아, 그래서 내가 codeigniter에 아주 새로운 그리고 난 지금까지 배운 것을 내가 알아낼 수 없습니다에서 내가 어떻게 동적 category -> subcategory -> subsubcategory system을 만들 수 있습니다. 제게 약간의 가이드 라인을 제발 주시겠습니까 ... 몇 가지 참조, 그걸 달성하기 위해 무엇을 배워야하는지에 대한 안내는 무엇입니까? 덕분에CodeIgniter의 카테고리 -> 하위 범주 -> subsubcategory 시스템을

나는 URL과 같이해야합니다. www.site.com/category/subcategory/subsubcategory/etc..., 내 말이 무슨 뜻인지 알 것입니다.

+0

추가 정보가 필요합니다. 이걸 eshop으로 원합니 까? CMS? 또는 순수 컨트롤러? –

+0

내가 기사 시스템을 원한다고 가정 해 봅시다. – kmunky

답변

1

당신은 할 수 :

는 컨트롤러 category을 만들 그것에 어떤 URI를 라우팅하고이 문서 클라이언트가 요청대로 선택하는 인수의 구문 분석 내부 로직의 사용 http://codeigniter.com/user_guide/general/urls.html

소개 : URL에 대한

URI 라우팅 : http://codeigniter.com/user_guide/general/routing.html

+0

"컨트롤러 카테고리"는 무엇을 의미합니까? 제발 좀 더 구체적으로 좀 해주실 수 있어요? 내가 어떻게 할 수 있니, 제발 좀 도와 줄 수 있니? 덕분에 – kmunky

+0

MVC 무엇인지 전혀 모를 것 같습니다. 나는 당신이 구글 MVC에 대한 조언을 읽고 나서, codeigniter에 가서 그것에 대해 MVC 구현을 읽는다. –

+0

저는 컨트롤러가 무엇인지 알고 있습니다. (또한 CI와 함께 기본을 사용하는 방법을 알고 있습니다.) MVC의 원칙을 알고 있습니다. URL과 라우팅에 대해 읽었지만 제안은 여전히 ​​울리지 않을 것입니다. MVC와 CI가 처음이긴하지만. – kmunky

4

저는 PyroCMS에서 페이지 관리자 용으로이 작업을 수행했습니다. 쉬운 작업.

각 페이지는 다음 페이지 슬러그의 각을 통해 루프와 아이를 조인 올바른 페이지를 읽고, 자신의 슬러그 및 PARENT_ID 있습니다. 얼마나 많은 아이들이 있는지를 안다. 그래서 5 명의 아이들이 있다면 그것은 5 번째 자기 결합 테이블을 선택한다.

public function get_by_path($segments = array()) 
{ 
// If the URI has been passed as a string, explode to create an array of segments 
if(is_string($segments)) 
    { 
    $segments = explode('/', $segments); 
    } 

// Work out how many segments there are 
    $total_segments = count($segments); 

// Which is the target alias (the final page in the tree) 
    $target_alias = 'p'.$total_segments; 

    // Start Query, Select (*) from Target Alias, from Pages 
    $this->db->select($target_alias.'.*'); 
    $this->db->from('pages p1'); 

    // Loop thorugh each Slug 
    $level = 1; 
    foreach($segments as $segment) 
    { 
     // Current is the current page, child is the next page to join on. 
     $current_alias = 'p'.$level; 
     $child_alias = 'p'.($level - 1); 

     // We dont want to join the first page again 
     if($level != 1) 
     { 
      $this->db->join('pages '.$current_alias, $current_alias.'.parent_id = '.$child_alias.'.id'); 
     } 

     // Add slug to where clause to keep us on the right tree 
     $this->db->where($current_alias . '.slug', $segment); 

     // Increment 
     ++$level; 
    } 

    // Can only be one result 
    $this->db->limit(1); 

    return $this->db->get()->row(); 
} 

그것은 조금 견과류입니다 그러나 그것은 완벽하게 작동합니다 : 여기

는 코드의 예입니다. 이것은 PyroCMS가 ID와 페이지 URI가 일치하는 룩업 테이블을 유지하기 때문에 실제로 느릴 수 있습니다.

현재 전체 모델을 볼 수 있습니다

http://github.com/philsturgeon/pyrocms/blob/master/application/modules/core/pages/models/pages_m.php

+0

코드 조각에 @Phil에게 감사드립니다. 당신이 나를 붙 잡히면 나를 도울 수 있기를 바랍니다.) 나는 PHP, CI 및 MVC에 익숙하지 않습니다 ... 그래서 나는 그것을 얻을 수있을 것입니다 :) – kmunky

0

나는 필의 생각에 동의하고 나는 또한 (당신은 예를 들어, 모듈 형 확장을 사용하는 경우) 별도의 모듈을 만들 수 있다는 것을 상상 한을 처리하기를 카테고리를 일반적인 방식으로 사용합니다. 그런 다음 다른 프로젝트에서 해당 모듈을 재사용 할 수 있습니다. 기본적으로 새 모듈은 범주 및 하위 범주 (계층 구조)를 처리 할 수 ​​있습니다.

관련 문제