php - objeto - url amigables codeigniter
PĆ”gina de inicio de configuraciĆ³n de Codeigniter(controlador predeterminado) (3)
Estoy tratando de implementar plantillas de página en mi aplicación codeigniter, la creación de plantillas funciona bien, por ejemplo, tengo una página de blog, que estoy tratando de asignar como mi página de inicio, con diferentes vistas y paginación, y así sucesivamente. Cuando escribo www.mywebsite.com/blog, se abre en la plantilla de la página de inicio, o supongo que tengo una página en www.mywebsite.com/about, también se abre en la plantilla de la página. Pero cuando intento acceder a mi sitio web a través de www.mywebsite.com, tengo una página de error 404. ¿Cómo puedo asignar mi página de blog como página de inicio?
Controlador de página:
class Page extends Frontend_Controller {
public function __construct(){
parent::__construct();
$this->load->model(''page_m'');
}
public function index() {
// Fetch the page template
$this->data[''page''] = $this->page_m->get_by(array(''slug'' => (string) $this->uri->segment(1)), TRUE);
count($this->data[''page'']) || show_404(current_url());
add_meta_title($this->data[''page'']->title);
add_meta_keyword($this->data[''page'']->keywords);
add_meta_description($this->data[''page'']->description);
// Fetch the page data
$method = ''_'' . $this->data[''page'']->template;
if (method_exists($this, $method)) {
$this->$method();
}
else {
log_message(''error'', ''Could not load template '' . $method .'' in file '' . __FILE__ . '' at line '' . __LINE__);
}
// Load the view
$this->data[''subview''] = $this->data[''page'']->template;
$this->load->view(''_main_layout'', $this->data);
}
private function _page(){ // methods }
private function _homepage(){ // methods }
}
en mis rutas, configuré mi controlador predeterminado para el controlador de página
$route[''default_controller''] = "page";
El problema es que no hay segmento de URI cuando visita www.mywebsite.com
. Puede intentar establecer el valor predeterminado como:
$this->uri->segment(1 , ''blog'')
Tu codigo
// Fetch the page template
$this->data[''page''] = $this->page_m->get_by(array(''slug'' => (string) $this->uri->segment(1)), TRUE);
count($this->data[''page'']) || show_404(current_url());
el código del segmento uri
$this->uri->segment(1)
está buscando el primer segmento de url, cuando navega en su sitio como www.yousite.come / blog, funcionará, pero cuando lo haga www.yoursite.com falta el primer segmento de uri, por lo que devolverá falso, por lo que mostraré la página 404.
Solución: puede agregar el segundo parámetro a la función como
$this->uri->segment(1,''blog'');
ahora si falta el primer segmento de url, no devolverá falso, devolverá el vlaue ''blog'' predeterminado
Para obtener más información acerca de esto, puede ver la documentación del codeingitor
application / config / routes.php
$route[''default_controller''] = ''namecontroller'';