2008-09-22 2 views
8

저는 CodeIgniter를 프레임 워크로 사용하여 지난 몇 주 동안 사이트를 개발해 왔습니다. 나는 다른 언어로 된 많은 프레임 워크에서 상대적으로 단순한 뭔가를 성취하는 가장 좋은 방법을 생각 해왔다 : 정렬 가능한 테이블. CodeIgniter는 URL에 메소드 매개 변수가 있기 때문에 기본적으로 쿼리 문자열을 끕니다. 당신은 단지 컨트롤러 메소드에 sortBysortOrder이 같은 추가 매개 변수를 추가 할 수 있다고 생각CodeIgniter를 사용하여 테이블 정렬을 수행하려면 어떻게해야합니까?

/controller/method/param1/param2 

: 같은 URL을 보일 수 있습니다. 특히 재사용 할 수있는 컨트롤러가 있기 때문에 주로 그렇게하고 싶지는 않습니다. 쿼리 문자열 매개 변수를 사용할 때 PHP는 sortBy이라는 매개 변수가 있는지 여부를 쉽게 알 수 있습니다. 그러나 URL 기반 매개 변수를 사용하는 경우 각 컨트롤러마다 달라집니다.

내 옵션이 무엇인지 궁금합니다. 단지 그것을 빨아, 그리고 몇 가지보다 적게보다는 재사용 가능한 구성 요소를 개발, 내 sortBysortOrder 매개 변수

  • 패스 : 최대한 멀리 볼 수 그들은 같은입니다.
  • sortBysortOrder을 세션에 저장하는 추가 컨트롤러가 있어야합니다 (출처를 알고 원래 페이지로 다시 보내야 함).
  • 위의 컨트롤러를 호출하는 일종의 AJAX 함수가 있습니다. 그런 다음 페이지를 다시로드하십시오.
  • Hack CodeIgniter가 쿼리 문자열을 다시 켭니다. 실제로이 옵션 만있는 경우이 작업을 수행하는 방법에 대한 링크가 도움이 될 것입니다.

나는 그런 간단한 작업이 그런 문제를 일으킬 것이라고 믿을 수 없다! 내가 놓친 게 있니? 누구든지 추천 사항이 있습니까?


명확한 설명을 위해 편집 : 저는 jQuery를 좋아합니다. 이미 사이트에서 사용하고 있으므로 TableSorter는 좋은 옵션입니다. 그러나 페이지 매김을 포함하여 잠재적으로 많은 수의 결과가있는 페이지가 있기 때문에 서버 측 정렬을 수행하고 싶습니다.

답변

5

나는이 방법을 사용하고 있습니다 : http://codeigniter.com/forums/viewthread/45709/#217816

가 나는 또한 누군가가 이전과 동일하게 분류되는 테이블 돌아 오면 너무 종류를 기반으로 쿠키를 설정하는 데 확장했다. 당신이 좋아하지 않는 것을 사용하고 불행하게도 net.tutsplus.com

에서 http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/

(/ 컨트롤러/방법/PARAM1/PARAM2)하지만 난이 추가되었습니다 :

+17

URL은 더 이상 존재하지 않습니다. – Chumillas

0

최근 내 페이지 묶음에 Table sorter (프로토 타입을 사용함)을 추가했습니다. 구현이 빠르고 쉽습니다.

2

클라이언트 측에서 정렬해도 괜찮 으면 the Tablesorter plugin for jQuery이 꽤 좋습니다.

+0

고마워요,이 tablesorter에 당신은 데이터의 많은로드하려는 경우에 적합하지 않은 한 가지에 전체 질의 결과를로드 나에게 시간 –

+1

을 많이 절약 할 수 . – Randell

+0

@Randell - 페이지 매김 기능이 내장되어 있지만 시도하지 않았으며 데이터 세트가 충분히 크면 여전히 맞습니다. –

1

상당히 복잡한 표로이 문제가 발생했습니다. 어려운 부분은 특정 변수에 따라 테이블이 커질 수 있다는 것입니다! 큰 고통 :(여기

내가 그것을 처리하는 방법은 .../설정/config.php를

조정 시스템/애플리케이션이 URI의 쉼표 문자 수 있도록 :

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,'; 

가 내 컨트롤러를 조정을 정렬 기능 :

function sorter() { 
    //get the sort params 
    $sort = explode(",",$this->uri->segment(3)); //the 3rd segment is the column/order 
    //pass the params to the model 
    $data = $this->model_name->get_the_data($sort[0],$sort[1]); 
    $this->_show($data); 
} 
function _show($data) { 
    //all the code for displaying your table 
} 

나는 간략하게 설명했지만 아이디어는 얻을 수 있습니다.이 직업을 처리하는 것입니다 -

분류기의 기능은 디스플레이/템플릿/뷰 로직을 처리하는 또 다른 내부 함수를 호출 SORTORDER,

/컨트롤러/분류기/럼 이름 : 목적이 같은 URL을하는 것입니다 정렬 호출을 호출하고 모델에서 적절한 데이터를 가져옵니다. 물론

,이는 당신의 현재 기능에 감소 될 수있다 :

function showGrid() { 
    $sort = $this->uri->segment(3); 
    if ($sort) { 
    //get the data sorted 
    } else { 
    //get the data the default way 
    } 
    //rest of your view logic 
} 

그 방법은, 당신도 별도의 기능을 필요로하지 않는다 - 당신의 정렬을 정의하는 세 번째 세그먼트를 사용할 수 있습니다.

+0

URI 세그먼트 3을 하드 코딩하는 대신 분류기 함수에 인수를 사용할 수 있습니다. 그렇지 않으면 꽤 좋은 생각처럼 보입니다. –

+0

감사합니다. 매우 도움이됩니다! –

관련 문제