Métodos EAV 3 con soporte para grupos de atributos

getAllElementValuesById($idx,$opt) - Obtiene todos los datos de un registro por su IDX
    Parámetros del array conf:
    raw (bool): true para mostrar datos sin formato
     sha (bool): true para mostrar atributos ocultos
     attr (string): Nombre de un atributo para mostrar sólo datos de ese atributo
     gid (int): Group ID para cargar sólo los datos de un valor de un grupo
     grp (bool): true para usar la nueva función con soporte de grupos de atributo
getDataByAttr($conf) - Obtiene el valor de un atributo e IDX dados.
    Parámetros del array conf:
    idx (int): IDX del registro
    attr (string): Nombre del atributo
    gid (int): Cuando es un grupo se debe indicar el GID del atributo, además del IDX
    gsv (bool): (Get Select Value) true para devolver el valor del selector
getItemDataByAttr($idx,$attr,$gid,$gsv) - Obtiene el valor de un atributo e IDX dados.
getIDXByData($attr,$data) - Obtiene el IDX de un dato y atributos dados.
getAllIDXByAttrValue($attr,$value) - Obtiene los IDX del valor de un atributo.
getAttrNameById($id) - Obtiene el nombre de un atributo desde el ID de ese atributo.
getAttrByValId($idx) - Devuelve el nombre de todos los atributos asignados a un validador de datos.
getElementTitles($group_id,$stat) - Obtiene los títulos de todos los elementos desde el ID de un grupo de elementos. Si $stat fale cualquier cosa que no sea null o false, devuelve también los elementos desconectados.
getSelectValue($selector_ref,$value) - Devuelve el dato de un selector para un valor dado.
getSelectValues($ref) - Devuelve todos los valores de un selector de la referencia indicada
getSelectID($ref,$name) - Obtiene el ID a partir de la referencia y el nombre de un selector
delSelectorItem($conf) - Borra un elemento de un selector
    Parámetros del array conf:
     value(int): Valor numérico del selector
     ref (string): Referencia del selector
formatAttr($attr,$data) - Formatea el dato dependiendo del atributo.
getElementData($conf) - Obtiene todos los datos para un determinado grupo de elementos y filtros de búsqueda (alias de getAllElementsData($e,$f,$idx,$sdd,$sda) usando un array de configuración).
    Parámetros obligatorios del array conf:
    e (int): ID del grupo de elementos.
    f (string): Filtros.

    Parámetros opcionales del array conf:
    grp (bool): true para activar el soporte de grupos de atributos
    idx (int): Devuelve sólo los datos del IDX facilitado.
    sdd (bool): true para devolver datos desconectados.
    sda (bool): true para devolver atributos desconectados.
    mcc (string): Caracter de separación para atributos múltiples concatenados (, por defecto).
    nomulti (bool): true para no cargar los datos de atributos múltiples.
    noconcat (bool): true para devolver los atributos múltiples en un array, en vez de concatenados.
    alang (bool): true para devolver los campos multi-idioma en un array con todos los idiomas activos .
    emlang (bool): true para expandir los campos multi-idioma en formato atributo_es, atributo_en, Etc.
    raw (bool): true para devolver los datos sin formatear
    limit (int): Número de registros a devolver
    debug (bool): true para activar la depuración.
    benchmark (bool): true para devolver el tiempo de ejecución del método.
    all (bool): True para buscar todas las palabras y dentro de las claves de texto (opciones adicionales si all es true):
        - literal (bool): Si "all" es true, hace una búsqueda literal de la frase de búsqueda, en vez de buscar en todas las palabras.
        - blktk (bool): True para bloquear la búsqueda dentro de las claves de texto (BLocK Text Keys).
        - blk_selector (bool): True para buscar el valor del selector y no dentro de su nombre.
        - exact (bool): True para hacer una búsqueda exacta (debe coincidir con el valor entero del campo)
        - get_quoted (bool): True para convertir palabras entre comillas en una frase de búsqueda.
getAttrInfo($attr) - Obtiene un objeto con toda la información del ID o nombre de un atributo.
getAttrOriginDBName($attr) - Obtiene el nombre del campo de la base de datos que contiene los datos para un atributo determinado.
getFilterIds($attr,$value) - Obtiene un array con los IDX únicos de un determinado par de atributo y valor.
getIntersectFilterIds($filtro,$conf) - Obtiene los valores que cumplen todos los datos de un array de filtrado.
Formato del array $filtro:
['campo1'=>'busqueda1','campo2'=>'busqueda2'...]
Devolverá los IDX en los que coincidan las búsquedas de todos los atributos.

Parámetros del array conf:
all (bool): True para buscar todas las palabras y dentro de las claves de texto (opciones adicionales si all es true):
        - literal (bool): Si "all" es true, hace una búsqueda literal de la frase de búsqueda, en vez de buscar en todas las palabras
        - blktk (bool): True para bloquear la búsqueda dentro de las claves de texto (BLocK Text Keys).
        - blk_selector (bool): True para buscar el valor del selector y no dentro de su nombre.
        - exact (bool): True para hacer una búsqueda exacta (debe coincidir con el valor entero del campo).
        - get_quoted (bool): True para convertir palabras entre comillas en una frase de búsqueda.
IDXExist($idx) - Verifica si existe un IDX
AttrExist($attr) - Verifica si existe un atributo
listElementOptions() - Devuelve una lista de todas las opciones de los elementos
detectDupeAttr($limit) - Detecta atributos "no múltiples" duplicados y activos, $limit limita el número de resultados. Esta función sirve para conciliar la base de datos.
detectDupeMultiAttr() - Detecta atributos múltiples duplicados
updateGrpDataValue($conf) - Actualiza todos los datos de un grupo y sus subgrupos contenidos en un solo array
    Parámetros del array conf:
     idx (int): IDX del registro
     gid (int): GID del sub-grupo
     grp (array): Array multidimensional con los datos del grupo y sus subgrupos
     debug (bool): True para mostrar información de depuración

     Formato del array de datos:

[idx] => 167
[gid] => 2
[grupo_ejemplo] => Array
(
    [subgrupo_1_grp] => 'Dato 1'
    [subgrupo_2_grp] => 'Dato 2'
    [subgrupo_multiidioma_grp] => Array
    (
        ['es'] => 'Valor multi-idioma 1'
        ['en'] => 'Multi-language value 1'
    )
    [subgrupo_multivalor_grp] => Array
    (
        [0] => 'Valor multi 1'
        [1] => 'Valor multi 2'
    )
    [subgrupo_multivalor_multiidioma_grp] => Array
    (
        [0] => array 
            (    
                 ['es'] => 'Valor multi-idioma 1'
                 ['en'] => 'Multi-language value 1'
            )
        [1] => array 
            (    
                 ['es'] => 'Valor multi-idioma 2'
                 ['en'] => 'Multi-language value 2'
            )
    )
)

Notas sobre el formato del array de datos del grupo:
- Si se llama la función sin GID se crea un nuevo grupo en el IDX suministrado. Si se suministra el GID se actualizan los datos del registro existente.
- Si falta el IDX, el array contiene más de un grupo, el array no contiene ningún grupo, o falta algún sub-grupo, la función retornará con error.
- Los tipos deben coincidir, si es un atributo multi los valores deben ir en un array, si es normal deben ir en una variable.
- El array debe contener todos los sub-grupos definidos para el grupo en los atributos, si falta alguno la función retornará con error, si se ponen sub-grupos inexistentes en la definición del atributo serán ignorados.
- En los datos multi-idioma deben estar los datos de todos los idiomas activos en webvivo en el array mlang aunque el idioma no tenga valor, por ejemplo, si el framework tiene activo español e inglés, mlang debe contener [[es]=>'valor',[en]=>'value'], si uno está vacío debe suministrarse igual, por ejemplo [[es]=>'valor',[en]=>''].
- Si algún valor o el valor de su clave de texto está repetido, no se grabará el valor, si se envía el mismo valor que ya existe, simplemente se ignora (se puede ver el error correspondiente si se activa el debug).

updateDataValue($conf) - Actualiza o añade un valor para un atributo e IDX determinados
    Parámetros del array conf:
    idx (int): IDX del registro
     attr (strig): Nombre del atributo a añadir o actualizar
     value (string): Valor a añadir o actualizar
     gid (int): Indicar el gid si es un atributo de sub-grupo
     mlang (array): Datos de texto multi-idioma (el valor debe ser la clave de texto)
getElementGrpNames($json_lst,$eid) - Obtiene los nombres de atributos de una lista de subgrupos de elementos ordenados a partir del json "grp_attr_lst" de la tabla de atributos y el "element_id" de la tabla de elementos.
delDataValue($conf) - Borra el valor de un determinado atributo e IDX
    Parámetros del array conf:
    idx (int): IDX del registro
     attr (string): Nombre del atributo
     value: Valor a borra en atributos múltiples
     gid: Indicar el gid si es un atributo de sub-grupo
     stat (int): Nuevo valor de stat (8 por defecto)
delDataValueByID($ids) - Borra uno o más registros de EAV data por su ID ($ids puede se un id o vaios en un array)
getAllRecordAttrs($idx) - Carga todos los atributos activos de un IDX
delAllDataFromIDX($idx) - Borra todos los atributos activos de un IDX
getAllRecords() - Genera una lista de todos los registros
searchStrInData($conf) - Busca una cadena de texto en todos los atributos char, text y sus claves de texto. Valores de conf:
Parámetros del array conf:
    search (string): Cadena a buscar.
    attr (string/array): Atributo o array con atributos en los que buscar.
    blktk (bool): True para bloquear la búsqueda dentro de las claves de texto.
    blk_selector (bool): True para buscar el valor del selector y no dentro de su nombre.
    literal (bool): Si "all" es true, hace una búsqueda literal de la frase de búsqueda, en vez de buscar en todas las palabras.
    exact (bool): True para hacer una búsqueda exacta (debe coincidir con el valor entero del campo).
    get_quoted (bool): True para convertir palabras entre comillas en una frase de búsqueda.
detectDupeAttr($limit) - Detecta atributos no-multi duplicados y los devuelve en un array multidimensional [['idx'] => ['dupe_attr']]. $limit reduce el número de registros a buscar.
delRecord($idx) - Borra un registro y todos sus datos por su IDX, sin purgarlo de la base de datos.
delRecords($idx_list) - Borra una lista de registros por IDX y todos sus datos sin purgarlos de la base de datos.
getElementOptionsID​($eid) - Devuelve un array con la lista de IDs de opciones que tiene un elemento activas.
getElementOptions($eid) - Devuelve un array con la lista de nombres de las opciones que tiene un elemento activas a partir del Element ID
chkElementOptions($eid,$opt_name) - Comprueba si un elemento tiene activa la opción facilitada a partir del Element ID.
updateElementOptions($eid,$options,$upt) - Crea, actualiza o borra opciones de un elemento. Las opciones deben existir en la tabla de opciones de elementos (db_eav_elements_options_names), o serán ignoradas.

Crear o actualizar opciones de un elemento:
(Si $upt es true se conservan los existentes, en caso contrario la lista queda como se facilite)


$opt = ['exportable','importable'];

//Añade las opciones exportable e importable y borra cualquier otra que pudiera haber
$out = $wv->eav->updateElementOptions($eid,$opt);

//Añade las opciones exportable e importable, conservando las opciones que ya tuviera el elemento
$out = $wv->eav->updateElementOptions($eid,$opt,true);

//Devuelve la lista final de opciones tras la actualización
$wv->vardump($out);

 

Borrar opciones de un elemento:

 


//Borra todas las opciones de un elemento
$wv->eav->updateElementOptions($eid);

 

 

updateElementItems($conf) - Crea o actualiza elementos dentro de un grupo de elementos incluido los subgrupos si el atributo es de tipo grupo
Parámetros del array conf:
    id (int): ID del elemento que se quiere editar (si no se da un ID se crea un nuevo registro).
    grp_id (int): ID del grupo de elementos (obligatorio).
    type_id (int): ID del tipo de elemento (Si no se facilita se deja sin asignar).
    attr_id (int): ID del atributo que se va a asignar al nuevo elemento.
    attr_name (string): Nombre del atributo que se va a asignar al nuevo elemento.
    disabled (bool): Crea el nuevo elemento desactivado o lo desactiva si ya existe.
    options (array): Array con las opciones del elemento, se pueden usar nombres o el id de la opción
    text (array): Array con los títulos del elemento en cada idioma ['iso'=>'text'].
    NOTA: Se debe suministrar attr_id o attr_name, si se ponen ambos se usará el ID.

 

Ejemplo de uso:


$conf = ['grp_id'=>1,'attr_id'=>173,'text'=>['es'=>'Prueba']];
$out = $wv->eav->updateElementItems($conf);

$wv->showMsg($out->err,array('style' => 'danger'));
$wv->showMsg($out->msg);

if (empty($out->stat)) {
    echo "KO";
} else {
    echo "OK";
}

getElementItem($id) - Obtiene todos los valores de un elemento a partir de su ID
deleteElementItems($ids) - Borra uno o más elementos (usar un array si es más de uno), incluídos sus subgrupos si el atributo principal es un grupo
updateSelectorItems($conf) - Crea o actualiza opciones de los selectores.
Parámetros del array conf:
    value (int): Valor de la opción del selector creada o actualizada
    ref (string): Nombre del selector principal
    ref_v (string): Nombre del selector virtual
    name (string): Valor de la opción o clave del gestor de texto es multi-idioma.
    text (array): Array con los valores de la opción en cada idioma si es multi-idioma ['iso'=>'text'].
    disabled (bool): Crea la nueva opción desactivada o lo desactiva si ya existe.

Ejemplo de uso para crear una nueva opción de un selector:
(Añade la opción "fresa ácida" al selector "gominolas")


$conf = ['ref'=>'gominolas','name'=>'fresa ácida'];
$out = $wv->eav->updateSelectorItems($conf);


Ejemplo de uso para crear una nueva opción de un selector:
(Añade la opción "fresa ácida" al selector "gominolas" y al selector virtual "chuches")


$conf = ['ref'=>'gominolas','name'=>'fresa ácida','ref_v'=>'chuches'];
$out = $wv->eav->updateSelectorItems($conf);


Ejemplo de uso para crear una nueva opción de un selector multi-idioma:
(Añade la opción "fresa ácida" y "acid strawberry" usando la clave de texto "fresa_acida_keyword" al selector "gominolas". Con este mismo comando se actualizan los datos cuando son valores multi-idioma. Si se envía sin el array text[] y sin 'value', dará error.)


$text['es'] = "fresa ácida";
$text['en'] = "acid strawberry";
$conf = ['ref'=>'gominolas','name'=>'fresa_acida_keyword','text'=>$text];
$out = $wv->eav->updateSelectorItems($conf);


Ejemplo de uso para actualizar una nueva opción de un selector multi-idioma:
(Actualiza la opción a "manzana" y "apple" usando el valor de la opción de selector "gominolas". Al usar el 'value', mantiene la misma clave de texto 'name' que ya hubiera configurada.)


$text['es'] = "fresa ácida";
$text['en'] = "acid strawberry";
$conf = ['ref'=>'gominolas','value'=>'2','text'=>$text];
$out = $wv->eav->updateSelectorItems($conf);


Ejemplo de uso para editar una opción existente de un selector:
(Actualiza la opción con valor "2" del selector "gominolas" y cambia su contenido por "plátano")


$conf = ['value'=>'2','ref'=>'gominolas','name'=>'plátano'];
$out = $wv->eav->updateSelectorItems($conf);


Ejemplo de uso para editar una opción existente de un selector añadiendo la opción a un selector virtual:
(Añade al selector virtual "chuches" la opción con valor "2" del selector "gominolas" manteniendo su valor actual)


$conf = ['value'=>'2','ref'=>'gominolas','ref_v'=>'chuches'];
$out = $wv->eav->updateSelectorItems($conf);


El método updateSelectorItems() devuelve mensajes, errores y el código de "value" de la opción creada o actualizada en el stat (false si hubo errores).

Se puede ver añadiendo este código:


$wv->showMsg($out->err,array('style' => 'danger'));
$wv->showMsg($out->msg);

if (empty($out->stat)) {
    echo "KO";
} else {
    echo "Value: ".$out->stat;
}