Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Drupal »

Me falta algo para crear modulo? revisar por favor

Estas en el tema de Me falta algo para crear modulo? revisar por favor en el foro de Drupal en Foros del Web. hola a todos. gracias al usuario MarioAraque he conseguido poder entender un poco el funcionamiento de drupal. estoy creando un modulo para poder conectarme a ...
  #1 (permalink)  
Antiguo 02/09/2012, 11:01
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 7 meses
Puntos: 17
Me falta algo para crear modulo? revisar por favor

hola a todos. gracias al usuario MarioAraque he conseguido poder entender un poco el funcionamiento de drupal.

estoy creando un modulo para poder conectarme a una base de datos externa a la de drupal.

el tema es que no se si me dejo algo a la hora de empezar a crear el modulo:

1 - Creo un archivo: mimodulo.info y otro mi modulo.module


He leido que .info debe de llevar esto:

Cita:
;$Id$ name = "Módulo Solucionex" description = "Funcionalidades específicas" core = 6.x php = 5.1
y el .module esto:

Cita:
// $Id: mimodulo.module,v 1.0 2012/09/02 11:35:44 bor Exp $
el contenido de module no lo tengo muy claro, ya que la informacion que he leido sale comentado y no se si yo debo de ponerlo comentado "//" o no....

2- Los meto en la ruta: sites/all/modules

3 - Desde la administración de drupal , me meto en modulos y checkeo la opcion de 'activado'.

--------------------------------------

Es correcto? Es que me da mal rollo ponerme a hacerlo y fastidiarlo ya que no tengo copia en local, y no puedo probarlo desde localhost. Intenté copiar todo lo de la ftp y la base de datos en mi localhost pero la base de datos me dice que pesa mucho y no he podido

Espero a ver si alguien me dice si es correcto o me falta o sobra algun paso.

Muchas gracias a todos, y perdonad mi ignoranci
  #2 (permalink)  
Antiguo 02/09/2012, 14:16
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Me falta algo para crear modulo? revisar por favor

No vas a fastidiar tu Drupal si creas un modulo vacio!

Este enlace te va a servir: http://drupal.org/node/206756

De todos modos lo que hago yo de normal es copiarme el .info y .module de otro modulo y luego vaciarlos y poner lo que yo quiera jaja. Te ahorras unos pasos porque ahi lo tenes puesto correctamente (sobre todo el .info).
Los pasos 2 y 3 son correctos. Si hace falta no pongas nada en el .module, o simplemente pone el hook_help() que no afecta a nada a tu sitio.

Saludos.
  #3 (permalink)  
Antiguo 02/09/2012, 15:28
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 7 meses
Puntos: 17
Respuesta: Me falta algo para crear modulo? revisar por favor

Hola Mario y compañia, gracias nuevamente. Llevo una semana y no consigo hacer funcionar lo de guardar en la bd. Ni siquiera consigo creaarme el modulo.

Tengo una carpeta que se llama mi modulo , con mimodulo.info :

Cita:

name = mimodulo
description = graba en la bd los datos del form
version = 6.x-0.1
core = 6.x

version = "6.x-1.0"
core = "6.x"
datestamp = "1380280313"



Y luego mimodulo.module:

Cita:
<?php



function example_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL){
if($node->type == "nombre del tipo de contenido"){ //Por ejemplo "story"
if($op == "insert"){
//Hacer las operaciones necesarias
//Tenemos toda la informacion del formulario en la variable $node
//Si hacemos un print_r($node) se vera lo que insertamos
//Apartir de ahi, extraer los valores e insertar en las tablas que queramos o hacer lo que sea
}
}
}
Con el código que pusistes en otro hilo.

Luego me voy a la configuracion de mi drupal.... en modulos... y no veo mi modulo por ningun sitio...

Lo tengo en la carpeta sites/all/modules/mimodulo/

Por que no me lo reconoce?
  #4 (permalink)  
Antiguo 02/09/2012, 15:31
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 7 meses
Puntos: 17
Respuesta: Me falta algo para crear modulo? revisar por favor

En la carpeta solo tengo esos dos archivos... hace falta alguno mas?
  #5 (permalink)  
Antiguo 02/09/2012, 15:37
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Me falta algo para crear modulo? revisar por favor

Si tu modulo se llama "mimodulo", entonces la funcion no se tiene que llamar example_nodeapi, si no que se tiene que llamar "mimodulo_nodeapi".

No hacen falta mas archivos, necesitas como minimo esos dos, luego podes crear más pero no viene al caso que lo sepas, si para lo que necesitas hacer te basta con lo que tenes hecho ahora.

Drupal implementa hooks, cada hook tiene su nombre: hook_help, hook_nodeapi, hook_cron, hook_init, etc. Un hook es como un "interceptor" de un evento que ocurra en Drupal, por ejemplo el hook_cron que mencione recien, se invoca cuando ejecutamos el cron de Drupal.

Los modulos hacen uno de estos hooks en sus funciones, por lo que podes ejecutar codigo PHP en algun evento que intercepte Drupal. Joomla y Wordpress tienen funcionalidades parecidas.

Todo esto lo digo para que vos renombres esa funcion y entiendas que se llama "example_nodeapi" porque existe un hook_nodepi que es llamada por el modulo "example", pero como tu modulo se llama "mimodulo", entonces la funcion debe llamarse "mimodulo_nodepi".

Mete algo dentro del condicional, un echo o un print_r($node), si no nunca vas a saber si entras a esa parte del codigo. Y recorda que solo se va a invocar cuando crees un nodo nuevo ($op == "insert", existen mas valores para esa variable).

Saludos.
  #6 (permalink)  
Antiguo 02/09/2012, 15:47
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 7 meses
Puntos: 17
Respuesta: Me falta algo para crear modulo? revisar por favor

Gracias Mario, me ha quedado bastante claro. Lo que no entiendo es que estoy haciendo mal, al administrar y ver los modulos veo todos los modulos que estan en la carpeta donde he metido el mio. Pero 'mimodulo' no esta por ningun lado... lo tengo que meter en una carpeta o dejarlo fuera? es que ya no se que hacer!!
  #7 (permalink)  
Antiguo 02/09/2012, 15:58
Avatar de TheScript  
Fecha de Ingreso: septiembre-2011
Ubicación: Spain
Mensajes: 164
Antigüedad: 13 años, 2 meses
Puntos: 30
Respuesta: Me falta algo para crear modulo? revisar por favor

Dios mio a mi tampoco me reconoce el modulo.

Está claro que esto no es lo nuestro Follow.

Yo tengo lo mismo que tu en el .module y luego en settings esto:

Cita:
$db_url = array(
'default'=>'mysqli://miuser:micontraseña@miip/basededatos',
//the game table
'extern' =>'mysqli://miuser:micontraseña@miip/basededatos',
);
Luego este codigo en .module :

Cita:

function elmodulo_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL){
if($node->type == "inscripcion"){
if($op == "insert"){
//Hacer las operaciones necesarias
//Tenemos toda la informacion del formulario en la variable $node
$print_r($node);
//Si hacemos un print_r($node) se vera lo que insertamos
//Apartir de ahi, extraer los valores e insertar en las tablas que queramos o hacer lo que sea
}
}
}
function _extern_db_query(){
db_set_active(variable_get('extern_database', 'extern'));
$args = func_get_args();
$result = call_user_func_array('db_query', $args);
db_set_active();
return $result;
}
Pero como no me reconoce el modulo no puedo probar nada
  #8 (permalink)  
Antiguo 02/09/2012, 16:06
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Me falta algo para crear modulo? revisar por favor

Sinceramente no se la disposición de ficheros que hayan puesto, pero si lo ven muy dificil, pq no entran a otro modulo y copian su contenido?

Yo no me se los valores que hay que poner en el .info, pero copio los de otro modulo y listo, reemplazo valores y ya lo tengo funcionando!

Si un modulo se llama "mimodulo", tiene que haber una carpeta llamada "mimodulo" que contenga los ficheros (como minimo) mimodulo.info y mimodulo.module .
Dentro de mimodulo.info pongan algo como esto

Código:
name = Mi modulo
description = Moduilo de ejemplo.
core = 6.x

; Information added by drupal.org packaging script on 2012-09-02
version = "6.1"
core = "6.x"
project = "mimodulo"
datestamp = "1300752347"
En el .module pongan esto

Código:
function mimodulo_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL){
if($node->type == "nombre del tipo de contenido"){ //Por ejemplo "story"
if($op == "insert"){
//Hacer las operaciones necesarias
//Tenemos toda la informacion del formulario en la variable $node
//Si hacemos un print_r($node) se vera lo que insertamos
//Apartir de ahi, extraer los valores e insertar en las tablas que queramos o hacer lo que sea
die("el codigo se metio aca y se murio);
}
}
}
No es tan dificil como parece, no es por ser pesimista pero tienen un monton de modulos en el core los cuales pueden copiar y reemplazar las funciones y el contenido del .info como para que esten una semana intentando crearlos. No se, algo falla...

Saludos.
  #9 (permalink)  
Antiguo 03/09/2012, 02:48
Avatar de TheScript  
Fecha de Ingreso: septiembre-2011
Ubicación: Spain
Mensajes: 164
Antigüedad: 13 años, 2 meses
Puntos: 30
Respuesta: Me falta algo para crear modulo? revisar por favor

Hola a todos, ya he conseguido movilizar un poco el tema. Pongo lo que llevo hasta ahora hecho. Ya que en todas las páginas que he buscado información no he encontrado ejemplos concretos. Alomejor le puede valer a alguien con tantas dudas como yo! jejeje Y así también si tengo errores se quede aqui reflejado.

Primer paso: Creo mi modulo, y lo activo en drupal: solicitud.info y solicitud.module en carpeta 'solicitud'

Código PHP:
<?php
/**
 * Implements hook_nodeapi()
 */
function solicitud_nodeapi(&$node$op$a3$a4) {

    if (
$node->type == 'solicitud') {
     
    if (
$op == 'insert') {
    
$mail $node->field_email[0]['email'];
      
     
$key $node->nid.'_'.$mail.'_'.time();
     
$body "Se registró la solicitud del curso de forma satisfactoria. Se le notificará luego si fue aceptado. Gracias por preferirnos.";
     
$headers['From'] = $headers['Sender'] = $headers['Return-Path'] = $headers['Errors-To'] = $mail;
     
$message = array(
         
'id'=> 'cf_custom_mail',
         
'to' => $mail,
         
'subject' =>t('Notificación de solicitud'),
         
'body' => $body,
         
'headers'=> $headers);
     
drupal_mail_send($message);
      
drupal_set_message('Se registró la solicidud satisfactoriamente.'); 
    
    
    
    }
   }
}
Esto me guarda los datos rellenados en el form, y entonces me muestra un mensaje de 'ok' y me envia un email.

Ahora modifico el archivo setting.php para poder conectarme a una BD que no sea la de drupal:

Código PHP:
$db_url['default'] = 'mysql://user:passw@localhost/drupal _bd';

$db_url['db2'] = 'mysql://otheruser:passw2@localhost/other _bd' 

AHORA MODIFICO EL MODULO PARA CONECTAR A LA BD EXTERNA Y HACER UN INSERT DE LOS DATOS QUE SE ACABAN DE CREAR E INSERTAR EN LA BD DE DRUPAL.

solicitud.module:

Código PHP:
<?php
/**
 * Implements hook_nodeapi()
 */
function solicitud_nodeapi(&$node$op$a3$a4) {

    if (
$node->type == 'solicitud') {
     
    if (
$op == 'insert') {
    
$mail $node->field_email[0]['email'];
      
     
$key $node->nid.'_'.$mail.'_'.time();
     
$body "Se registró la solicitud del curso de forma satisfactoria. Se le notificará luego si fue aceptado. Gracias por preferirnos.";
     
$headers['From'] = $headers['Sender'] = $headers['Return-Path'] = $headers['Errors-To'] = $mail;
     
$message = array(
         
'id'=> 'cf_custom_mail',
         
'to' => $mail,
         
'subject' =>t('Notificación de solicitud'),
         
'body' => $body,
         
'headers'=> $headers);
     
drupal_mail_send($message);
      
drupal_set_message('Se registró la solicidud satisfactoriamente.');     

//base de datos externa y guardar datos de la nueva solicitud

// Conectarse a otra BD
db_set_active('db2');
// Enviar la consulta
$result=db_query('insert into solicitud VALUES('')');



// ¡OJO ! Volver a conectarse a la BD por defecto de Drupal

db_set_active('default');



    }
   }
}
Lo que me falta para poder probarlo es recorrer el formulario que han rellenado y guardado en la bd de drupal, y meterlo en los values del insert de mi tabla, que aún no tengo ni idea ahora mismo.
  #10 (permalink)  
Antiguo 03/09/2012, 03:02
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Me falta algo para crear modulo? revisar por favor

Bueno si te podes conectar a la otra base de datos entonces lo tenés casi terminado!
Los valores del formulario los tenes en la variable $node , lo que yo haria es agregar algo asi:

Código:
<?php
/**
 * Implements hook_nodeapi()
 */
function solicitud_nodeapi(&$node, $op, $a3, $a4) {

    if ($node->type == 'solicitud') {
     
    if ($op == 'insert') {
      echo "<pre>"; print_r($node); die();
}
}
Ahi vas a poder ver como esta dispuesta la variable $node y vas a poder ver los valores que tiene, los extraes y los metes en tu base de datos usando la funcion de la api db_query() (que es igual a mysql_query)

Saludos.
  #11 (permalink)  
Antiguo 03/09/2012, 04:11
Avatar de TheScript  
Fecha de Ingreso: septiembre-2011
Ubicación: Spain
Mensajes: 164
Antigüedad: 13 años, 2 meses
Puntos: 30
Respuesta: Me falta algo para crear modulo? revisar por favor

Eres un crack Mario, me imprime en pantalla todos los valores que he metido.

Lo que no se si puedo y como recorrer el array y meterlo en la bd o tengo que ir de uno en uno, si es de uno en uno tengo un problema. Ya que solo logro mostrar el email, no se porqué si quiero mostrar el apellido por ejemplo no me lo muestra.
Funciona:
Cita:
echo "<pre>"; echo $node->field_email[0]['email']; die();
No funciona, ni con documento , ni nombre, ni apellido...:
Cita:
echo "<pre>"; echo $node->field_documento[0]['documento']; die();
Yo habia pensado poner:

$documento = $node->field_documento[0]['documento'];
etc..

y luego en el insert meter en los values ('$documento', ('$nombre'),('apellidos')...etc)
  #12 (permalink)  
Antiguo 03/09/2012, 05:27
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años
Puntos: 890
Respuesta: Me falta algo para crear modulo? revisar por favor

Deberia ser:

echo $node->field_documento[0]['value'];
echo $node->field_*[0]['value'];
etc-
__________________
Drupal Argentina
  #13 (permalink)  
Antiguo 03/09/2012, 10:53
 
Fecha de Ingreso: septiembre-2012
Mensajes: 14
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Me falta algo para crear modulo? revisar por favor

hola a todos.soy nuevo en forosdelweb pero stoy siguiendo ste tema xq necesito grabar mi form en una bd que no es de drupal. he seguido los pasos y todo bien pero cuando hago el paso que dice @nucklear no me sale nada en pantalla.

luego he probado a ponerlo igual que thescript:

echo "<pre>"; echo $node->field_documento[0]['documento']; die();

y me ha salido el dato. El problema es que pongo varios y solo me muestra el primero, luego le hago un print_r y me dice esto en algunos pero si me muestra los datos de todo el form::


Cita:
[field_cp] => Array
(
[0] => Array
(
[value] => 30000
[_error_element] => field_cp][0][value
)

)

[field_apartado_correos] => Array
(
[0] => Array
(
[value] =>
)

)

[field_movile] => Array
(
[0] => Array
(
[number] => 567567567
[country_codes] => es
[extension] =>
)

)
saben a que se debe el error que devuelve [_error_element] => field_cp][0][value, y por que si les hago a cada uno un echo no me sale?
  #14 (permalink)  
Antiguo 03/09/2012, 11:24
Avatar de TheScript  
Fecha de Ingreso: septiembre-2011
Ubicación: Spain
Mensajes: 164
Antigüedad: 13 años, 2 meses
Puntos: 30
Respuesta: Me falta algo para crear modulo? revisar por favor

Hola phpero, lo primero avisarte de que no deberías hacer caso de mis códigos en la sección de Drupal!!!! Porque estoy aprendiendo a marchas forzadas y no doy ni una!!!

Lo segundo, que como bien dijo NUCKLEAR, has de poner

Cita:
echo $node->field_documento[0]['value'];
Y por experiencia propia, si pones varios, a mi no me los mostraba, debes de poner al final de el último 'echo' un "die() ", por lo menos a mi me ha funcionado jejeje lo mismo estoy diciendo una tontería.

En cuanto a lo de _error_element no te puedo ayudar.

Estoy aún con lo de la conexión a la base de datos externa, si lo consigo te lo posteo por aqui vale? un saludo
  #15 (permalink)  
Antiguo 03/09/2012, 12:12
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años
Puntos: 890
Respuesta: Me falta algo para crear modulo? revisar por favor

Cuando se ejecuta el procesamiento de un form de drupal cualquiera, por defecto este termina y es redireccionado a algun lugar tal como esta la configuración del form. Por eso a algunos no les muestra nada, supongo que se imprime, pero a la vez es redireccionado a otro lugar.

El uso de la function die() o exit() es para interrumpir la ejecución del script y poder imprimir en pantalla los valores, que son meramente informativos, ya que el propósito es insertarlo en la bd, no imprimirlos en pantalla.
__________________
Drupal Argentina

Etiquetas: contenido, falta, favor, funcion, modulo, revisar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 12:47.