Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[TUTORIAL] 2 dominios (o subdominios), 2 lenguajes y 1 instalación
#1
Buenos días, este tutorial lo obtuve en http://forum.joomla.org/viewtopic.php?f=617&t=679728 pero esta hecho para Joomla 1.7.3 por lo que tuve que adaptarlo un poco a la versiones 3.x.x de Joomla.

¿Para que sirve? Esto se trata de hacer una pequeña modificación en el plugin nativo de joomla "languagefilter" y en el modulo "mod_languages" que es el que nos permite seleccionar los idiomas desde el frontend para que podamos usar mas de un dominio y/o subdominio pero con diferentes idiomas en cada uno, tal como si fueran sitios totalmente independientes, solo que usando la misma base de datos y archivos.

¿Cual es la finalidad? Supongamos que queremos crear un sitio multi-lenguaje en español e ingles, y para mejorar el SEO en lugar de usar direcciones como dominio.com/es o dominio.com/en queremos utilizar 2 dominios aparcados, ó bien, 2 subdominios. Es decir, supongamos que queremos usar dominio.com para el sitio en ingles y dominio.es para el sitio en español, o queremos usar www.dominio.com para el sitio en ingles y es.dominio.com para el sitio en español. Recuerden que eso depende de ustedes porque tranquilamente pueden poner el dominio.com para el sitio en español y dominio.us o dominio.uk para el sitio en ingles, solo que por conveniencia y practicidad para el tutorial elegí el otro orden.

#IMPORTANTE: Si bien existen ahora numerosas extensiones de terceros, la mayoría no cumplió con mis expectativas debido a que algunas te permitían hacer lo mismo que explico en este tutorial solo que por ejemplo usabas un subdominio para la pagina en español y te salia en la dirección es.dominio.com/es por lo que era redundante que permitiera el dominio porque no te quitaba el /es luego del .com

Para empezar primero debemos ir al panel de administración, una vez ahí activamos lo siguiente:
  • Habilitar SEF y mod_rewrite en configuración general 
  • En el gestor de idiomas > contenidos: configurar correctamente los idiomas a utilizar
  • Luego ir a plugin -> "System-Language Filter" o "Sistema - Filtrar Idiomas" dependiendo su lenguaje predeterminado:

    --"Language Selection for new Visitors" o "Selección del idioma para visitantes nuevos" = "site language" o "Idioma del sitio"
    --"Automatic Language Change" o "Cambio automático del Idioma" = "No"
    --"Menu associations" o "Asociación de elementos" =  "Yes" o "Si"
    --"Remove default language prefix" o "Eliminar el codigo URL del idioma" = "Yes" o "Si"
Una vez realizado eso, debemos proceder a editar el archivo "plugin/systems/languagefilter/languagefilter.php" y realizar lo siguiente:
  • Primero buscamos esto:

Código:
$this->sefs         = JLanguageHelper::getLanguages('sef');
            $this->lang_codes   = JLanguageHelper::getLanguages('lang_code');
            $this->default_lang = JComponentHelper::getParams('com_languages')->get('site', 'en-GB');

y lo comentamos, es decir lo dejamos así para que sea ignorado:

Código:
/* $this->sefs         = JLanguageHelper::getLanguages('sef');
            $this->lang_codes   = JLanguageHelper::getLanguages('lang_code');
            $this->default_lang = JComponentHelper::getParams('com_languages')->get('site', 'en-GB'); */

  • Luego justo debajo de eso, agregamos lo siguiente:
Código:
$url_website = JURI::base();
$my_domain = JURI::getInstance($url_website)->getHost();
if($my_domain == 'dominio.com' || $my_domain == 'www.dominio.com'){
  JRequest::setVar('language','en-EN');
  $this->tag = 'en-GB';
  $this->default_lang = 'en-GB';
  $this->default_sef = 'en-GB';
}
if($my_domain == 'es.dominio.com' || $my_domain == 'www.es.dominio.com' || &my_domain == 'www.dominio.es' || &my_domain == 'dominio.es'){
  JRequest::setVar('language','es-ES');
  $this->tag = 'es-ES';
  $this->default_lang = 'es-ES';
  $this->default_sef = 'es-ES';
}

Nota: Si utilizan 2 dominios diferentes, es decir, por ejemplo dominio.com y dominio.es ambos dominios deben estar aparcados en el sitio para que usen la misma carpeta root. O en caso de utilizar un dominio y subdominio respectivamente el subdominio debe utilizar la misma carpeta que el dominio principal, es decir que la carpeta root del subdominio debe ser "public_html" en lugar de "public_html/subdominio" 

En caso de que su sitio cuente con mas de 2 idiomas solo deben agregar otro if con las etiquetas de su idioma, por ejemplo, su sitio también cuenta con el idioma italiano y en el gestor de idiomas lo tienen configurado con la etiqueta "it-IT" por lo tanto su nuevo "if" debe ser así:


Código:
if($my_domain == 'it.dominio.com' || $my_domain == 'www.it.dominio.com' || &my_domain == 'www.dominio.it' || &my_domain == 'dominio.it'){
  JRequest::setVar('language','it-IT');
  $this->tag = 'it-IT';
  $this->default_lang = 'it-IT';
  $this->default_sef = 'it-IT';
}


Tengan en cuenta que la || significa "ó" por lo que no es necesario agregar tanto, yo solo lo puse porque tome como ejemplo que lo tenían como dominio aparcado y subdominio del dominio.com al mismo tiempo.

Por último para terminar vamos a modificar el archivo "modules/mod_languages/tmpl/default.php" para que le permita a nuestros usuarios cambiar de idioma desde el frontend en el cual vamos a realizar lo siguiente: 
  • Primero buscamos esto:

Código:
<?php if ($params->get('show_active', 0) || !$language->active):?>

  • Luego notaremos que debajo de eso, se encuentra lo siguiente:
Código:
<a href="<?php echo $language->link;?>">
  • El cual debemos cambiar por lo siguiente:
Código:
<a href="<?php            
  if(!$language->active){
     $uri = JFactory::getURI();
     $url_website = JURI::base();
     $my_domain = JURI::getInstance($url_website)->getHost();
     if($my_domain == 'dominio.com' || $my_domain == 'www.dominio.com'){
        echo "http://es.dominio.com". $language->link;
        //o pueden poner www.dominio.es en lugar de es.dominio.com, siempre y como sea su preferencia
     }
     if($my_domain == 'es.dominio.com' || $my_domain == 'www.es.dominio.com' || $my_domain == 'dominio.es' || $my_domain == 'www.dominio.com' ){
        echo "http://www.dominio.com". $language->link;
     }
  }else{
     echo $language->link;
  }
?>">

Nota: Si no quieren cambiar  "<a href="<?php echo $language->link;?>">" le pueden agregar una doble barra (//) delante para comentarlo así php lo ignora y luego debajo del comentario agregar el código por el que había que cambiarlo.

Bien eso fue todo y espero les sea de mucha utilidad, si bien alargue mucho la publicación tratando de ser lo mas claro posible espero sepan entender porque lo hice. Cualquier cosa, no duden en consultarme y ver si juntos podemos encontrar una solución.
Saludos!

PD: Por último les dejo mi sitio web que aún se encuentra en fase de desarrollo pero que ya cuenta con esta modificación funcionando para que puedan ver como funciona luego de realizar dicha modificación.

www.omegadrinks.com  (versión en ingles internacional)
es.omegadrinks.com (versión en español internacional)
#2
La idea es mejorar el SEO? gracias por el aporte.
#3
Genial, como lo tiene Facebook, Google entre otras web. En forma de dominio tudominio.es, tudominio.com, es.tudominio.com, fr.tudominio.com . Pues realmente me será de gran utilidad siempre tenía en mente de hacer un proyecto en multiples idiomas con la misma base de datos, así que muchas gracias por el aporte. Sonrisa
WWW
#4
(02-10-2015, 07:41 PM)23r7190 escribió: La idea es mejorar el SEO? gracias por el aporte.

(02-10-2015, 11:24 PM)Hostingbir escribió: Genial, como lo tiene Facebook, Google entre otras web. En forma de dominio tudominio.es, tudominio.com, es.tudominio.com, fr.tudominio.com . Pues realmente me será de gran utilidad siempre tenía en mente de hacer un proyecto en multiples idiomas con la misma base de datos, así que muchas gracias por el aporte. Sonrisa

Si, así es, por lo que leí en el soporte de google eso mejora la visualización de las paginas en sus diferentes versiones porque dejan especificado su idioma directamente en el dominio. Sería algo similar a Wikipedia ya que como pueden apreciar en la url de su sitio cada idioma con el que cuentan es como un subdominio "en", "es", "it", etc. Y configurando el plugin SLogin que posibilita la conexión a través de Social OAuth de las redes sociales note que cada subdominio me lo toma como que fuera un dominio diferente, por lo que supongo aunque no quiero decir boludeces (perdonen la palabra jaja) creería que también los buscadores lo deben considerar así.

Gracias por sus comentarios y sobre todo porque les haya servido Sonrisa
#5
Esta muy bueno hace tiempo estuve trabajando en un código para hacer esto en una web que me pidieron esto realmente me ahorra trabajo gracias.


Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
Bombilla Manual de Instalación de Joomla 3.0 patowins 2 807 02-06-2014, 11:00 AM
Último mensaje: Renguit0
  [TUTORIAL]Migrar joomla de un servidor a otro papi 20 6,119 26-03-2013, 04:41 PM
Último mensaje: aspencajanal
  [TUTORIAL] Enviar articulos a joomla con Windows live Writer mandragon 0 778 02-11-2012, 03:22 PM
Último mensaje: mandragon
  [TUTORIAL] Acelera el backend de Joomla con Google Gears mandragon 0 583 02-11-2012, 03:20 PM
Último mensaje: mandragon
  [TUTORIAL] Como hacer una web con joomla Taquion 2 1,024 20-06-2012, 10:57 PM
Último mensaje: lukas
  Tutorial Instalación Joomla usando cPanel jhon181 4 1,165 02-03-2012, 06:28 PM
Último mensaje: jhon181
  [tutorial]Instalación Joomla 1.5 (CPanel) morganeitor 10 3,333 08-10-2011, 08:17 PM
Último mensaje: sebasxdd
  [TUTORIAL] Jquery / mootools en joomla sin problemas Citrico 5 1,871 02-04-2010, 10:02 PM
Último mensaje: Arrakis
  [TUTORIAL] Crear menús en joomla Minenage 3 1,077 19-10-2009, 08:30 PM
Último mensaje: papi
  [TUTORIAL] Instalación de Joomla paso a paso papi 7 971 04-10-2009, 07:00 PM
Último mensaje: papi



Usuarios navegando en este tema: 1 invitado(s)