Seguimos con el tema del armado del paquete para la instalación de un mod, ahora paso a explicar lo que debería tener el archivo modification.xml que es el encargado de leer las modificaciones que hay que hacer en los archivos de SMF originales, agregar, reemplazar, quitar etc etc...
No es obligatorio que se llame modification.xml pero por lo general es una buena practica llamarlos de esta forma o install.xml, como vimos en el manual del archivo package.xml el archivo es llamado: <modification>modifications.xml</modification> donde podría ponerse cualquier nombre siempre y cuando se respeten mutuamente.
Algunas definiciones que debemos conocer antes de ver la estructura son:
element: Instrucción para decirle al manejador de paquetes que hay que hacer, Ejemplo: <install></install>
attribute (propiedad): Un valor adicional para describir un elemento
inline: Bodigo o porción de código que se escribe en el mismo archivo en vez de ser llamado desde otro fuera del xml
file: El archivo o la dirección de este archivo a ser usado en vez utilizar código "inline".
location (path): La dirección del archivo o carpeta al cual se hace referencia.
ignore: Usado para ignorar algún tipo de error que aparezca
skip: saltea la operación
fatal: detiene toda la modificación y devuelve un error
A lo largo de la creación del archivo, SMF nos proporciona variables que nos ayudaran a ahorrar código y hacer el paquete lo mas general posible (esto nos permitirá mejor funcionamiento ante diversas situaciones).
Las variables disponibles son:
$sourcedir: El directorio que contiene los archivos fuentes (generalmente es la carpeta /Sources)
$boarddir: El directorio donde encontramos el archivo index.php
$avatardir: El directorio donde encontramos los avatares (generalmente es la carpeta /avatars)
$themedir: El directorio donde encontramos los distintos themes (generalmente es la carpeta /Themes)
$imagesdir: El directorio de imágenes de cada tema (generalmente es la carpeta /Themes/{temaelegido}/images)
$languagedir: El directorio donde esta la carpeta de lenguajes (generalmente es la carpeta /Themes/default/languages)
$smileysdir: El directorio de los smileys (generalmente es la carpeta /Smileys)
La estructura de este archivo xml seria algo como esto:
- <modification></modification>
- Debe englobar todos los elementos del archivo
- Atributos:
- <id></id>
- Contiene el id del paquete, debe respetar el siguiente formato: [usuario]:[nombre_del_paquete]. Por ejemplo: 4kstore:Nuevo_Mod
- <version></version>
- La versión actual del paquete, es recomendable utilizar números y que vayan ascendiendo cuando lanzamos nuevas versiones.
- <file></file>
- El archivo que vamos a modificar. Incluiremos aca todas las operaciones que realizaremos sobre este archivo
- Atributos:
- name: El nombre y el path del archivo a modificar
- error: Que haremos si el archivo no se puede modificar; "ignore" "fatal" o "skip"; Usar "ignore" para crear un nuevo archivo; es opción; por defecto "fatal"
- Elementos:
- <operation></operation>
- La operación que va a ser realizado sobre el archivo
- Atributos:
- error: Que haremos si la operación no se puede realizar; "ignore" "fatal" o "required"; usar "required" si esta operación debe fallar is requerida; por defecto: "fatal"; es opcional
- Elementos:
- <search></search> o <search /> (solamente para usar con: position="end")
- El codigo que vamos a buscar para modificar
- Atributos:
- position: La posición donde quedara el código que buscamos luego de hacer las modificaciones: "before" (para poner el código buscado antes de lo que agregamos), "after" (para poner el código buscado después de lo que agregamos), o "replace" (reemplaza lo que buscamos por lo que agregamos); atributo obligatorio
- whitespace: Si se ignoran los espacios en blanco o no: "exact" (por defecto) o "loose" (los ignora); es opcional; por defecto: exact
- regexp: Si la búsqueda es una expresión regular o no. "true" o "false"; es opcional; por defecto: false
- <add></add>
- El codigo que vamos a agregar
Solo tienen que tener cuidado con el after y el before de la modificación y entender que no es donde pondremos nuestro código sino donde quedara lo que buscamos.. si pensamos en donde ponemos el código debemos poner after para agregar antes y before para agregar después.
Creo que eso es todo, verán que la cabezera es muy parecida a lo que tiene el package-info.xml con algunos elementos menos.
Como siempre, vean ejemplos y pregunten si tienen alguna duda.
Abrazo alumnos!