6

J'essaie toujours de trouver un moyen de faire fonctionner un site mobile. J'ai une application web dans CodeIgniter et je voudrais en créer une version mobile. Cependant, je ne veux pas réécrire trop de mon code, surtout pas mes modèles .. (Puisqu'ils retournent des données brutes que je peux utiliser n'importe où.)Partager des modèles CI entre différentes applications

Je veux courir mon site Web mobile à un sous-domaine (m.mydomain.tld). La version de bureau fonctionne au www.mydomain.tld. J'ai essayé de pointer le sous-domaine vers mon dossier d'application CI; lorsqu'un navigateur mobile arrive à www.mydomain.tld, je le redirige vers m.mydomain.tld. Ce sous-domaine est, comme je l'ai dit, dirigé vers mon dossier d'application CI; Je propose ensuite des contrôleurs et des vues optimisés pour les mobiles.

Cependant! Comme indiqué dans app/config/config.php, le base_url de ma demande est:

$config['base_url'] = 'http://www.mydomain.tld/';

Donc, la redirection vers m.mydomain.tld ne fonctionne pas vraiment parce que je suis toujours redirigés vers www et je ne veux pas que, même si elle le fait alors ce que je veux qu'il fasse. La façon dont j'essaye de résoudre ceci est de faire deux dossiers d'application avec différents contrôleurs/vues, mais des modèles partagés etc. Ainsi, j'essaye de trouver un moyen de restructurer mon application de CodeIgniter afin que je puisse partager mon modèles et 'contrôleur personnalisé' (MY_Controller), ainsi que certaines bibliothèques/assistants personnalisés entre différentes applications.

J'espère que c'est clair, sinon je serai heureux d'expliquer plus ce que je cherche. Merci beaucoup!

+0

Ajoutez une autre vue aux modèles pour votre version mobile plutôt que de créer une toute nouvelle application. Je n'ai jamais utilisé CI, mais cela fait partie du paquet avec http://www.agavi.org C'est après tout le point de l'architecture MVC. – Treffynnon

+0

Mise à jour de ma question avec pourquoi je ne pense pas que ce soit possible. Merci! – cabaret

+0

Oh, je vois votre problème. Vous devez rendre votre fichier de configuration sensible à l'emplacement de votre application. – Treffynnon

Répondre

2

Dans config.php remplacer $config['base_url'] = 'http://www.mydomain.tld/'; avec ceci:

if(isset($_SERVER['HTTPS']) and 'on' === $_SERVER['HTTPS']) { 
    $config['base_url'] = 'https://'; 
} else { 
    $config['base_url'] = 'http://'; 
} 
$config['base_url'] .= $_SERVER['SERVER_NAME'] . '/'; 

Cela va obtenir l'URL à partir des variables d'environnement Apache/serveur, donc si vous accédez au site via le sous-domaine il utilisera l'URL du sous-domaine ou si vous y accédez via le domaine racine il utilisera le domaine racine. Je ne suis pas un expert CI donc il y a peut-être d'autres façons, mais c'est la solution la plus simple que je connaisse.

+0

C'est en fait ce que font les dernières versions de CI pour (enfin) deviner l'URL de base si elle n'est pas définie. (Bien que ce soit légèrement différent) –

2

Je pense que la bonne façon de résoudre ce problème consiste simplement à créer un nouvel ensemble de contrôleurs et de vues (ciblés pour mobile) dans votre application Web existante. Ensuite, il vous suffit de définir des routes pour les nouveaux contrôleurs "mobiles" (vous devriez peut-être également ajouter un préfixe "m /" ou "mobile /" pour chacune des routes), et c'est tout.

Mise à jour:

Ok, je vois. Je vous recommande de le faire de cette façon:

  1. d'abord créer cet enregistrement dans config.php:

    $config["mobile_base_url"] = "http://m.yoursite.tld/"; 
    
  2. Ensuite, créez votre url_helper, ajoutez une fonction mobile_site_url(), ce qui serait un analogue à Fonction CI site_url() (vous en aurez besoin pour les liens dans les vues et les contrôleurs).

  3. Créez des vues mobiles et des contrôleurs, définissez des itinéraires pour eux avec le préfixe "m /".

  4. faire un peu .htaccess pour pirater url rewriting décrit dans cette forum http://www.webmasterworld.com/apache/3509887.htm, de sorte que toutes les demandes de m.yoursite.tld/... irait à yoursite.tld/m/...

Je suppose que vous rencontrerez quelques problèmes avec cette approche, mais vous ne devriez certainement pas créer une application CI séparée pour votre problème.

Espérons que cela aide.

+0

Vous ne devriez pas avoir besoin d'un nouvel ensemble de contrôleurs juste de nouvelles vues. Le contrôleur aurait simplement ajouté une méthode supplémentaire pour que le mobile pointe vers la vue correcte. Encore une fois, je ne sais pas si CI est vraiment MVC. – Treffynnon

+0

Je suis d'accord avec vous. J'ai recommandé de créer des contrôleurs au cas où certaines données ne seraient pas nécessaires dans les vues mobiles. La création de contrôleurs optimisés réduirait donc la charge des modèles. –

+0

Mise à jour ma question. Merci pour la réponse. – cabaret

3

Peut-être que vous devriez jeter un oeil à la nouvelle fonctionnalité 2.0 de codeIgniter: package.

packages vous permettent de partager des modèles, etc. librairies avec:

$this->load->add_package_path('/usr/local/codeigniter/shared'); 

Lire ceci: http://philsturgeon.co.uk/blog/2010/04/codeigniter-packages-modules

Hope it helps.

+0

Merci. Je vais m'assurer de vérifier, je n'avais pas entendu parler de ça pour être honnête. On dirait que c'est peut-être ce dont j'ai besoin. – cabaret

Questions connexes