web-dev-qa-db-fra.com

Page de paramétrage de Codeigniter (contrôleur par défaut)

J'essaie d'implémenter des modèles de page dans mon application codeigniter. Les modèles fonctionnent par exemple. J'ai une page de blog, que j'essaie d'assigner comme page d'accueil, avec une vue et une pagination différentes, etc. Lorsque je rédige www.mywebsite.com/blog, il est ouvert dans le modèle de page d'accueil ou suppose que j'ai une page www.mywebsite.com/about, il est également ouvert dans le modèle de page. Mais lorsque j'essaie d'accéder à mon site Web via www.mywebsite.com, j'ai une page d'erreur 404. Comment puis-je assigner ma page de blog comme page d'accueil?

Contrôleur de page: 

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 }
}

dans mes itinéraires, j'ai configuré mon contrôleur par défaut en contrôleur de page

$route['default_controller'] = "page";
7
user1621727

Le problème est qu'il n'y a pas de segment d'URI lorsque vous visitez www.mywebsite.com. Vous pouvez essayer de définir la valeur par défaut comme suit:

$this->uri->segment(1 , 'blog')
0
koala_dev

application/config/routes.php

$route['default_controller'] = 'namecontroller';
7
Serip88

Votre code 

// 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());

le code de segment uri 

$this->uri->segment(1)

est à la recherche du premier segment d’URL, lorsque vous naviguez sur votre site comme www.yousite.come/blog cela fonctionnera, mais lorsque vous effectuerez www.votresite.com, le premier segment d’URI manquera et il renverra la valeur false, je vais donc afficher 404 pages.

Solution: Vous pouvez simplement ajouter le second paramètre à la fonction comme 

$this->uri->segment(1,'blog');

maintenant, si le premier segment d'URL est manquant, il ne retournera pas false, il retournera le "blog" par défaut vlaue

Pour plus d'informations à ce sujet, vous pouvez consulter la documentation de codeingitor

0
Dexture