Pergunta

Eu tenho vindo a desenvolver um site nos últimos algumas semanas usando CodeIgniter como o quadro. Eu estive pensando na melhor maneira de realizar algo, que em um monte de outras estruturas em outros idiomas é relativamente simples: tabelas classificáveis. CodeIgniter desliga seqüências de consulta, por padrão, porque seus URLs conter parâmetros do método. Assim, uma URL pode parecer:

/controller/method/param1/param2

Você pode pensar que você poderia apenas adicionar em sortBy e sortOrder como dois parâmetros adicionais para o método de controlador. Eu particularmente não quero fazer isso, principalmente porque eu quero ter um controlador reutilizável. Quando você usa consulta parâmetros de cadeia, PHP pode facilmente dizer se há um parâmetro chamado sortBy. No entanto, quando você estiver usando parâmetros de URL com base, ele irá variar de acordo com cada controlador.

Eu queria saber o que eram as minhas opções. Tanto quanto eu posso ver que eles são algo como:

  • Passe em meus parâmetros sortBy e sortOrder, apenas chupa-lo, e desenvolver algum componente menos-que-reutilizável para ele.
  • têm um controlador adicional, que irá armazenar o sortBy e sortOrder na sessão (embora teria que saber de onde você veio, e enviá-lo de volta para a página original).
  • Tenha algum tipo de função AJAX, que chamaria o controlador acima; em seguida, recarregar a página.
  • Corte CodeIgniter para transformar consulta cordas novamente. Na verdade, se esta é a única opção, todos os links para como fazer isso seria apreciada.

Eu não posso acreditar uma tarefa tão simples iria apresentar um problema tão grande! Estou esquecendo de algo? Alguém tem alguma recomendação?


Editar para esclarecimentos: Eu amo jQuery, e eu já estou usando-o no site, de modo TableSorter é uma boa opção. No entanto, eu gostaria de fazer do lado do servidor de classificação, pois há algumas páginas com potencialmente um grande número de resultados, incluindo a paginação.

Foi útil?

Solução

Tenho vindo a utilizar este método: http://codeigniter.com/forums/viewthread/45709/#217816

Eu também expandiu para biscoitos definido com base fora da sorte assim quando alguém volta a tabela é classificada a mesma de antes.

Outras dicas

Se você está OK com a classificação no lado do cliente, o plugin Tablesorter para jQuery é bastante agradável.

Eu corri para isso com uma tabela bastante complexo. A parte mais difícil era que a tabela pode crescer / diminuir dependendo de certas variáveis ??!! dor Big: (

Aqui está como eu lidei com isso ..

sistema Ajustado / application / config / config.php para permitir que o personagem vírgula na URI:

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

Ajustar meu controlador com uma função de classificação:

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
}

Eu simplista, mas você começa a idéia. O objetivo é ter uma url como este:

/ controller / classificador / columnname, sortorder

A função de classificador chama outra função interna para lidar com a lógica de exibição / template / vista -. É o trabalho é lidar com a chamada triagem e obter os dados apropriados a partir do modelo

Claro, isso poderia ser reduzido para apenas sua função atual:

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
}

Dessa forma, você não precisa mesmo de uma função separada - e pode usar o terceiro segmento para definir sua classificação

.

Eu tenho usado este: http : //net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/

a partir net.tutsplus.com

Infelizmente ele está usando o que você não gosta (/ controller / método / param1 / param2), mas eu adicionei este (a função de visualização) para cada controlador quando eu preciso de paginação. Ou fazer um ajudante dele.

Outro exemplo é aqui: http: //www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/

Recentemente adicionado este Tabela classificador (que utiliza Prototype) para um monte de minhas páginas. É rápido e muito fácil de implementar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top