2011-05-12 21 views
6

Todavía estoy tratando de encontrar la manera de hacer funcionar un sitio móvil. Tengo una aplicación web en CodeIgniter y me gustaría crear una versión móvil de la misma. Sin embargo, no quiero volver a escribir demasiado de mi código, especialmente no mis modelos ... (dado que devuelven datos brutos que puedo usar en cualquier lugar).Comparta modelos de CI entre diferentes aplicaciones

Quiero ejecutar mi sitio web móvil en un subdominio (m.mydomain.tld) La versión de escritorio se ejecuta en www.mydomain.tld. Intenté señalar el subdominio a la carpeta de mi aplicación CI; cuando un navegador móvil llega al www.mydomain.tld, lo redirijo al m.mydomain.tld. Este subdominio es, como dije, apuntado a mi carpeta de aplicaciones CI; Luego sirvo controladores y vistas optimizados para dispositivos móviles.

¡Sin embargo! Como se especifica en app/config/config.php, la base_url de mi solicitud es:

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

Así volver a dirigir a m.mydomain.tld no funciona muy bien porque todavía redirecciona a www y yo no quiero eso, a pesar de que a continuación, hace lo que quiero que haga

La forma en que estoy tratando de resolver esto es haciendo dos carpetas de aplicaciones con diferentes controladores/vistas, pero modelos compartidos, etc. Por lo tanto, estoy tratando de encontrar una manera de reestructurar mi aplicación CodeIgniter para poder compartir mi modelos y 'controlador personalizado' (MY_Controller), así como algunas bibliotecas/ayudantes personalizadas entre diferentes aplicaciones.

Espero que esto sea claro, si no, con gusto explicaré más lo que estoy buscando. ¡Muchas gracias!

+0

Agregue otra vista a los modelos para su versión móvil en lugar de crear una aplicación completamente nueva. Nunca he usado CI, pero esto viene como parte del paquete con http://www.agavi.org. Este es, después de todo, el objetivo de la arquitectura de MVC. – Treffynnon

+0

Actualizando mi pregunta con por qué no creo que esto sea posible. ¡Gracias! – cabaret

+0

Oh veo tu problema. Necesita hacer que su archivo de configuración sea sensible a la ubicación en la que está trabajando su aplicación. – Treffynnon

Respuesta

2

En config.php reemplazar $config['base_url'] = 'http://www.mydomain.tld/'; con esto:

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

que obtendrá la URL de las variables Apache ambiente/servidor por lo que si se accede al sitio a través del subdominio entonces se usará la URL subdominio o si accede a ella a través del dominio raíz usará el dominio raíz.

No soy un experto en CI así que quizás haya otras formas, pero esta es la solución más simple que conozco.

+0

Esto es lo que las últimas versiones de CI hacen (finalmente) adivinan la url base si no está configurada. (Aunque es un poco diferente) –

2

Creo que la forma correcta de resolver este problema es simplemente creando un nuevo conjunto de controladores y vistas (orientados para dispositivos móviles) en su aplicación web existente. Luego solo defina las rutas para los nuevos controladores "móviles" (tal vez también debería agregar un prefijo "m /" o "móvil /" para cada una de las rutas), y eso es todo.

Actualización:

Ok, veo. Te recomiendo que hagas de esta manera:

  1. En primer lugar crear este registro en config.php:

    $config["mobile_base_url"] = "http://m.yoursite.tld/"; 
    
  2. A continuación, crear su url_helper, añadir una función mobile_site_url(), lo que sería un análogo a CI site_url() función (lo necesitará para enlaces en vistas y controladores).

  3. Cree vistas y controladores móviles, defina las rutas para ellos con el prefijo "m /".

  4. hacer un poco de .htaccess para piratear la reescritura de URL se describe en este foro http://www.webmasterworld.com/apache/3509887.htm, por lo que todas las solicitudes de m.yoursite.tld/... iría a yoursite.tld/m/...

Supongo que se ejecutará en algunos problemas con este enfoque, pero definitivamente no debe crear una aplicación de CI separada para su problema.

Espero que esto ayude.

+0

No debería necesitar un conjunto de controladores completamente nuevo, solo nuevas vistas. El controlador solo tendría un método adicional agregado para que el móvil apunte a la vista correcta. De nuevo, no sé si CI realmente es MVC. – Treffynnon

+0

Estoy de acuerdo con usted. He recomendado crear controladores en caso de que algunos datos no sean necesarios en las vistas móviles, por lo que la creación de controladores optimizados generaría menos carga para los modelos. –

+0

He actualizado mi pregunta. Gracias por la respuesta. – cabaret

3

Quizás debería echarle un vistazo a la nueva característica de codeIgniter 2.0: paquete.

paquetes le permiten compartir Librairies modelos, etc., con:

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

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

espero que ayude.

+0

Gracias. Me aseguraré de comprobarlo, no había oído hablar de él para ser sincero. Parece que podría ser lo que necesito. – cabaret

Cuestiones relacionadas