Almacenando arreglos en un campo
abril 26, 2016 Publicado en Software y HardwareEtiquetas: SuiteCRM
Declaración de la variable y sus funciones de almacenamiento
- Almacenando arreglos en un campo
- Declaración de la variable y sus funciones de almacenamiento
- Agregar las vistas
- Para los perspizaces
El primer paso corresponde al proceso de agregar la variable a la declaración de campos del módulo, labor que se realiza modificando la información en el archivo vardefs correspondiente.
Por tratarse de un campo que almacena una lista de variables deberemos tener especial cuidado en distinguir entre <Variable_Plural> y <Variable>. Esto es necesario para facilitar la lectura del código una vez hayamos reemplazado los elementos con los nombres correspondientes.
/<directorio_crm>/modules/<Módulo>/vardefs.php
Agregamos en el arreglo fields la declaración de la variable.
'<variable_plural>' =>
array (
'name' => '<variable_plural>',
'vname' => 'LBL_<VARIABLE_PLURAL>',
'comment' => '',
'group' => '<variable_plural>',
'type' => 'text',
'function' => array(
'name' => 'get<Variable_Plural>Widget',
'returns' => 'html'
),
'studio' => 'visible',
),
El elemento interesante del anterior código es la línea function donde se declara un llamado a una función que será la encargada de atender la visualización del campo en las diferentes vistas del módulo. La misma línea declara que la respuesta de esta función deberá ser el código HTML de la vista.
Por lo general esta nueva función se agrega al final del archivo donde se declara el módulo. Agregue el siguiente código fuera de la declaración de la clase <Módulo> y al final del archivo.
Recuerde que la variable se guardará como un JSON así que debemos incluir el archivo de la clase JSON de SuiteCRM al inicio del archivo del módulo.
require_once('include/JSON.php');
/<directorio_crm>/modules/<Módulo>/<Módulo>.php
function get<Variable_Plural>Widget($focus, $field, $value, $view, $tabindex='0') {
//Declarar JSON y Smarty
$json = new JSON();
$ss = new Sugar_Smarty();
//Decodificar la variable (está almacenada como JSON)
lt;variable_plural> = $json->decode( html_entity_decode($focus-><variable_plural>));
//Asignar la variable para visualizarla en la plantilla
$ss->assign('<variable_plural>', lt;variable_plural>);
//Plantilla por defecto
$template = "modules/<Módulo>/templates/forDetailView<Variable_Plural>.tpl";
//Si es edición, usar la plantilla de edición
if($view == 'EditView' || $view == 'QuickCreate') {
//Declaramos QuickSearch si hay un campo que lo requiere
require_once('include/QuickSearchDefaults.php');
$qsd = QuickSearchDefaults::getQuickSearchDefaults();
$sqs_data = $qsd->getQSParent();
$sqs_data['field_list'] = array('name', 'id');
$sqs_data['populate_list'] = array('<variable>_<campo_quicksearch>name_%rand%', '<variable>_<campo_quicksearch>id_%rand%');
$sqs_data['form'] = $view;
$sqs_data['modules'] = array('<Módulo_Campo_QuickSearch>');
//Si desea agregar un filtro habilite las siguientes líneas
//$sqs_data['conditions'][] = array('name'=>'<módulo_campo_quicksearch>.<variable_filtro>','op'=>'equal','value'=>'<valor_del_filtro>');
//$sqs_data['group'] = 'AND';
$ss->assign('sqs_<módulo_campo_quicksearch>', $json->encode($sqs_data) );
$template = "modules/<Módulo>/templates/forEditView<Variable_Plural>.tpl";
}
//Retornar el resultado de la plantilla
return $ss->fetch($template);
}
El siguiente paso es extender el módulo para atender el almacenamiento de la variable. Este ajuste se hace en el mismo archivo donde agregamos la función que atiende la generación de las vistas del campo.
/<directorio_crm>/modules/<Módulo>/<Módulo>.php
Recuerde que si ya existe la función deberá agregar estas líneas según su criterio.
function save($check_notify = FALSE){
if(isset($_POST['<variable>'])) {
//Obtener el arreglo con los identificadores de las variables
$_<variable_plural> = $_POST['<variable>'];
//Retiramos el primer elemento por tratarse del repositorio
array_shift($_<variable_plural>);
//Declaramos la variable donde guardaremos el campo
lt;variable_plural> = array();
//Recorrer el arreglo de identificadores
foreach($_<variable_plural> as $item) {
lt;variable_plural>[] = array(
//Guardar cada uno de los campos con este identificador
'<campo_a>' => $_POST['<variable>_<campo_a>_'.$item],
'<campo_b>' => $_POST['<variable>_<campo_b>_'.$item],
'<campo_quicksearch>name' => $_POST['<variable>_<campo_quicksearch>name_'.$item],
'<campo_quicksearch>id' => $_POST['<variable>_<campo_quicksearch>id_'.$item]
);
}
//Declaramos el json
$json = new JSON();
//Asignar el JSON al campo
$this-><variable_plural> = $json->encode(lt;variable_plural>);
}
//Guardar la instancia del módulo
return parent::save($check_notify);
}