Desarrollo de un módulo: Difference between revisions

Jump to navigation Jump to search
m
no edit summary
mNo edit summary
Line 40: Line 40:
Crea un subdirectorio sql en el directorio de tu módulo (por ejemplo, htdocs/mimodulo/sql), con el fin de color los scripts sql que vas a crear. A continuación, en la función load_tables de tu fichero descriptor, modifica la línea
Crea un subdirectorio sql en el directorio de tu módulo (por ejemplo, htdocs/mimodulo/sql), con el fin de color los scripts sql que vas a crear. A continuación, en la función load_tables de tu fichero descriptor, modifica la línea


<source lang="php">
  $dir = DOL_DOCUMENT_ROOT.'/mymodule/sql/';
  $dir = DOL_DOCUMENT_ROOT.'/mymodule/sql/';
</source>
por
por
<source lang="php">
  $dir = DOL_DOCUMENT_ROOT.'/mimodulo/sql/';
  $dir = DOL_DOCUMENT_ROOT.'/mimodulo/sql/';
</source>


''Regla a respetar:''  
''Regla a respetar:''  
Line 49: Line 53:


Ejemplo de contenido de un fichero data.sql
Ejemplo de contenido de un fichero data.sql
<source lang="sql">
  delete from llx_const where name='MYMODULE_IT_WORKS' and entity='__ENTITY__';
  delete from llx_const where name='MYMODULE_IT_WORKS' and entity='__ENTITY__';
  insert into llx_const (name, value, type, note, visible, entity) values ('MYMODULE_IT_WORKS','1','chaine','A constant vor my module',1,'__ENTITY__');
  insert into llx_const (name, value, type, note, visible, entity) values ('MYMODULE_IT_WORKS','1','chaine','A constant vor my module',1,'__ENTITY__');
</source>


Las órdenes SQL de los ficheros deben de ser operacionales para la base de datos '''mysql'''.
Las órdenes SQL de los ficheros deben de ser operacionales para la base de datos '''mysql'''.
Line 77: Line 83:


Copia allí el fichero '''skeletons_page.php''', que va a servir de punto de partida a tu pagina, y copia también el fichero '''pre.inc.php'''. Modifica el fichero '''pre.inc.php''' para que la ruta relativa de
Copia allí el fichero '''skeletons_page.php''', que va a servir de punto de partida a tu pagina, y copia también el fichero '''pre.inc.php'''. Modifica el fichero '''pre.inc.php''' para que la ruta relativa de
<source lang="php">
  include("../../main.inc.php)";
  include("../../main.inc.php)";
</source>


sea la correcta, en función de la profundidad del directorio en el que se encuentra el fichero pre.inc.php (quitando o añadiendo "../"). Es en el "main" donde se carga el entorno técnico y las habilitaciones. Los objetos variables se posicionan ahora:
sea la correcta, en función de la profundidad del directorio en el que se encuentra el fichero pre.inc.php (quitando o añadiendo "../"). Es en el "main" donde se carga el entorno técnico y las habilitaciones. Los objetos variables se posicionan ahora:
Line 90: Line 98:
=== Completar su descriptor de módulo ===
=== Completar su descriptor de módulo ===
En su descriptor de módulo, complete la declaración de this->const para añadir la constante MAIN_MODULE_mimodulo_NEEDSMARTY.
En su descriptor de módulo, complete la declaración de this->const para añadir la constante MAIN_MODULE_mimodulo_NEEDSMARTY.
<pre>
<source lang="php">
$this->const=array(1=>array('MAIN_MODULE_MIMODULO_NEEDSMARTY','chaine',1,'Need smarty',0));
$this->const=array(1=>array('MAIN_MODULE_MIMODULO_NEEDSMARTY','chaine',1,'Need smarty',0));
</pre>
</source>


Esto dará como resultado, durante la inicialización del objeto $conf, el llenado de $conf->need_smarty de los módulos que necesita de smarty y si un módulo es necesrio, el código de main.inc.php cargará sistemáticamente las librerías de Smarty.
Esto dará como resultado, durante la inicialización del objeto $conf, el llenado de $conf->need_smarty de los módulos que necesita de smarty y si un módulo es necesrio, el código de main.inc.php cargará sistemáticamente las librerías de Smarty.
Line 105: Line 113:


Para un ''insert'', ''update'' o ''delete'':
Para un ''insert'', ''update'' o ''delete'':
<source lang="php">
  $db->begin();  // Debut transaction
  $db->begin();  // Debut transaction
  $db->query("Ma requete insert, update ou delete");
  $db->query("Ma requete insert, update ou delete");
  $db->commit();      // Valide
  $db->commit();      // Valide
  o $db->rollback()  // Annule
  o $db->rollback()  // Annule
</source>


Para una lectura:
Para una lectura:
<source lang="php">
  $resql=$db->query("Ma requete select");
  $resql=$db->query("Ma requete select");
  if ($resql)
  if ($resql)
Line 131: Line 142:
         }
         }
  }
  }
</source>


== Definición de estilos ==
== Definición de estilos ==
Line 173: Line 185:


He aquí un ejemplo de declaración de entradas de menú en el fichero descriptor:
He aquí un ejemplo de declaración de entradas de menú en el fichero descriptor:
<pre>
<source lang="php">
// Main menu entries
// Main menu entries
$this->menu = array(); // List of menus to add
$this->menu = array(); // List of menus to add
Line 207: Line 219:
'user'=>2); // 0=Menu for internal users,1=external users, 2=both
'user'=>2); // 0=Menu for internal users,1=external users, 2=both
$r++;
$r++;
</pre>
</source>


Para condicionar el acceso al menú segun los permisos, modificar la propiedad '''perms''' de la tabla. Ver el capítulo sobre permisos, un poco más abajo, para saber como realizar los permisos.
Para condicionar el acceso al menú segun los permisos, modificar la propiedad '''perms''' de la tabla. Ver el capítulo sobre permisos, un poco más abajo, para saber como realizar los permisos.
Line 221: Line 233:


A continuación, rellena la tabla $this->rights con tantas entradas como permisos diferentes vayas a definir:
A continuación, rellena la tabla $this->rights con tantas entradas como permisos diferentes vayas a definir:
<source lang="php">
  $this->rights[$r][0] = 10001;
  $this->rights[$r][0] = 10001;
  $this->rights[$r][1] = 'Texto por defecto de mi permiso';
  $this->rights[$r][1] = 'Texto por defecto de mi permiso';
Line 227: Line 240:
  $this->rights[$r][5] = 'subaccion';
  $this->rights[$r][5] = 'subaccion';
  $r++;
  $r++;
</source>


En $this->rights[$r][0], introduce un id de permiso que no haya sido ocupado ya (para saber qué id están siendo ya utilizadas, ver el menú '''Información del Sistema''' en una instalación de Dolibarr que esté funcionando. En $this->rights[$r][3], introduce 1 si este permiso se atribuye por defecto a los usuarios según son creados. En $this->rights[$r][1] introduce un texto por defecto -que será mostrado si no se encuentra traducción para tu permiso en el fichero '''admin.lang'''). En $this->rights[$r][4] y $this->rights[$r][5], introduce una cadena de acción y subacción sin espacios. Después puedes probar si un usuario tiene los permisos bien, introduciendo la siguiente secuencia en el código PHP:
En $this->rights[$r][0], introduce un id de permiso que no haya sido ocupado ya (para saber qué id están siendo ya utilizadas, ver el menú '''Información del Sistema''' en una instalación de Dolibarr que esté funcionando. En $this->rights[$r][3], introduce 1 si este permiso se atribuye por defecto a los usuarios según son creados. En $this->rights[$r][1] introduce un texto por defecto -que será mostrado si no se encuentra traducción para tu permiso en el fichero '''admin.lang'''). En $this->rights[$r][4] y $this->rights[$r][5], introduce una cadena de acción y subacción sin espacios. Después puedes probar si un usuario tiene los permisos bien, introduciendo la siguiente secuencia en el código PHP:
<source lang="php">
  if ($user->rights->mimodulo->accion->subaccion) ...
  if ($user->rights->mimodulo->accion->subaccion) ...
 
</source>


= [[File:Art.png]] Definir tus propias cajas (opcional) =
= [[File:Art.png]] Definir tus propias cajas (opcional) =
Line 239: Line 254:


Ejemplo:
Ejemplo:
<source lang="php">
  this->boxes[0][1]='mabox0.php'
  this->boxes[0][1]='mabox0.php'
  this->boxes[1][1]='mabox1.php'
  this->boxes[1][1]='mabox1.php'
Line 244: Line 260:
  ...
  ...
  this->boxes[n][1]='maboxn.php'
  this->boxes[n][1]='maboxn.php'
</source>


A continuación crea los ficheros mabox0.php, mabox1.php...  tomando como ejemplo las cajas existentes (en el directorio htdocs/include/boxes)
A continuación crea los ficheros mabox0.php, mabox1.php...  tomando como ejemplo las cajas existentes (en el directorio htdocs/include/boxes)
Line 280: Line 297:
Teclea en este archivo la lista de nombres de los nuevos ficheros que has creado para tu módulo (descriptor de módulo, nuevos ficherossql de tablas, páginas php, imágenes, etc...)
Teclea en este archivo la lista de nombres de los nuevos ficheros que has creado para tu módulo (descriptor de módulo, nuevos ficherossql de tablas, páginas php, imágenes, etc...)
* Lanza el script vía Perl (necesitas la versión 5.0. o superiores de Perl)
* Lanza el script vía Perl (necesitas la versión 5.0. o superiores de Perl)
<source lang="bash">
  perl makepack-dolibarrmodule.pl
  perl makepack-dolibarrmodule.pl
</source>


El script te pide el nombre de tu módulo, su versión más reciente y la más antigua. Se va a crear un fichero '''mimodulo.tgz''', que incluirá tu módulo listo para ser desplegado.
El script te pide el nombre de tu módulo, su versión más reciente y la más antigua. Se va a crear un fichero '''mimodulo.tgz''', que incluirá tu módulo listo para ser desplegado.
* La persona que reciba tu módulo deberá ubicar el fichero en el directorio raíz de Dolibarr y ejecutar el comando:
* La persona que reciba tu módulo deberá ubicar el fichero en el directorio raíz de Dolibarr y ejecutar el comando:
<source lang="bash">
  tar -xvf monmodule.tgz
  tar -xvf monmodule.tgz
</source>


* Si  deseas que tu módulo sea aprovechado por todos, puedes enviarlo(el fichero tgz) al sitio web de Dolibarr, en la sección de descargar: http://www.dolibarr.org -> downloads -> contrib -> submit a file (debes de haber creado una cuenta y estar logeado para que aparezca el link).
* Si  deseas que tu módulo sea aprovechado por todos, puedes enviarlo(el fichero tgz) al sitio web de Dolibarr, en la sección de descargar: http://www.dolibarr.org -> downloads -> contrib -> submit a file (debes de haber creado una cuenta y estar logeado para que aparezca el link).

Navigation menu