Hola amigos y alumnos
![Tongue :P](https://www.smfsimple.com/Smileys/emotions/tongue.gif)
Hoy voy a intentar explicar un poco de que se trata este archivo package-info.xml que traen todos los mods que instalamos y que de ahora en mas vamos a crear, es lo basico de un mod por eso creo yo que es bueno entender esto antes de seguir.
Este archivos es lo que lee primero el administrador de paquetes de SMF cuando va a instalar un mod, podemos ver la importancia que tiene desde este punto.
El archivo contiene toda la informacion necesaria para saber de que debe hacer el administrador de paquetes para instalar correctamente el mod, solo eso.
Veamos entonces, en el archivo hay que respetar una cierta estructura definida por SMF.
Algunas definiciones que debemos tener en cuenta:
elemento: Instruccion para decirle al manejador de paquetes que hay que hacer, Ejemplo: <install></install>
atributos: Un valor adicional para describir un elemnto
enlinea: Codigo o porcion de codigo que se escribe en el mismo archivo en vez de ser llamado desde otro fuera del xml
archivo: El archivo o la direccion de este archivo a ser usado en vez utilizar codigo en linea.
direccion: La direccion del archivo o carpeta al cual se hace referencia.
A lo largo de la creacion del archivo, SMF nos proporciona variables que nos ayudaran a ahorrar codigo y hacer el paquete lo mas general posible (esto nos permitira 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 imagenes 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)
Vemos que es mucho mas facil y productivo escribir la variable y no toda la direccion, ademas de evitar futuros conflictos ya que los usuarios podrian cambiar los nombres de los directorios por X motivo y nuestros mods no les funcionarian si "ponemos las rutas comunes".
Veamos ahora la estructura que tiene algun archivo package-info.xml
- <package-info></package-info>
- Debe englobar el resto de los elementos del archivo
- Atributos:
- <id></id>
- Contiene el id del paquetes, debe respetar el siguiente formato: [usuario]:[nombre_del_paquete]. Por ejemplo: 4kstore:Nuevo_Mod
- <name></name>
- Contiene el nombre del paquete, no respeta ningun formato asi que podriamos ponerlo como querramos ejemplo: <name>Nuevo Mod</name>
- <type></type>
- El tipo de paquete, hay tres opciones: - "avatar", "language", or "modification".
- <version></version>
- La version actual del paquete, es recomendable utilizar numeros y que vayan ascendiendo cuando lanzamos nuevas versiones.
- <install></install>, <upgrade></upgrade>, and <uninstall></uninstall>
- La accion que se va a realizar cuando se ejecute el paquete, puede ser instalar, actualizar o desinstalar, los atributos son los mismos para las 3 acciones.
- Atributos:
- for: Para que version de SMF, si queremos especificar que es para varias version utilizamos una coma "," y si queremos crear un rango de version utilizamos el guion medio "-"
Ejemplos: 1 version: <install for="2.0.1"> Muchas versiones: <install for="2.0 RC4, 2.0 RC4"> Rango de versiones: <install for="2.0 - 2.0.3"> - from: Solo utilizamos este atributo cuando hacemos un upgrade; nos permite saber desde que version estamos actualizando. Ejemplo: <upgrade from="1.1.17">
- Elementos:
- <readme></readme> o <readme /> (para leer un archivo desde afuera)
- Nombre del archivo readme
- Opcional: Si
- Atributos:
- lang: A que lenguaje esta dirigido el readme, si se omite este atributo el readme se lee en cualquier lenguaje; es opcional
- parsebbc: Si queremos utilizar BBC en nuestro readme; es opcional y por defecto esta en falso;
- type: "inline" o "file"; por defecto es "file"; es opcional
- <code></code> o <code /> (para ejecutar codigo desde un archivo solamente)
- Nombre de un archivo .PHP que sera ejecutado
- En SMF 2.0.X, se utiliza <database></database> ejemplo: <database>install_db.php</database>
- Opcional: Si
- Atributos:
- type: "inline" o "file"; por defecto es "file"; es opcional
- <modification></modification> o <modification />
- Instrucciones que hay que realizar, generalmente tenemos un archivo modification.xml el cual tiene todas las instrucciones del mod, pero desde aqui le decimos al administrador de paquetes que debe realizar esas modificaciones.
- Opcional: Si
- Atributos:
- type: "inline" o "file"; por defecto es "file"; es opcional
- reverse: Hacer las modificaciones en orden inverso, generalmente para desinstalar o restaurar algo a su estado original; "true" o "false"; por defecto "false", opcional
- format: siempre se utiliza "xml" por lo que no es muy necesario escribirlo ya que por defecto esta como: "xml"; es opcional
- <create-dir />
- Crear un nuevo directorio
- Opcional: Si
- Atributos:
- name: El nombre del directorio
- destination: la ruta donde queremos crear nuestro nuevo directorio
- <create-file />
- Crea un archivo totalmente en blanco (vacio)
- Opcional: Si
- Atributos:
- name: El nombre del nuevo archivo
- destination: la ruta donde queremos crear nuestro nuevo archivo
- <require-dir />
- Solicita una carpeta que tengamos en el zip y con ella todos los archivos contenidos.
- Opcional: Si
- Atributos:
- from: La ruta de la carpeta (dentro del zip)
- name: El nombre de la carpeta (dentro del zip)
- destination: La ruta donde queremos colocar la carpeta
- <require-file />
- Solicita un archivo que este dentro de nuestro paquete .zip para poder copiarlo en alguna carpeta del foro
- Opcional: Si
- Atributos:
- from: La ruta donde se encuentra nuestro archivo en el zip (OJO: la ruta es desde el zip y no desde nuesta pc)
- name: El nombre del archivo
- destination: La carpeta o directorio donde queremos mover nuestro archivo
- <move-dir />
- Mover todo una carpeta entera desde nuestro zip, También se puede utilizar para cambiar el nombre de un directorio
- Opcional: Si
- Atributos:
- from: La ruta de la carpeta (dentro del zip) que queremos mover
- name: El nombre de la carpeta
- destination: La carpeta o directorio donde queremos mover nuestra carpeta
- <move-file />
- Mover un archivo, tambien es utilizado para renombrar los archivos dentro de nuestro foro
- Opcional: Si
- Atributos:
- from: La ruta donde se encuentra nuestro archivo en el zip (OJO: la ruta es desde el zip y no desde nuesta pc)
- name: El nombre del archivo
- destination: La carpeta o directorio donde queremos mover nuestro archivo
- <remove-dir />
- Eliminar una carpeta y todos los archivos contenidos en ella
- Opcional: Si
- Atributos:
- name: el nombre y la ruta de la carpeta a eliminar
- <remove-file />
- Elimina un archivo
- Opcional: Si
- Atributos:
- name: el nombre y la ruta del archivo a eliminar
- <redirect></redirect> o <redirect />
- Redireccionar a una ruta despues de: install/upgrade/uninstall.
- Opcional: Si
- Atributos:
- url: La url donde queremos direccionar, es obligatorio este atributo y son aceptadas las variables: "$boardurl", "$scripturl", y "$session_id"
- type: inline o file. Algun texto que queramos poner antes de hacer la redireccion.
- timeout: El tiempo que tenemos entre la instalacion y la redireccion para leer los comentarios. Por defecto 5 segundos
Como vemos con elementos y atributos bien declarados le decimos al instalador de paquetes que debe hacer para instalar correctamente nuestra modificacion.
Tienen miles de ejemplos en todos los mods pero estaria bueno que los revisen sobre todo a los de SMFSIMPLE para que vean las distintas alternativas y se saquen dudas sobre porque hacemos ciertas cosas.
Espero que les sirva y como siempre tienen abiertos los comentarios para sacarse dudas.
Saludos
Fuentes de lectura:
http://wiki.simplemachines.org/smf/Package-info.xml