2011-02-18 12 views
6

Estoy creando un módulo para permitir a los usuarios actualizar campos individuales en este caso, su entidad de usuario.Cómo actualizar el valor de un solo campo invocando la validación adecuada

El código siguiente es un ejemplo del método I inicialmente estado utilizando para conseguir que funcione y probar otros elementos del módulo

global $user; 
$account = user_load($user->uid); 
$edit = (array) $account; 
$edit['field_lastname']['und'][0]['value'] = 'test'; 
user_save($account, $edit); 

Sin embargo, esto no pasa por ninguna validación campo definido en otra parte de Drupal. No quiero reproducir ninguna validación escrita en otro lugar, ¡no es la forma de Drupal!

Mi pregunta es: ¿Hay una función en Drupal 7 que se puede llamar para actualizar el valor de un solo campo. Imagino que tal función borraría las cachés apropiadas, invocaría la validación de campos, etc.

Soy consciente de que la solución será totalmente diferente a la de mi objeto de usuario actual. Simplemente no puedo encontrar la función apropiada en la API. Me pregunto si el hecho de que estoy buscando una función de guardar solo es el problema, y ​​que hay otros pasos necesarios que vienen antes.

Cualquier ayuda agradecida.

Respuesta

1

Echa un vistazo a la función drupal_form_submit. Te permite enviar formularios desde el código. En este caso, podría usarlo para editar el formulario del usuario, que luego activaría la validación adecuada.

+0

Gracias Matt. Estaba pensando en usar algo así. Sin embargo, idealmente, esperaba tener que guardar un solo valor para un solo campo. Corrígeme si me equivoco, pero para volver a utilizar las funciones de envío y validación de los formularios, ¿no tendría que pasar toda la información requerida al formulario? - De la misma manera, mi ejemplo requería activar el objeto de usuario original antes de alterarlo y guardarlo. Esperaba que pudiera haber una función de Drupal para guardar los datos del campo. Tal vez estoy esperando demasiado y es necesario para atado a un envío de formulario – joevallender

+1

Puede hacerlo de la forma que especifica su ejemplo de código y llamar a las funciones de validación usted mismo. De lo contrario, es la API de formulario la que llama a la validación, por lo que al omitir la API de formulario, se está pasando por alto la validación. –

+0

Gracias de nuevo Matt. Creo que estoy buscando una característica que no esté allí ;-) Continuaré leyendo (y volviendo a leer) la Field API y publicando nuevamente si encuentro exactamente lo que estaba buscando. Tienes razón, no parece que pueda tener ambas formas en este momento. Saludos nuevamente – joevallender

Cuestiones relacionadas