Ver Mensaje Individual
  #36  
Antiguo 24-04-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Menos de una hora... eso me ha costado implementar en HummPHP la posibilidad de manejar diferentes sitios (dominios) con una misma base de código. Lo que parecía que iba a complicar las cosas, los espacios de nombres en PHP, han resultado por el contrario de gran ayuda. De hecho Humm cumple ahora mismo con cierto estándar que implica usar los mismos espacios de nombres que el árbol de directorios en que se encuentran.

Todavía me queda "refactorizar" un poco y darle alguna que otra vuelta, pero, en efecto, HummPHP cuenta ahora con un directorio "Sites" en lugar de "Site". Dentro de este directorio se puede encontrar otro de nombre "Main". Este será el directorio por defecto y contendrá todo lo necesario para un sitio: vistas, clases, plugins, archivos de lenguaje, etc. Este directorio podrá replicarse, por decirlo así, tantas veces como se quiera, en diferentes subdirectorios de "Sites".

El truco estará en el nombre de dichos directorios, que, habrán de corresponderse con el "nombre del servidor" ($_SERVER['name']) "capitalizado" (por seguir la convención), es decir, supongamos que tenemos dos dominios: www.juanito.com y www.pepito.com.

Instalamos Humm en www.juanito.com, por ejemplo, de manera que este dominio "cargará" el sitio principal o predeterminado en HummPHP (situado en el directorio "Main"). A continuación tendremos que buscarnos la vida para configurar el servidor (en Apache, al menos "en local" no es complicado) de manera que todas las peticiones al dominio www.pepito.com apunten al mismo directorio en que se encuentra copiado HummPHP en www.juanito.com

El "truco" estará entonces en crear un nuevo directorio en "Sites" de nombre "Juanito", en este caso, replicando los directorios del sitio principal. En principio no habría más que hacer, puesto que las clases (de vistas, por ejemplo) y los plugins son opcionales, pero, en caso de hacer uso de esta característica, dichas clases y plugins deberán estar en el espacio de nombres "Humm\Sites\Pepito\Classes", para las clases, y "Humm\Sites\Pepito\Plugins" para los plugins.

Y eso es todo... lo que en realidad se comparte entre los dos sitios es el directorio "System" de HummPHP, lo que equivale a decir todo el sistema, puesto que lógicamente cada sitio tendrá su propio contenido... pues por algo son sitios diferentes. Por otro lado los sitios podrían compartir ya los plugins del sistema, pero, veré si se me ocurre algún otro lugar donde situar los plugins compartidos por difentes sitios: al fin y al cabo creo que sólo se trata de añadir una ruta más al "gestor de plugins".

Por lo demás los sitios pueden compartir clases PHP sencillamente gracias al espacio de nombres de PHP y a cómo "carga" las clases el sistema, equiparando el espacio de nombres con el árbol de directorios. De este modo podríamos tener dentro del directorio "Sites" un directorio de nombre "Shared" o "Classes", que, usando el espacio de nombres apropiado, sólo nos tendríamos que preocupar de usar cuando nos hicieran falta, ocupándose el sistema de encontrarlas y cargarlas.

En fin... creo que he tardado más en soltar este rollo que en conseguir (al menos de momento) el objetivo. Creo que yo seré el primero en usar esta característica "multisitio" de HummPHP, pues, si puedo configurar el servidor, cuando rehaga mis sitios, todos ellos van a compartir la misma copia de Humm, cosa que me ahorrará tiempo y trabajo si por ejemplo decido actualizar el sistema, etc.

¡Y no digo más!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita