Almacenando arreglos en un campo
abril 26, 2016 Publicado en Software y HardwareEtiquetas: SuiteCRM
Agregar las vistas
La primera plantilla que agregaremos será la plantilla para atender la edición.
/<directorio_crm>/modules/<Módulo>/templates/forEditView<Variable_Plural>.tpl
<script type="text/javascript" src="modules/<Módulo>/templates/scripts/<variable_plural>.js"></script>
<script>
//Declarar los datos para el QuickSearch para la búsqueda de un establecimiento
var sqs_<módulo_campo_quicksearch> = '{$sqs_<módulo_campo_quicksearch>}';
//Declarar el objecto del QuickSearch como un arreglo vacío si aun no lo han declarado
if(typeof sqs_objects == 'undefined') var sqs_objects = new Array;
</script>
<link rel="stylesheet" type="text/css" href="modules/<Módulo>/templates/styles/<variable_plural>.css" />
<table class='lista'>
<tbody>
<tr class='repositorio'>
<td>
<input type='hidden' name='<variable>[]' value='%rand%'>
<input type='text' name='<variable>_<campo_a>_%rand%' value=''>
<input type='text' name='<variable>_<campo_b>_%rand%' value=''>
<input type='text' name='<variable>_<campo_quicksearch>name_%rand%' id='<variable>_<campo_quicksearch>name_%rand%' value='' class='sqsEnabled'>
<input type='hidden' name='<variable>_<campo_quicksearch>id_%rand%' id='<variable>_<campo_quicksearch>id_%rand%' value=''>
</td>
<td>
<button type="button" onclick="remove<Variable>Item(this);">{sugar_getimage name="id-ff-remove-nobg" alt="$app_strings.LBL_ID_FF_REMOVE" ext=".png"}</button>
</td>
</tr>
<tr class='cabecera'>
<td><button type="button" onclick="rand = add<Variable>Item(this); set<Variable>QuickSearch(rand, '<campo_quicksearch>', sqs_<módulo_campo_quicksearch>);">{sugar_getimage name="id-ff-add" alt="$app_strings.LBL_ID_FF_ADD" ext=".png"}</button></td>
</tr>
{foreach from=lt;variable_plural> item=<variable>}{assign var=rand value=100000|mt_rand:999999}
<tr>
<td>
<input type='hidden' name='<variable>[]' value='{$rand}'>
<input type='text' name='<variable>_<campo_a>_{$rand}' value='{lt;variable>.<campo_a>}'>
<input type='text' name='<variable>_<campo_b>_{$rand}' value='{lt;variable>.<campo_b>}'>
<input type='text' name='<variable>_<campo_quicksearch>name_{$rand}' id='<variable>_<campo_quicksearch>name_{$rand}' value='{lt;variable>.<campo_quicksearch>name}' class='sqsEnabled'>
<input type='hidden' name='<variable>_<campo_quicksearch>id_{$rand}' id='<variable>_<campo_quicksearch>id_{$rand}' value='{lt;variable>.<campo_quicksearch>id}'>
</td>
<td>
<button type="button" onclick="remove<Variable>Item(this);">{sugar_getimage name="id-ff-remove-nobg" alt="$app_strings.LBL_ID_FF_REMOVE" ext=".png"}</button>
</td>
<script type="text/javascript">
set<Variable>QuickSearch('{$rand}', '<campo_quicksearch>', sqs_<módulo_campo_quicksearch>);
</script>
</tr>
{/foreach}
</tbody>
</table>
La siguiente plantilla es la que visualiza la variable.
/<directorio_crm>/modules/<Módulo>/templates/forDetailView<Variable_Plural>.tpl
<ul>{foreach from=<variable_plural> item=<variable>}
<li>
A: {<variable>.<campo_a>} - B: {<variable>.<campo_b>} - {<variable>.<campo_quicksearch>name} -
ID: {<variable>.<campo_quicksearch>id}
</li>
{/foreach}
</ul>
El siguiente es el archivo de estilo con el que ocultaremos el repositorio.
/<directorio_crm>/modules/<Módulo>/templates/styles/<variable_plural>.css
.lista .repositorio { display: none; }
El siguiente archivo es el script que atenderá las acciones en la lista. La documentación puede ayudar a entender el funcionamiento, pero en resumen el objetivo es eliminar la fila cuando se hace uso del botón eliminar, y agregar al final de la lista un clon del repositorio al usar el botón agregar.
/<directorio_crm>/modules/<Módulo>/templates/scripts/<variable_plural>.js
function add<Variable>Item( item ) {
//Buscar la lista
var lista = jQuery(item).parents('.lista')[0];
//Buscar el repositorio y extraer el elemento
var aux = jQuery(lista).find('tr.repositorio')[0];
//Crear el clon del repositorio
var clon = jQuery(aux).clone();
//Crear el número aleatorio con el que identificaremos el item
var rand = Math.ceil(Math.random() * 899999 + 100000);
//Aplicar el identificador en el clon del repositorio
var html = clon.html().replace(/%rand%/g, rand);
clon.html(html);
//Agregar el repositorio al final de la tabla
clon.appendTo( jQuery(lista).find('tbody') );
//Eliminar la clase repositorio del clon para permitir que se visualice.
jQuery(clon).removeClass('repositorio');
//Retornar el identificador de este nuevo item
return rand;
}
function remove<Variable>Item( item ) {
//Eliminar este item de la tabla
jQuery(item).parents('tr')[0].remove();
}
function set<Variable>QuickSearch(rand, campo, sqs_data) {
//Declarar el nuevo item de QuickSearch
sqs_objects[ '<variable>_' + campo + 'name_' + rand] = jQuery.parseJSON(sqs_data.replace(/%rand%/g, rand));
//Determinar el evento para vincular el nuevo item de QuickSearch con la activación del servicio
SUGAR.util.doWhen(
"typeof(sqs_objects) != 'undefined' && typeof(sqs_objects['<variable>_" + campo + "name_" + rand + "']) != 'undefined'",
enableQS
);
}
El último paso es agregar la declaración del idioma por defecto
/<directorio_crm>/modules/<Módulo>/language/en_us.lang.php
'LBL_<VARIABLE_PLURAL>' => 'Nombre de la variable',
A continuación ejecutamos la acción de “Reparar y Reconstruir“, poniendo especial atención a la lista de aciones que se viusalizarán al final del proceso con las acciones a ejecutar en la base de datos.
La variable ya estará disponible en la base de datos y en el estudio para ser agregado en las distintas vista.