Simple Machines Community Forum

SMF Support => Español (Spanish) => Language Specific Support => Modificaciones (Mods) => Aiheen aloitti: davidhs - helmikuu 17, 2011, 08:00:06 AP

Otsikko: Crear un MOD que haga una cosa o otra dependiendo de si otro MOD está instalado
Kirjoitti: davidhs - helmikuu 17, 2011, 08:00:06 AP
Para uno de mis MODs, BBCode with style
http://custom.simplemachines.org/mods/index.php?mod=2505
he creado dos versiones, una para instalar en un foro sin otros MODs incompatibles y otra para instalar en un foro que tenga instalado el MOD nCode Image Resizer (este no es mío), por que ambos modificamos el BBCode img.

Cada versión la he hecho en un tar.gz distinto pero a la hora de crear mejoras tengo que hacerlas por duplicado, así que lo quiero hacer todo en un solo tar.gz.

Tengo algunas preguntas:

1. ¿Existe alguna forma de indicar en el package.xml o en el modification.xml que si está instalado un MOD haga una cosa y si no haga otra?

2. Si lo anterior no se puede hacer, he pensado en poner dos etiquetas operation con atributo error, una para que se haga si el código PHP es el original y otra si el código ha sido modificado por el MOD nCode Image Resizer:
<file name="$sourcedir/Subs.php">

<operation error="...">
<search position="before"><![CDATA[ /* Código original */ ]]></search>
<add><![CDATA[ /* Mi modificación al código original */ ]]></add>
</operation>

<operation error="...">
<search position="before"><![CDATA[ /* Código modificado por el MOD nCode Image Resizer */ ]]></search>
<add><![CDATA[ /* Mi modificación al código modificado por el MOD nCode Image Resizer */ ]]></add>
</operation>

</file>

Quiero que si una de las operaciones falla no se pare la instalación. He encontrado aquí una explicación de este atributo y sus posibles valores
Lainaus käyttäjältä: SleePy - maaliskuu 17, 2009, 06:57:37 IP
Before reading on, you should know some definitions used in this documentation:

  • element aka tag: an instruction used to tell the package manager what to do. ie <install></install>
  • attribute aka property: an additional value used to describe an element
  • inline: code or text that is written in this file instead of coming from an outside source
  • file: the name or location of a file to be used instead of "inline"
  • location aka path: the location on the computer of a directory and/or file
  • ignore: used to ignore an error
  • skip: skip this operation/file
  • fatal: stop the entire modification and return an error

[...]

<operation></operation>

  • An operation to be perfomed on this file

  • Attributes:

    • error: what to do if this operation can not be performed; "ignore" "fatal" or "required"; use "required" if this operation must fail; defaults to "fatal"; optional

[...]
pero mi nivel de inglés no es muy bueno y no entiendo muy bien el significado de cada posible valor para error. Creo que es esto pero no estoy seguro. ¿Alguien lo puede confirmar?
Parece que el valor que debo usar es "ignore" pero no se si "required" podría valer.

3. La opción anterior hace la operación que no falle pero si fallan las dos (p.ej. un tercer MOD que no controlo cambia la misma zona) no hace nada y no da error. ¿Existe alguna forma de que si ambas fallan de error?
Otsikko: Re: Crear un MOD que haga una cosa o otra dependiendo de si otro MOD está instalado
Kirjoitti: DoctorMalboro - helmikuu 17, 2011, 10:02:01 AP
Podes usar la función error="skip" y listo. Así tenes todo en un paquete...
Otsikko: Re: Crear un MOD que haga una cosa o otra dependiendo de si otro MOD está instalado
Kirjoitti: davidhs - helmikuu 17, 2011, 11:23:51 AP
Gracias, lo haré así. En realidad usaré "ignore" por que es en el operation:
<operation error="ignore">
(Para el mismo fichero tengo otras operaciones obligatorias)

Se me ocurrió buscar en el fichero Sources/Subs-Package.php el parser del atributo error y he visto que "required" da error si la operación se puede hacer.

Si nadie dice nada más marcaré el hilo como resuelto.
Otsikko: Re: Crear un MOD que haga una cosa o otra dependiendo de si otro MOD está instalado
Kirjoitti: vicram10 - helmikuu 17, 2011, 03:10:43 IP
el <operation error="skip"> te servira como dice Doc..
ya que si no encuentra simplemente lo deja pasar de largo y por consiguiente.. no hara nada y no se rompera nada...

Podras tener 2 operations que hagan lo mismo pero que buscan diferentes cosas.. y con el skip le dices que no haga nada si no lo encuentra...
Otsikko: Re: Crear un MOD que haga una cosa o otra dependiendo de si otro MOD está instalado
Kirjoitti: davidhs - helmikuu 17, 2011, 05:48:33 IP
Con el <operation error="skip"> no funciona, es como si no pusiese nada (<operation>) pero con <operation error="ignore"> sí.

No es exactamente igual que <file error="skip"> (aunque el resultado final es el mismo, lo salta). Con <file error="skip"> se salta todo el archivo y pone
Saltar archivo
y con <operation error="ignore"> se salta la operación y pone
Prueba fallida (Ignorar errores)

Gracias a ambos por vuestra ayuda. Marco la pregunta como resuelta.

¡Lástima que no haya forma de decir que si fallan los dos operation opcionales dé error!

Edito: Probé a poner en un file solo las operation optativas
<file ...>
  // operations obligatorias
</file>

<file ...>
  <operation error="ignore"> op1 </operation>
  <operation error="ignore"> op2 </operation>
</file>


pero es igual, si fallan las dos no da error sino que continúa.