Almacenando arreglos en un campo

abril 26, 2016 • Publicado en Software y Hardware
Etiquetas:

Declaración de la variable y sus funciones de almacenamiento

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);

}

Capí­tulos: | Anterior | 1 | 2 | 3 | 4 | Siguiente |

Dejar un Comentario