Pull to refresh

ЧПУ + GET

CodeIgniter *
Здравствуйте. Как известно из документации по CI, мы можем задавать controllers и actions через GET параметры (например ?c=stationery&act=contacts), либо использовать ЧПУ (например stationery/contacts), но тогда мы не можем передавать в url get параметры. По моему мнению, это не совсем правильно отказаться от get, т.к. мы не можем сделать универсальный pager (кто сталкивался, думаю, поймет), ни указать сортировку результата. Еще одной нерешенной задачей для меня было сделать расширенный поиск. По идее все параметры поиска задаются в URL, но некоторые поля могут указываться, некоторые нет. Конечно, это все обходится, но самым понятным способом было бы использование get параметров.

Для решения этой проблемы необходимо расширить класс CI_URL. Далее я приведу код класса, если что-то сделано не оптимально или не правильно, буду рад услышать любую критику.

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

class MY_URI extends CI_URI {
  
  var $_get_params = array();

  function _fetch_uri_string() {
    
    parse_str($_SERVER['QUERY_STRING'], $this->_get_params);
       
    $_GET = array();
    $_SERVER['QUERY_STRING'] = ''
    
    parent::_fetch_uri_string();  

  }
  
  function getParam($key) {
    if (isset($this->_get_params[$key])) {
      return $this->_get_params[$key];
    } else {
      return false;
    }
  }
  
  function getParams() {
    return $this->_get_params;
  }

}


* This source code was highlighted with Source Code Highlighter.


UPD. Улучшен парсер входных параметров. Спасибо homm

По коду должно быть все понятно. Сейчас приведу пример использования. Допустим нам надо сделать pager для каталога продукции.

Class Catalog extends Controller {



 function production() {

   $current_page = $this->uri->getParam(‘page’);

   /*  Выборка продуктов для текущей страницы */

 }

}

* This source code was highlighted with Source Code Highlighter.


URL для вызова этого action выглядит так: /catalog/produnction/?page=2
Tags:
Hubs:
Total votes 34: ↑21 and ↓13 +8
Views 11K
Comments Comments 43