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.