He creado un sistema simple (por el momento) de instalación automatica de módulos para facilitar la instalación en sí.
Display All
Espero les interese. Saludos a la comunidad. Y esta es mi primera modificación objetiva a 2Moons.
Source Code
- ### METODO DE INSTALACION
- - Se cambio la funcion `isModuleAvailable` del archivo `GeneralFunctions.php` para agregar los modulos instalados
- Código:
- función isModuleAvailable($ID)
- {
- global $USUARIO;
- $módulos = explotar(';', Config::get()->módulos);
- $iMods = Módulo::get();
- $instalado = falso;
- foreach ($iMods como $fila => $datos) {
- if($ID == $datos['mod_tag']){
- $instalado = verdadero;
- $módulos[$ID] = $datos['mod_status'];
- }
- }
- if(!isset($módulos[$ID]) && $instalado == falso)
- {
- $módulos[$ID] = 1;
- }
- devuelve $módulos[$ID] == 1 || (isset($USUARIO['nivel de autenticación']) && $USUARIO['nivel de autenticación'] > AUTH_USR);
- }
- - Codigo agregado al template `ModulePage.tpl`
- - Contenido agregado a `ShowModulePage.php`
- - Agregar al final de `dbtables.php`
- Código:
- $dbTableNames['MODULES']= DB_PREFIX.'modules';
- - Agregar al archivo `constants.php`
- Código:
- if(!definido('MODULES_PATH')) {
- define('MODULES_PATH', ROOT_PATH.'includes/modules/');
- }
- - Archivo nuevo `Module.class.php` en la ruta `includes/classes/`
- - Agregar al `archivo common.php`
- Código:
- require 'incluye/clases/Module.class.php';
- - Modificado el codigo de `admin.php`
- Código:
- defecto:
- if(file_exists('incluye/páginas/adm/Mostrar'.ucfirst($página).'ModPage.php')){
- include_once('incluye/páginas/adm/Mostrar'.ucfirst($página).'ModPage.php');
- MostrarPáginaCargarMod();
- }
- más{
- include_once('incluye/páginas/adm/ShowIndexPage.php');
- MostrarPáginaÍndice();
- }
- descanso;
- ### INSTALACION MEDIANTE ARCHIVO XML
- - El sistema de instalacion de modulos tiene una estructura en XML para enviarle algunos datos al servidor asi como las rutas, archivos, y codigo a ejecutar.
- `
- <instalación>
- <mod_datos>
- <plugin_tag>mod_banco</plugin_tag>
- <plugin_name>Banco intergaláctico</plugin_name>
- <plugin_description>Sistema bancario de recursos para usuarios</plugin_description>
- <developer>Jekill</developer>
- <plugin_link>http://spacewar.nat.cu</plugin_link>
- <version>0.1</version>
- </mod_data>
- <game name="bank_mod">
- <game_page>ShowBankPage.class.php</game_page>
- </game>
- <game_view name="bank_mod">
- <item>page.bank.default.tpl</item>
- </game_view>
- <mod_tag>BANK_TEST_MOD</mod_tag>
- <installation_data>
- <item name="styles/templates/game/main.navigation.tpl">
- <addcode>
- <![CDATA[
- {if isModuleAvailable('mod_bank')}<li><a href="game.php?page=bank">{$LNG.bank}</a></li>{/if}
- ]]>
- </addcode>
- <before>
- <![CDATA[
- <li class="menucat2-head"></li>
- ]]>
- </before>
- <after>
- <![CDATA[
- {if isModuleAvailable($smarty.const.MODULE_RESSOURCE_LIST)}<li><a href="game.php?page=resources">{$LNG.lm_resources}</a></li>{/if}
- ]]>
- </after>
- </item>
- </installation_data>
- </installation>
- `
- - Todo el contenido tiene que estar encapsulado dentro de las etiquetas `<installation>`
- - `mod_data` contendra etiquetas para la tabla de modulos
- - La etiqueta `game` tiene un atributo `name` que su valor siempre sera el `mod_tag`. Hace referencia a los archivos .php que se subiran a la carpeta `includes/pages/game`. Se subiran tantos archivos como elementos `item` existan.
- - game_view es exactamente lo mismo que el anterior solo que esta dirigido a las vistas del juego que se alojaran en la carpeta `styles/templates/(mod_name)/` y de igual manera se subiran tantas .tpl cono `item` existan.
- - De igual manera que las 2 anteriores, existen las etiquetas `administration` y `administration_view` que funcionan de la misma forma pero para las carpetas administrativas.
- - La etiqueta `mod_tag` que se encuentra debajo de las anteriores, es para generar un bloque cuando se instale codigo desde el sistema de instalacion de modulos. El sistema detecta si es codigo para un archivo .php o .tpl.
- - La etiqueta `installation_data` es la mas compleja hasta el momento. Cada `item` dentro de `installation_data` contendra 3 etiquetas: `before`, `after` y `addcode`. Este sistema es para agregar codigo automatico al preexistente. Por ejemplo: el mod que se va a instalar lleva un boton en el menu del jugador. Tomamos el ejemplo del codigo XML de este archivo.
- El elemento nuevo tiene que estar entre
- {if isModuleAvailable($smarty.const.MODULE_RESSOURCE_LIST)}<li><a href="game.php?page=resources">{$LNG.lm_resources}</a></li>{/if} y
- <li class="menucat2-head"></li>
- Al ser un archivo .tpl el sistema genera lo siguiente
- {if isModuleAvailable($smarty.const.MODULE_RESSOURCE_LIST)}<li><a href="game.php?page=resources">{$LNG.lm_resources}</a></li>{/if}
- <!--INICIAR BANK_TEST_MOD-->
- {if isModuleAvailable('mod_bank')}<li><a href="game.php?page=bank">{$LNG.bank}</a></li>{/if}
- <!--FIN BANK_TEST_MOD-->
- <li class="menucat2-head"></li>
- Con estos mismos codigos se regira el sistema para eliminar el codigo generado si lo que se desea es desinstalar el modulo.
- Como ultimo dato: El archivo comprimido para la instalacion solo sera .zip y los archivos dentro de este no tienen orden de carpetas, el orden esta definido en el XML.
The post was edited 3 times, last by Jekill ().