Как стать автором
Обновить

ЧПУ + GET

Время на прочтение2 мин
Количество просмотров11K
Здравствуйте. Как известно из документации по 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
Теги:
Хабы:
Всего голосов 34: ↑21 и ↓13+8
Комментарии43

Публикации

Истории

Ближайшие события

24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань