2012-03-28 2 views
0

J'ai fait une sorte de CMS en utilisant CodeIgniter. Il charge le contenu de la page à partir de la base de données en fonction du texte slug transmis dans le paramètre URL comme par exemple. à propos, services, contact.Comment charger une page à l'aide du contrôleur Codeigniter?

Dans le code du contrôleur, j'ai remappé la méthode d'index pour prendre le slug comme paramètre car les méthodes d'index par défaut n'autorisent pas les paramètres. Vérifiez le code de mon contrôleur page sur le lien ci-dessous:

http://pastebin.com/MwsVzRwQ

La façon dont cela fonctionne est, j'ai mis contrôleur page à charger par défaut. Donc, chaque fois que j'ouvrir mon site comme celui-ci

http://www.mysite.com

il charge le contrôleur comme celui-ci

http://www.mysite.com/page

Si nous passons la limace à elle, il charge le contenu de la page de cette limace de base de données, comme celui-ci

http://www.mysite.com/page/about http://www.mysite.com/page/portfolio

Si nous ne passons pas le slug, il charge la page d'accueil.

Maintenant, ce que je veux faire est, je ne veux pas que ce texte 'page' apparaisse dans l'URL. Ainsi, les pages devraient ouvrir comme ce

http://www.mysite.com/about

http://www.mysite.com/portfolio

Je suppose que cela sera possible grâce à la réécriture d'URL. J'ai déjà effectué une réécriture d'URL pour supprimer index.php de l'URL, ce qui est normalement fait pour tous les sites Web de Codeigniter. Voici le code de mon fichier .htaccess

RewriteEngine on 

RewriteCond $1 !^(index\.php|uploads|fckeditor|assets|robots\.txt) 

RewriteRule ^(.*)$ /jobsite/index.php/$1 [L] 

Maintenant, la question est, comment puis-je faire le travail d'URL comme cette

http://www.mysite.com/about

http://www.mysite.com/portfolio

Merci à l'avance.

Répondre

3

Il suffit de l'ajouter à votre fichier config/routes.php:

$route[':any'] = 'your_controller'; 

Puis, en * your_controller *, vous pouvez accéder au segment URI avec:

$this->uri->segment(1); 

Une fois que vous avez le segment URI , vous pouvez interroger la base de données et envoyer les données à votre vue. Si le segment URI est vide, chargez la page d'accueil.

+0

gr8, cela a fonctionné. comment puis-je ajouter une exception pour certains contrôleurs comme/admin_panel,/order_manager, etc. – aslamdoctor

+0

@aslamdoctor de la documentation de CI: "Les routes s'exécuteront dans l'ordre où elles sont définies, les routes supérieures auront toujours la priorité sur les routes inférieures." Si cela a fonctionné, voulez-vous l'accepter comme réponse correcte? :) – yrosen

+0

de cours, c'est accepté. mais si vous pouvez m'aider avec cette chose admin_panel, cela sera apprécié :) – aslamdoctor

0

OK, donc ce que je ferais est ce que yRosen propose, avec un peu de différences et comme mentionné dans le bon ordre:

d'abord votre contrôleur d'administration puis tout le reste:

$route['admin_panel/user_manager/(:any)'] = "admin_panel/user_manager/$1"; 
$route['admin_panel/pages_manager/(:any)'] = "admin_panel/pages_manager/$1"; 
$route['admin_panel'] = "admin_panel"; 

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

Une autre chose que je considère habituellement en faisant un site complexe ou en jouant trop avec des urls est mise l'administrateur sur un hôte séparé. Vous réservez "www.myhost.com" pour le côté public et utilisez "admin.myhost.com" pour la partie admin. Bien sûr, il a besoin de 2 installations CI et d'un peu de duplication de modèles, mais cela permet de gagner du temps et d'augmenter la sécurité.

Questions connexes