Descripción
int
hw_modifyobject ( int conexión, int objeto_a_cambiar, array eliminar, array añadir, int modo)
Este comando permite eliminar, añadir, o modificar atributos individuales
de un registro de objeto_ El objeto está especificado por el ID de
objeto objeto_a_cambiar_ La primera tabla,
eliminar, es la lista de atributos a eliminar_
La segunda tabla, añadir, es la lista de atributos
a añadir_ Para modificar un atributo, hay que borrar el antiguo y añadir
uno nuevo_ hw_modifyobject() siempre eliminará los
atributos antes de añadir los nuevos excepto si el valor del atributo
a eliminar no es una cadena o una tabla_
El último parámetro determina si la modificación se realiza de manera
recursiva_ 1 quiere decir que sea recursiva_ Si alguno de los objetos
no se puede modificar, será ignorado sin avisar_
Incluso hw_error() podría no indicar un
error aunque alguno de los objetos no pueda ser modificado_
Las claves de ambas tablas son los nombres de los atributos_ El valor
de cada elemento de la tabla puede ser una tabla, una cadena o cualquier
otra cosa_ Si es una tabla, cada valor de atributo se construye como
la clave de cada elemento más dos puntos y el valor de cada elemento_ Si
es una cadena se toma como valor del atributo_ Una cadena vacía producirá
la supresión completa del atributo_ Si el valor no es ni cadena ni tabla,
sino otra cosa, p_ ej_ un entero, no se realizará operación alguna en el
atributo_ Esto es necesario se desea añadir un atributo completamente
nuevo, no solamente un nuevo valor para un atributo existente_ Si la
tabla eliminar contuviera una cadena vacía para dicho atributo, este
se intentaría suprimir, lo que fallaría porque este no existe_ La
siguiente adición de un nuevo valor para dicho atributo también fallará_
Fijando el valor para dicho atributo p_ ej_ a 0 hará que ni siquiera
se intente eliminar, pero funcionará la adición del mismo_
Si desea cambiar el atributo 'Nombre' con el valor actual 'libros' por
el de 'artículos' deberá crear dos tablas y llamar a hw_modifyobject()_
Ejemplo 1_ modificando un atributo // $conexion es una conexión con el servidor Hyperwave
// $idobj es la ID del objeto a modificar
$tablasupr = array("Nombre" => "libros");
$tablaanad = array("Nombre" => "artículos");
$hw_modifyobject($conexion, $idobj, $tablasupr, $tablaanad); |
|
Para borrar/añadir un par nombre=valor de/a el registro de objeto,
simplemente pase la tabla eliminar/añadir y fije el último/tercer
parámetro a tabla vacía_ Si el atributo es el primero con dicho
nombre que se añade, fije el valor del atributo en la tabla eliminar
a un valor entero_
Ejemplo 2_ añadiendo un atributo completamente nuevo // $conexion es una conexión con el servidor Hyperwave
// $idobj es la ID del objeto a modificar
$tablasupr = array("Nombre" => 0);
$tablaanad = array("Nombre" => "artículos");
$hw_modifyobject($conexion, $idobj, $tablasupr, $tablaanad); |
|
Nota:
Los atributos plurilingües, p_ ej_ 'Título', se pueden modificar
de dos maneras_ O bien proporcionando los valores de los atributos
en su forma nativa 'lenguaje':'título', bien proporcionando una tabla
con los elementos para cada lenguaje según se describe más arriba_
El ejemplo anterior podría quedar entonces:
Ejemplo 3_ modificando el atributo Título $tablasupr = array("Título" => "es:Libros");
$tablaanad = array("Título" => "es:Artículos");
$hw_modifyobject($conexion, $idobj, $tablasupr, $tablaanad); |
|
o
Ejemplo 4_ modificando el atributo Título $tablasupr = array("Título" => array("es" => "Libros"));
$tablaanad = array("Título" => array("es" => "Artículos", "ge"=>"Artikel"));
$hw_modifyobject($conexion, $idobj, $tablasupr, $tablaanad); |
|
Esto elimina el título español 'Libros' y añade el título español
'Artículos' y el título alemán 'Artikel'_
Ejemplo 5_ eliminando atributos $tablasupr = array("Título" => "");
$tablaanad = array("Tñitulo" => "es:Artículos");
$hw_modifyobject($conexion, $idobj, $tablasupr, $tablaanad); |
|
Nota:
Esto eliminará todos los atributos con el nombre 'Título' y añadirá
un nuevo atributo 'Título'_ Esto es útil cuando se desea eliminar
atributos de forma recursiva_
Nota:
Si necesita eliminar todos los atributos con un cierto nombre
tendrá que pasar una cadena vacía como el valor del atributo_
Nota:
Sólo los atributos 'Title', 'Description' y 'Keyword' (así, en inglés)
manejarán de forma apropiada el prefijo de idioma_ Si estos atributos
no llevaran prefijo de idioma, se les asignariá el prefijo 'xx'_
Nota:
El atributo 'Name' es bastante especial_ En algunos casos no puede ser
completamente eliminado_ Obtendrá un mensaje de error 'Change of base
attribute' ('Cambio de atributo base', no está muy claro cuando ocurre)_
Por tanto, tendrá siempre que añadir un nuevo atributo Name primero y
luego eliminar el anterior_
Devuelve TRUE si no hay error o FALSE en caso contrario_