Consulta sql en medio de función

Events happening in the community are now at Drupal community events on www.drupal.org.
tigreton's picture

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

josmera01's picture

Hola estoy entrando a link que tienes pero esta en 404, para haber si la entida esta bien guardando

Otra pregunta, esa tabla

josmera01's picture

Otra pregunta, esa tabla "artwork" esta creada con el esquema?

Gracias josmera. Si, está

tigreton's picture

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

luis_san's picture

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

josmera01's picture

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

tigreton's picture

Solo era un ejemplo de lo que es el código.

Sisi, el $artwork que le paso

tigreton's picture

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

luis_san's picture

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...

luis_san's picture

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

tunic's picture

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.

tigreton's picture

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:

<?php
function 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

luis_san's picture

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

tigreton's picture

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

luis_san's picture

Gracias por el puntito tigreton!

Estamos por aqui!

saludos desde Uruguay!

luis_san
www.kadabrait.com

Spain

Group organizers

Group categories

Región geográfica

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: