Posted by tigreton on November 30, 2011 at 4:15pm
En la parte que habla de entidades y demás en el libro "Drupal 7 module development" ¿puedo hacer esto en la función guardar?:
La resumo para mostrarlo mejor:
<?php
public function save($artwork) {
if ($artwork->is_new) {
//¿Podría yo aquí poner una consulta a la base de datos de drupal?
//Más en concreto, ¿consultar por los posts de ese usuario, y si tiene un total de 5 o menos, dejarle guardarlo, por ejemplo?
// Save the new artwork.
drupal_write_record('artwork', $artwork);
}
}
?>El resto del código lo teneis aqui:
https://github.com/LearningDrupal7Development/artwork/blob/master/artwor...
Gracias. Jorge.
Comments
Hola estoy entrando a link
Hola estoy entrando a link que tienes pero esta en 404, para haber si la entida esta bien guardando
Otra pregunta, esa tabla
Otra pregunta, esa tabla "artwork" esta creada con el esquema?
Gracias josmera. Si, está
Gracias josmera. Si, está guardado con el schema.
Puedes probar con esta web:
https://github.com/LearningDrupal7Development/artwork
E ir al archivo artwork.controller.inc
El codigo está bien, porque es del libro y ha sido revisado y actualizado. Lo que he hecho ha sido simplificarlo quitando la parte de revisiones, actualización, controles varios etc.
Funcionar funciona el codigo, lo que no se es si funcionaría la comprobación que he mostrado. O cómo/dónde se debería de comprobar.
Consultar la DB de Drupal
Oye... puedes utilizar la capa de abrstracción de base de datos de Drupal:
http://api.drupal.org/api/drupal/includes--database.inc/group/database/6
Basicamente puedes cargar un nodo con la funcion
$node = node_load(nid)
...modificas el objeto...
node_save($node)
o bien hacer cualquier tipo de operación en la DB de drpal simplemente con db_query("SELECT * from TABLE");
espero que te sirva!
saludos!
luis-san
www.kadabrait.com
Ola como vas, veo modulo
Ola como vas, veo modulo estas haciendo todo el contralador con tu modulo para que guarde, vista, edite y borre, pero te puedo recomendar un modulo para tener todas esa acciones que incluso lo maneja Profield 2.
http://drupal.org/project/entity
Espero que te sirva.
Solo era un ejemplo de lo que
Solo era un ejemplo de lo que es el código.
Sisi, el $artwork que le paso
Sisi luis_san, el $artwork que le paso es una entidad, pero que la uso como si un node se tratara.
Entonces, ¿Tú has hecho alguna vez algún query/comprobación/modificación de un nodo/entidad antes de guardarla?
Gracias.
Cargar/Modificar un nodo y luego gardarlo
Si tigreton, bastante seguido.
En el caso que validen no es necesario guardarlo, en el caso que quieras modificar, si lo es.
Te copio un ejemplo aproximado de como debería ser:
<?php
$node_id = 12;
$node = node_load($node_id);
//Si quieres ver el contenido de este nodo una forma sería:
//Esto te ayudará a saber que son arrays y que son objetos
echo "<pre>";
print_r($node);
echo "</pre>";
//Si quieres cambiarle algo, por ejemplo el nid:
$node->nid = 13;
//Lo guardo
$op_result = node_save($node);
?>
Espero te sirva, sino a las ordenes.
saludos,
luis-san
www.kadabrait.com
y si...
y si quieres que al precionar en botón Guardar en un nodo haga esto, puedes hacerlo mediante un hook o con un trigger con el módulo Rules, que te permite ejecutar eventos por ejemplo previamente a guardar un nodo, ese mismo triger te proveerá el nodo, ahi no deberás darle save ni node load. ;-)
Si quieres limitar el número
Si quieres limitar el número de nodos (o entidades) de un usuario casi mejor hacerlo controlando el formulario de creación. Si tiene 5 no lo muestras (le rediriges a la página que explique por qué no puede crear más o disparas un acceso denegado). Más que nada por que es un poco puñeta completar el formulario y que luego te diga que no vale.
Adicionalmente puedes incluir algún control en alguno de los hooks que saltan antes de grabar un nodo o entidad nueva, pero no lo pondría en el save, si no en presave (aunque reconozco que no he usado mucho los nuevos hooks de Drupal 7).
Me gusta bastante tu idea.
Me gusta bastante tu idea. Así no tiene que repetir el usuario todo. Que también le podría poner que le volviera al formulario, con los datos que había metido, pero eso lo dejamos para otro día :).
El problema es que la comprobación no la podría hacer antes (*) ya que no es si ha escrito 5 nodos, es si ha elegido la casilla de "promocionar". Entonces es cuando busco si tiene 1 ya promocionado, después del envio claro.
*A no ser que haga dos entidades, una "promocionada" y otra "normal". Y cuando entren al formulario de promocionada, si ya hay otra, que no deje. O que vaya al formulario de sin promocionar o algo así, ¿no?
Sobre lo de antes de grabar en el nodo está el codigo, que entre otras cosas llama al save:
<?phpfunction artwork_form_submit($form, &$form_state) {
artwork_save($artwork);
// Notify the user.
drupal_set_message(t('Artwork saved.'));
}
?>
¿Es ahí donde haríais la comprobación?
y muchas gracias a todos por ayudarme!!
Si puedes
Si puedes comprobarlo antes de guardarlo, tu en la comprobación tienes en $nodo que estás a punto de guardar y sabes si lo ha promocionado o no, tambien tienes el usuario logeado haciendo global $user, entonces puedes buscar si hay mas nodos de ese tipo de contenido creados por ese usuario mediante un db_query("SELECT bla bla");
No se si valorais lo de los
No se si valorais lo de los puntos, pero bah, te doy uno jaja.
Es lo que yo suponía que se debería de hacer. Y en el caso de que no pueda por la limitación, debería usar la variable: $form_state['redirect'] = 'artwork/' . $artwork->aid; y cambiarla para que redireccione a una página de error, ¿no?
Muchas gracias. Después de estos retoques espero volver a tardar mucho en preguntar, que no en no pasarme por el grupo ;)
Eres grande luis_san!!
Gracias por el puntito
Gracias por el puntito tigreton!
Estamos por aqui!
saludos desde Uruguay!
luis_san
www.kadabrait.com