문제

저는 지난 몇 주 동안 CodeIgniter를 프레임워크로 사용하여 사이트를 개발해 왔습니다.나는 뭔가를 성취하는 가장 좋은 방법을 생각해 왔는데, 다른 언어의 다른 많은 프레임워크에서는 상대적으로 간단합니다.정렬 가능한 테이블.CodeIgniter는 URL에 메서드 매개변수가 포함되어 있기 때문에 기본적으로 쿼리 문자열을 끕니다.따라서 URL은 다음과 같습니다.

/controller/method/param1/param2

그냥 추가하면 된다고 생각할 수도 있지만 sortBy 그리고 sortOrder 컨트롤러 메소드에 대한 두 개의 추가 매개변수로 사용됩니다.재사용 가능한 컨트롤러를 갖고 싶기 때문에 특별히 그렇게 하고 싶지는 않습니다.쿼리 문자열 매개변수를 사용하면 PHP는 다음과 같은 매개변수가 있는지 쉽게 알 수 있습니다. sortBy.그러나 URL 기반 매개변수를 사용하는 경우 컨트롤러마다 다릅니다.

내 선택이 무엇인지 궁금했습니다.내가 볼 수 있는 한 그들은 다음과 같다:

  • sortBy 그리고 sortOrder 매개 변수를 흡수하고 재사용이 불가능한 구성 요소를 개발하십시오.
  • 데이터를 저장할 추가 컨트롤러가 있어야 합니다. sortBy 그리고 sortOrder (단, 사용자가 어디서 왔는지 알아야 하고 원래 페이지로 다시 보내야 하지만)
  • 위의 컨트롤러를 호출하는 일종의 AJAX 함수가 있습니다.그런 다음 페이지를 다시 로드하세요.
  • CodeIgniter를 해킹하여 쿼리 문자열을 다시 활성화하세요.실제로 이것이 유일한 옵션인 경우 이를 수행하는 방법에 대한 링크가 있으면 감사하겠습니다.

이렇게 간단한 작업이 그런 문제를 야기한다는 게 정말 믿기지 않습니다!뭔가 빠졌나요?누구든지 권장 사항이 있습니까?


설명을 위해 편집:저는 jQuery를 좋아하고 이미 사이트에서 사용하고 있으므로 TableSorter가 좋은 옵션입니다.하지만 페이지 매김을 포함하여 결과가 많을 가능성이 있는 페이지가 일부 있으므로 서버측 정렬을 수행하고 싶습니다.

도움이 되었습니까?

해결책

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

또한 누군가가 돌아올 때 테이블이 이전과 동일하게 정렬되도록 정렬을 기반으로 쿠키를 설정하도록 확장했습니다.

다른 팁

클라이언트 측 정렬에 문제가 없다면, jQuery용 Tablesorter 플러그인 꽤 좋은데요.

나는 상당히 복잡한 테이블에서 이것을 만났습니다.어려운 부분은 특정 변수에 따라 테이블이 커지거나 줄어들 수 있다는 것입니다!!큰 고통 :(

제가 처리한 방법은 다음과 같습니다..

URI에 쉼표 문자를 허용하도록 system/application/config/config.php를 조정했습니다.

$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
}

나는 지나치게 단순화했지만 당신은 아이디어를 얻었습니다.목적은 다음과 같은 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
}

이렇게 하면 별도의 기능이 필요하지 않으며 세 번째 세그먼트를 사용하여 정렬을 정의할 수 있습니다.

나는 이것을 사용하고 있습니다 : http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/

net.tutsplus.com에서

불행히도 그것은 당신이 좋아하지 않는 것(/controller/method/param1/param2)을 사용하고 있지만 페이지 매김이 필요할 때 모든 컨트롤러에 대해 이 기능(표시 기능)을 추가했습니다.아니면 그것으로부터 도우미를 만드십시오.

다른 예는 다음과 같습니다. http://www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/

최근에 이것을 추가했습니다. 테이블 분류기 (Prototype을 사용하는)을 내 페이지에 추가합니다.빠르고 구현하기가 매우 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top