Я новичок в codeigniter, у меня есть сайт с тремя страницами. (Главная о контакте) Я хочу поставить привязку к каждому из них и поймать последний сегмент, используя $ this-> uri-> segment () в функции индекса контроллера. Затем с помощью переключателя я хочу перейти к конкретным страницам.

Это один из моих якорей:

<h3  id="anchor_storefront"><?php echo anchor('jstorecontroll/home', 'Home'); ?></h3>

И это мой код в индексе на контроллере:

 switch( $this->uri->segment(2) )
        {
            case "":
            case "home":
                $this->load->view('public/home');
                break;
        }

Может ли эксперт помочь мне? Спасибо

0
user1427195 29 Июл 2013 в 19:09
Взгляните на маршрут CI в руководстве пользователя.
 – 
Hashem Qolami
29 Июл 2013 в 19:30

1 ответ

Лучший ответ

Как насчет того, чтобы просто иметь функцию для каждой страницы? Это соответствует обычному шаблону URI CodeIgniter example.com/class/function/id/ - примерно так:

class Jstorecontroller extends CI_Controller
{

    function index()
    {
        //Do what you want... load the home page?
    }

    //Load the 'home' page
    function home()
    {
        $this->load->view('public/home');
    }

    //Load the 'about' page
    function about()
    {
        $this->load->view('public/about');
    }

    //Load the 'contact' page
    function contact()
    {
        $this->load->view('public/contact');
    }

}

Маршрутизацию можно использовать для сопоставления URL-адресов: для сопоставления jstorecontroll < / em> в качестве первого сегмента и чего-либо в качестве второго сегмента функции index в вашем контроллере jstorecontroll, вы можете использовать этот маршрут (в application / config / routes.php ):

$route['jstorecontroll/(:any)'] = "jstorecontroll/index/$1";

Вы можете использовать регулярное выражение, чтобы ограничить то, что отображается, например:

$route['jstorecontroll/([a-z]+)'] = "jstorecontroll/index/$1";

Тогда у вас может быть функция в вашем контроллере, которая будет фильтровать и загружать соответствующую страницу. Однако будьте осторожны с пользовательским вводом - не верьте им! Убедитесь, что вы продезинфицировали ввод.

class Jstorecontroll extends CI_Controller
{

    function index($page = FALSE)  //Default value if a page isn't specified in the URL.
    {
        if($page === FALSE)
        {
            //Do what you want if a page isn't specified. (Load the home page?)
        }
        else
        {
            switch($page)
            {
                case "home":
                    $this->load->view('public/home');
                    break;
                case "about":
                    $this->load->view('public/about');
                    break;
                case "contact":
                    $this->load->view('public/contact');
                    break;
            }
        }
    }

}

Использование вышеуказанного маршрута может привести к нежелательным результатам, если у вас есть другая функция в этом контроллере, которую вы хотите вызывать из URI, они не будут вызываться, а вместо этого будут отображаться как параметр функции index. Если вы не посмотрите на изменение (или добавление) маршрутов, или вы не можете изучить функции переназначения. Лично я бы просто использовал функцию для каждой страницы!

1
jleft 29 Июл 2013 в 20:17
Это то, что я ищу. Большой!
 – 
user1427195
31 Июл 2013 в 17:39