Módulos - Packages validación y DoliStore reglas
Introducion
Estas son las reglas que imperan en la validación de un módulo objeto de validación en https://www.dolistore.com
Reglas
Denominación del paquete
Todos los módulos para Dolibarr deben llamarse 'module_mymodulename-VERSION.zip' (donde VERSION puede ser xo x.y o x.y.z). Si el módulo es para otro software, el nombre zip debe ser 'moduleotheroftware_mymodulename-VERSION.zip' (por ejemplo, moduleprestashop_mymodulename-1.0.zip).
Los paquetes del tipo de aplicación de Android, documento PDF, son libres de usar el nombre de su elección.
El resto del documento solo se aplica a los módulos Dolibarr.
Reglas sobre el código
1-Estructura
Todos los archivos del módulo deben estar el el directorio del módulo, ejemplo en htdocs/modulebuilder/template
- mymodule/* contains php pages (note that you can also add any other subdir of your choice). Note: If your module is a metapackage (a module that will embed other modules in same zip, you must put here a file metapackage.conf)
- mymodule/build/ can contains any file you develop for compiling or building package
- mymodule/core/modules/ contains module descriptor file modMyModule.class.php
- mymodule/core/triggers contains triggers provided by module
- mymodule/admin/ contains pages to setup module
- mymodule/class/ contains PHP class files provided by module
- mymodule/css contains CSS files provided by module
- mymodule/js contains javascript files provided by module to add new functions
- mymodule/docs to provide doc and licence files
- mymodule/img contains images files provided by module
- mymodule/langs/xx_XX contains language files for language xx_XX (try to put at least en_US)
- mymodule/lib contains libraries provided and used by module
- mymodule/scripts to provide command line tools or scripts. Note: Command lines script must start with line #!/usr/bin/env php
- mymodule/sql contains SQL file provided by module to add new tables or indexes
- mymodule/theme/mytheme if module provide its own theme/skin
2-Custom directory management - Inclusion of main or master files
Por esta razón, cuando intente cargar el entorno Dolibarr incluyendo el archivo main.inc.php o master.inc.php, debe incluir 2 formas de incluirlos:
Recomendamos usar el método sugerido en los ejemplos en los archivos htdocs/modulebuilder/*.php y presentado aquí para cargar main.inc.php, pero puede reemplazar main.inc.php con master.inc.php para scripts de línea de comandos. Se sabe que esta parte del código funciona en todas las situaciones (usando Apache, Nginx, IIS, usando host virtual de subdirectorios, después de una redirección de proxy o no, si la raíz web es detectada automáticamente o forzada por el archivo conf, y cualquier combinación de esto).
// Load Dolibarr environment
$res = 0;
// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1;
while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { $i--; $j--; }
if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php";
if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php";
// Try main.inc.php using relative path
if (!$res && file_exists("../main.inc.php")) $res = @include "../main.inc.php";
if (!$res && file_exists("../../main.inc.php")) $res = @include "../../main.inc.php";
if (!$res && file_exists("../../../main.inc.php")) $res = @include "../../../main.inc.php";
if (!$res) die("Include of main fails");
3-Inclusión
- Todas las inclusiones de archivos del core deben realizarse mediante include_once/require_once/include/require DOL_DOCUMENT_ROOT.'/Path_to_Core_Files';
- Todas las inclusiones de archivos de archivos específicos al módulo deben realizarse mediante include_once/require_once/include/require './My_Module_directory/...';
- Todas las inclusiones de archivos realizadas por los hook/triger/casos espaciales deben realizarse mediante dol_include_once('/My_Module_directory/...'):
4-Enlaces
Todos los enlaces gestionador por HTML hacia páginas específicas (href, src,...) del módulo deberían usar getNomURL de la clase de un objeto o alernativamente usando dol_buildpath
5-Modificaciones de archivos del core Dolibarr
Si son necesarias modificaciones de archivos del core de Dolibarr para el funcionamiento del módulo. Serán aceptadas:
- Si son subidas a la rama dev del GitHub de Dolibarr (agregar función a las clases estándar sin riesgo de regresión, html.form.class.php / function.lib.php, etc.)
- Si se añade hook, trigger o función, o se añaden parámetros opcionales a funciones existentes.
Publicación en dolistore
MetaPaquetes
Si su módulo es un "metapaquete", por lo tanto, un módulo que incluye varios módulos, debe incluir un archivo llamado 'metapackage.conf' en el directorio principal con el nombre de la lista de todos los demás módulos proporcionados por su paquete. Por ejemplo, la imagen de su módulo se llama "mymetapack". Al instalar este módulo, también instala los módulos "abc" y "def". Por lo tanto, debe incluir en el zip de su paquete un archivo * mymetapack / metapackage.conf * con el siguiente contenido:
# Este archivo describe todos los módulos incluidos en el zip module_mymetapack-x.y.zip
mymetapack
abd
def
La implementación de un metapaquete desde el asistente de implementación de Dolibarr solo es posible con Dolibarr v11 +
Idioma
La descripción del producto se requiere en inglés.
Soporte
Si el módulo es de pago, es obligatorio indicar en la descripción del producto un e-mail o canal de soporte a los usuarios. Es obligatoria la descripción del producto en Inglés, Francés y Español (así como el enlace de soporte)