2013-05-06 27 views
5

Như tôi biết Wordpress có chức năng is_home() để xác định trang chủ.
Trong Yii tôi sử dụng giải pháp như thế này Yii check if homepageis_home() chức năng trong Codeigniter

Trong CI, các mẫu trên thực tế, tôi gặp rất nhiều lần với sự cần thiết của nó. Ví dụ: thêm một số lớp css trong thẻ <body>.

Tất cả những gì tôi tìm thấy http://ellislab.com/forums/viewthread/194637/#916899
Ai đó có thể giúp tôi hoặc viết giải pháp riêng không?

Thank trước

+3

Vâng, tôi sẽ đề nghị xác định cho mình những gì "nhà" nghĩa là gì. Đây có phải là URI yêu cầu của '/' hay một số URI khác không. Nếu vậy, sẽ khá đơn giản để kiểm tra URI yêu cầu để xem nó có khớp không. –

+0

không có hành vi phạm tội nhưng Laravel làm cho những điều ngớ ngẩn này dễ dàng hơn .... nó có lẽ có cơ chế bộ định tuyến tốt nhất trong số các khuôn khổ php. ;) – itachi

Trả lời

5

Bạn có thể sử dụng $this->router->fetch_class() để có được bộ điều chỉnh dòng và $this->router->fetch_method() để có được phương pháp này quá nếu cần thiết.

Vì vậy, giống như ví dụ Yii bạn liên kết đến, bạn có thể làm một cái gì đó giống như

$is_home = $this->router->fetch_class() === 'name_of_home_controller' ? true : false; 

Hoặc để phù hợp với phương pháp quá

$is_home = ($this->router->fetch_class() === 'name_of_home_controller' && $this->router->fetch_method() === 'name_of_home_method') ? true : false; 

Bằng cách này ngay cả khi url trang là http://yoursite.com/ (giả định điều khiển nhà + phương pháp là mặc định), http://yoursite.com/home_controller/, http://yoursite.com/something/that/routes/to/home/controller/, vv, miễn là nó gọi bộ điều khiển đó, nó sẽ đặt $ is_home thành true.

Chỉnh sửa: Ngoài ra, bạn có thể sử dụng ($this->router->fetch_class() === $this->router->default_controller) nếu bạn không muốn nêu rõ bộ điều khiển chính và được đặt thành bộ điều khiển mặc định.

Cập nhật cho CI v3:
$this->router->fetch_class()$this->router->fetch_method() không được chấp nhận trong CI v3. Sử dụng $this->router->class$this->router->method để thay thế.

17

Tôi chỉ muốn thêm câu trả lời của mình ở đây vì phương pháp khác không hoạt động với phiên bản CI được sửa đổi nhiều của tôi.

đoạn Đây là những gì tôi sử dụng để phát hiện nếu chúng ta trên trang chủ

if (!$this->uri->segment(1)) { 
    // We are on the homepage 
} 
0
if($this->uri->uri_string() == ''){ 
echo"You are on homepage"; 
} 
0

Nếu bạn không có một helper tùy chỉnh tạo; nếu không bên trong bất kỳ tệp trợ giúp tùy chỉnh nào của bạn chỉ cần dán bất kỳ đoạn mã nào sau đây và bạn sẽ có thể sử dụng is_home() từ bất kỳ vị trí nào trong Codeigniter.

function is_home() 
{ 
    $CI =& get_instance(); 
    return (!$CI->uri->segment(1))? TRUE: FALSE; 
} 

HOẶC

function is_home() 
{ 
    $CI =& get_instance(); 
    return (strtolower($CI->router->fetch_class()) === $CI->router->default_controller && $CI->router->fetch_method() === 'index') ? true : false; 
} 
1

Tại sao không chỉ đơn giản là

public function name_of_home_method() 
    { 
     $data['is_home'] = true; 
    }