Pergunta

Eu tenho uma interface A /Payments, onde o usuário deve ser capaz de filtrar por meio de faixa de preço, banco e outras coisas. Esses filtros são caixas de seleção padrão. Quando envio o formulário de filtro, todos os dados da postagem vão para outro método chamado pagamentos/pesquisa. Esse método executa a validação, salva os valores de postagem em uma sessão flashdata e redireciona o usuário de volta para /pagamentos que passam o nome flashdata via URL.

Portanto, meus links de paginação padrão sem filtros são exatamente assim:

payments/index/20/
payments/index/40/
payments/index/60/

E se você enviar o formulário de filtro, o URL de retorno é:

payments/index/0/b48c7cbd5489129a337b0a24f830fd93

Isso funciona muito bem. Se eu mudar o zero para outra coisa, ele pagina muito bem. A única questão, no entanto, é que os links de página << 1 2 3 4 >> não manterão o hash após o deslocamento da paginação. O CodeIgniter está gerando os links da página ignorando esse segmento URI adicional.

Minha configuração URI_SEGEMEGEN já está definida como 3:

$config['uri_segment'] = 3;

Não posso definir Uri_segment como 4 porque isso pode ou não existir. Alguma idéia de como posso resolver isso? É obrigatório que o IC tenha o deslocamento como o último segmento no URI? Talvez eu esteja tentando uma abordagem incorreta, então sou todos ouvidos.

Obrigado pessoal.

EDIT: Por que estou passando pelo nome flashdata via Uri, você pode perguntar? Porque permite que o usuário abra várias guias do navegador e faça pesquisas diferentes em cada guia. Para cada filtragem que você faz, um novo flashdata var é gerado.

Foi útil?

Solução

Apenas para usuários vindos do Google, aqui está a solução:

Na matriz de configuração da paginação, mudei minha base_url para isso:

$config['base_url'] = site_url('payments/index/' . $this->uri->segment(3) . '/' . $this->uri->segment(4));

Onde o segmento (3) é o meu número de deslocamento e segmento (4) é o hash. Portanto, neste caso, o hash pode ou não existir e a paginação ainda funcionará.

Outra abordagem pode ser a seguinte: se você for para pagamentos e não há ID de dados flash no URL, redireciona o usuário para pagamentos/pesquisa e cria uma matriz vazia com filtros vazios. Em seguida, ele redireciona de volta aos pagamentos/_new_flashdata_id_here_. Dessa forma, o URL sempre terá um ID de dados flash no URL e você poderá compensar a paginação no último segmento URI, como de costume.

Outras dicas

Por que não definir o hash como um item de sessão?

$this->session->set_userdata('session_flashdata_hash', $hash);

O hash estará disponível até que você o desative

$this->session->unset_userdata('session_flashdata_hash');

Ou até você destruir a sessão.

$this->session->sess_destroy();

Por que você não está checando para ver se o hash existe e define o uri_segment baseado nisso?

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