Hace pocas entradas lo comentaba: estaba buscando las vueltas para que los plugins no necesitasen requerir o incluir clases PHP por su cuenta. Después de echar un vistazo a cierta biblioteca para PHP que podría serme útil para cierto plugin, precismante, me percaté de que algo así sería realmente útil. No diré sino que dicha biblioteca cuenta con su propia función "autoload": porque estamos hablando de decenas de clases.
Para utilizar dicha biblioteca en un plugin para Gesbit, por lo tanto, sería preciso hacer unas cuentas decenas de "require" en PHP, para incluir cada una de las clases que, acaso, no iban a utilizarse después. Así que, había que hacer algo, y he dado unas cuentas vueltas al asunto en estos días, hasta hoy, que me he puesto un poco más en serio con ello y he conseguido una implementación a mi manera de ver bastante digna.
Pero, he tenido que equivocarme un par de veces para llegar a la solución que al final he adoptado. Tengo que decir que un primer momento me he liado bastante, porque mi objetivo era conseguir que los plugins pudiera añadir directorios donde buscar clases "a demanda". Es decir, incluir una acción que permitiera a los plugins especificar ciertos directorios donde Gesbit habría de buscar clases cuando fueran necesarias.
Pero, esta implementación me ha parecido un tanto rebuscada, y, en la práctica no era nada sencilla y complicaba las cosas tal vez demasiado. Así que, aunque sin descartar una solución parecida, he optado por simplificar, de modo que además no tuviera que realizar prácticamente cambios en Gesbit. Lo que he hecho ha sido añadir una función al archivo "gb-autoload.php", precisamente, donde se encuentra la función "__autoload" de PHP para Gesbit.
Dicha función es llamada únicamente una vez, precisamente, desde la propia función "__autoload", y lo que hace es reunir los directorios "originales" donde buscar clases (que ya se usaban antes de estos cambios) junto con los directorios "pscripts" de los plugins instalados (ojo, acaso no activados) disponibles en la instalación de Gesbit. Efectivamente, los plugins cuentan con una serie de directorios "predeterminados" y uno de ellos es "pscripts".
Esto pretende hacer la vida más fácil al autor de plugins, puesto que sus plugins, que son clases hijas de la clase "GbPlugin", cuentan con métodos, como por ejemplo, uno que retorna la ruta absoluta al directorio "pscripts" o su URL. Lo mismo vale para directorios como "jscripts", "images" y "styles". Pues bien, a partir de ahora los plugins pueden situar las clases de PHP que necesiten en el directorio "pscripts", y Gesbit las "autocargará" como el resto de clases, cuando sean necesarias.
Sin embargo no está todo dicho, porque el autor del plugin deberá tener alguna cosa en cuenta todavía: se sigue la misma convención que en Gesbit, debe haber una clase por archivo, y el nombre del archivo será el nombre de la clase más la extensión ".class.php". Si además en el directorio se encuentra un archivo "nombre de la clase" más la extensión ".const.php", también será incluido: exactamente igual que se hace en Gesbit.
Dos plugins se están beneficiando ya de este nuevo "sistema", como lo son los plugins "GbDefensio" y "GbTextile" para Gesbit. El "inconveniente" vendría dado (según lo veo ahora) porque hay que seguir las mencionadas convenciones para que "todo funcione", pero, en todo caso, ya podría hacer uso de la biblioteca de que hablaba al principio sin necesidad de hacer decenas de "requires" o "includes".
Quiero decir con esto último que acaso con dejar a los plugins "añadir" sus propios directorios se ganaría en algo, pero, lo que está claro es que también se sumaría cierta complejidad que tal vez merezca la pena ahorrarse en este caso, precisamente. Todo se andará, pero, creo que de momento, con una sola nueva función en Gesbit (y algunos cambios menores) se ha logrado no poco y bastante práctico, creo yo.