нумерация кодигниторов с динамической структурой URL - PullRequest
1 голос
/ 07 ноября 2011

В моем приложении codeigniter у меня есть модуль статьи, который имеет три категории,

первичная категория вторичная категория третичная категория список статей

Теперь на первой странице показан аккордеон с вышеприведенной иерархией, за исключением списка статей, на которые пользователь может кликнуть, чтобы развернуть или нажать на название категории напрямую.

Таким образом, если пользователь нажимает на имя основной категории, все статьи будут перечислены с разбивкой по страницам на основе встроенной библиотеки нумерации страниц codeigniter.

Аналогичным образом, если щелкнуть третичную категорию, будут перечислены статьи только в этой категории. Проблема в том, что весь список статей обрабатывается одной функцией, и поэтому у меня есть такой маршрут.

$route['article/(:any)/(:any)/(:any)/(:any)'] = "articles/articles/show_article/$4";
$route['article/(:any)/(:any)/(:any)'] = "articles/articles/find_type/$3";
$route['article/(:any)/(:any)'] = "articles/articles/find_type/$2";
$route['article/(:any)'] = "articles/articles/find_type/$1";

и мой метод find_type

function find_type($str)
    {
        $rawstr = $str;
        $str = deurl($str);
        $ch = 1;
        $id = 0;
        $query = $this->db->get_where("articles_primary",array("primary_name"=>$str));
        if($query->num_rows==1) {
          $ch = 1;
          $id = $query->row('id');
        }
        $query = $this->db->get_where("articles_secondary",array("secondary_name"=>$str));
        if($query->num_rows==1) {
          $ch = 2;
          $id = $query->row('id');
        }
        $query = $this->db->get_where("articles_tertiary",array("tertiary_name"=>$str));
        if($query->num_rows==1) {
          $ch = 3;
          $id = $query->row('id');
        }
        $query = $this->db->get_where("articles_list",array("url_title"=>$rawstr));
        if($query->num_rows==1) {
          $ch = 4;
        }
        switch ($ch)
        {
            case 1:
              $this->show_articles_list($id,"primary",$rawstr);
              break;
            case 2:
              $this->show_articles_list($id,"secondary",$rawstr);
              break;
            case 3:
              $this->show_articles_list($id,"tertiary",$rawstr);
              break;
            case 4:
              $this->show_article($rawstr);
              break;
        }
    }

и наконец мой список статей

function show_articles_list($id,$tbl,$rawstr)
    {
        $query = $this->db->get_where("articles_list",array($tbl."_id"=>$id));

        $this->load->library('pagination');
        $config['base_url'] = current_url();
        $config['total_rows'] = $query->num_rows;
        $config['per_page'] = 9;
        $this->pagination->initialize($config);
        $page = $this->uri->segment(3);

        if($page=="") { $page = 0; }
        $this->db->limit(9,$page);
        $data["query"] = $this->db->get_where("articles_list",array($tbl."_id"=>$id));

        $this->template->write_view('maincontent', 'articles/articles_list',$data);
        //$this->template->write_view('subcontent', 'articles/related_articles',$data);
        $this->template->write("title","Laws",true);
        $this->template->write_view('rightcontent','general/include/query_document_tab');
        $this->template->render();
    }

как вы можете видеть, маршруты основаны на сегментах uri и, следовательно, разбиение на страницы не работает. Можно ли как-нибудь настроить нумерацию страниц для работы с текущей настройкой?

1 Ответ

0 голосов
/ 07 ноября 2011

Как насчет добавления другого параметра в функции и соответствующего изменения файла маршрутов:

function find_type($str, $page=0){
...
$this->show_articles_list($id,"primary",$rawstr, $page);
etc...
...
}

function show_articles_list($id,$tbl,$rawstr,$page)...

Маршруты:

$route['article/(:any)/(:any)/(:any)/(:any)'] = "articles/articles/show_article/$4/4";
$route['article/(:any)/(:any)/(:any)'] = "articles/articles/find_type/$3/3";
$route['article/(:any)/(:any)'] = "articles/articles/find_type/$2/2";
$route['article/(:any)'] = "articles/articles/find_type/$1/1";

Этот параметр используется для обозначения сегмента uri для нумерации страниц.

OR

Вы можете просто использовать $ this-> uri-> total_segments () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...