Jestem podstawowym użytkownikiem code igniter i PHP, mam kilka produktów z filtrami. Jak utworzyć taki link URL:

http://somepage.pl/products?color=red

Wiem, że mogę zrobić powyższy adres URL, gdy zmienię wiersz konfiguracji:

$config['enable_query_strings'] = FALSE; na TRUE.

Ale chcę używać tej opcji tylko jednego kontrolera i jednej funkcji.

1
Wojciech Dąbrowski 20 listopad 2019, 21:15

2 odpowiedzi

Najlepiej jest polegać na natywnym przepisywaniu adresu URL Codeigniter.

Domyślnie (nie wchodzę tutaj w niestandardowe trasy, ale możesz je zrozumieć) adresy URL obsługiwane przez Codeigniter będą wyglądać następująco:

BASE URL/Controller/method/params

Podstawowy adres URL będzie tym, co zdefiniujesz w konfiguracji, a najczęściej będzie to domena podstawowa Twojej witryny, na przykład example.com.

Ponieważ CI jest zbudowany w oparciu o architekturę MVC, wszystkie funkcje muszą „żyć” różnymi metodami w ramach jednego lub wielu kontrolerów. Na przykład możesz mieć kontroler o nazwie products, a wewnątrz tego kontrolera możesz mieć metodę (dla uproszczenia: funkcja) o nazwie lookupProductById, która przyjmuje jeden parametr ($product_id) . Będzie to wyglądać tak:

class Products extends CI_Controller {
   public function lookupProductById($product_id = null)
   {
      // whatever you need to do (like querying the database to fetch info for the product with a certain product ID) goes here
     // for instance, start by checking that the product ID was passed in the URI
     if  ($product_id == null)
     {
        // handle exception
     }

     else
     {
        // query the database and fetch info for the product whose ID is $product_id
     }

   }

}

Tak więc podczas uzyskiwania dostępu do example.com/products/lookupProductById/8 będziesz mógł pobrać informacje związane z identyfikatorem produktu 8

Możesz przeczytać dokumentację CI (rozdziały wprowadzające i samouczki poprowadzą Cię przez (bardzo) podstawowe zrozumienie, jak działają frameworki MVC, w jaki sposób kontrolery, modele i widoki współdziałają w celu uzyskania wyniku itp.), aby lepiej zrozumieć, w co się pakujesz :)

1
Javier Larroulet 20 listopad 2019, 22:05

Dzięki za odpowiedź. Powinienem wyjaśnić mój problem. Teraz mam funkcję. Kod:

public function products($start=0) {
        //$this->benchmark->mark('code_start');
        $this->session->set_userdata('referred_from', uri_string());
        $t = array (
            'products' => $this->database_model->get_products($start, 10),
            'title' => 'Produkty'
        );

        $howmany = $this->database_model->howmany('products');
        $config['page_query_string']      = TRUE;
        $config['query_string_segment']    = 'page'; // the query string param for the page numbers
        $config['reuse_query_string']      = TRUE;
        $config['base_url'] = base_url().'/database/products';
        $config['total_rows'] = $howmany;
        $config['per_page'] = '10';
        $config['uri_segment'] = 3;
        $config['num_links'] = 5;
        $config['cur_tag_open'] = '<li class="page-link" aria-current="page" style="background-color: #c03a5e; color: #ffffff"><b>';
        $config['cur_tag_close'] = '</b></li>';

        $config['attributes'] = array('class' => 'page-link', 'style' => 'display:inline');

        $this->pagination->initialize($config);
        $t['pagination'] = $this->pagination->create_links();
        $t['howmany'] = $howmany;
        $t['types'] = $this->database_model->get_types();

        $this->layout->blok('database/show_products', 'content', $t);
        $this->layout->make('theme');
        //$this->benchmark->mark('code_end');
        //echo $this->benchmark->elapsed_time('code_start', 'code_end');
    }

Mogę napisać ten sam kod, który będzie filtrował te produkty na przykład po kolorze, ale chcę utworzyć link jak na górze. Ludzie będą mogli udostępniać linki.

-1
Wojciech Dąbrowski 21 listopad 2019, 00:47