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

Consejo para crear un modulo como el que piensas de facebook.

Estas en el tema de Consejo para crear un modulo como el que piensas de facebook. en el foro de Drupal en Foros del Web. Muy buenas tardes Drupaleros. Para aprendizaje me he propuesto hacer un modulo que se usa en facebook ¿Que piensas? Yo lo estoy haciendo en drupal6. ...
  #1 (permalink)  
Antiguo 20/12/2012, 15:51
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Mensajes: 269
Antigüedad: 15 años, 7 meses
Puntos: 22
Consejo para crear un modulo como el que piensas de facebook.

Muy buenas tardes Drupaleros.

Para aprendizaje me he propuesto hacer un modulo que se usa en facebook

¿Que piensas?

Yo lo estoy haciendo en drupal6.

Cual es la idea que tu pongas algo en un textarea, y cuando le des a publicar entonces te aparesca abajo ese texto y si alguien quiere agregar un comentario que se lo agregue. Ahora bien, se muy bien que esto se puede hacer con cck y views perfectamente. Bueno comenze de la siguiente manera


cree mi carpeta llamada quepiensas
dentro,

mi archivo
quepiensas.info

Código PHP:
Ver original
  1. name = Quepiensas
  2. description = Permite poner lo que piensas.
  3. package = other
  4. version = VERSION
  5. core = 6.x


esta aqui todo bien.

mi archivo.

quepiensas.install




Código PHP:
<?php

/**
 * Implementation of hook_install().
 */
function quepiensas_install() {

  
// Add the node type.
  
_quepiensas_install_type_create();
}

function 
_quepiensas_install_type_create() {
  
// Create an additional node type
  
$quepiensas_node_type = array(
    
'type' => 'quepiensas',
    
'name' => t('Quepiensas page'),
    
'module' => 'node',
    
'description' => t('Permite agregar lo que piensas.'),
    
'custom' => TRUE,
    
'modified' => TRUE,
    
'locked' => FALSE,
  );

  
$quepiensas_node_type = (object)_node_type_set_defaults($quepiensas_node_type);
  
node_type_save($quepiensas_node_type);
  
// Default to not promoted.
  
variable_set('node_options_quepiensas', array('status'));
  
// Use this default type for adding content to quepiensass.
  
variable_set('quepiensas_allowed_types', array('quepiensas'));
  
variable_set('quepiensas_child_type''quepiensas');
}
Mi idea es crear un tipo de contenido llamado que piensas y lo cree en mi .install de mi modulo.

Hasta aqui todo bien.


Ahora vamos con mi .module

Código PHP:
<?php

/**
 * @file
 * Allows users to structure the pages of a site in a hierarchy or outline.
 */

/**
 * Implementation of hook_menu().
 */

function quepiensas_menu() {
  
$items['admin/content/quepiensas'] = array(
    
'title' => 'Quepiensass',
    
'description' => "Manage your site's quepiensas outlines."
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('quepiensas_admin_overview'), 
    
'access arguments' => array('administer quepiensas outlines'),
    
'file' => 'quepiensas.admin.inc',
  );

return 
$items;
}

luego mi archivo quepiensas.admin.inc

Código PHP:
<?php

/**
 * @file
 * Admin page callbacks for the book module.
 */

/**
 * Returns an administrative overview of all books.
 */
function quepiensas_admin_overview() {

  
//Formulario que piensas
  
$form['quepiensas'] = array(
    
'#type' => 'textarea',
    
'#title' => t('¿Que piensas?'),
    
'#default_value' =>  variable_get('quepiensas'''),
    
'#cols' => 60,
    
'#rows' => 5,
  );  
$form['submit'] = array('#type' => 'submit''#value' => t('Publicar'));
    return 
$form;

}
Ok solo he llegado hasta aqui, y aqui estoy perdido.


Miren

Si yo tengo creado una tabla dentro de mi drupal llamado inscripcions con 3 campos, id auto increment y dos campos, nom, dni ambos varchar


y pongo en un bloque este codigo

Código PHP:
<?php
// Creación de nuestro formulario
function inscripcion()
{
    
//Nombre
  
$form['nom'] = array(
    
'#type' => 'textfield',
    
'#title' => t('Nombre completo'),
    
'#size' => 40,
    
'#maxlength' => 40,
    
'#description' => t('Ingrese su nombre completo'),
    
'#required' => TRUE,
  );
    
//DNI
  
$form['dni'] = array(
    
'#type' => 'textfield',
    
'#title' => t('DNI'),
    
'#size' => 40,
    
'#maxlength' => 9,
    
'#description' => t('xx'),
    
'#required' => TRUE,
  );
    
    
$form['submit'] = array('#type' => 'submit''#value' => t('Enviar'));
    return 
$form;
}

// Llamamos al render del formulario
function test_page() {
  return 
drupal_get_form('inscripcion');
}
$out=test_page();
echo 
$out;

function 
inscripcion_submit($form_id, &$form_state)
{
db_query("INSERT INTO inscripcions VALUES ('','%s', '%s')"$form_state['values']['nom'], $form_state['values']['dni']);

drupal_set_message(t('Tu opinion ha sido enviada satisfactoriamente. ¡ Muchas Gracias !'));
}
?>

//para recoger los datos.

<?php
  $result 
db_query("SELECT * FROM inscripcions"); 
  
  while (
$row=db_fetch_object($result))
  {

echo  
$row->Id " ".  $row->nom " ".  $row->dni '<br/>';
  }
?>
este me lo guarda en la tabla antes mencionada, pero yo se que hay una funcion que le pueda poner a mi modulo que al darle al boton publicar me lo guarde en la tabla node, como cualquier tipo de contenido, para luego con mi modulo hacer que cree una vista automaticamente.

Espero que me puedan ayudar y gracias anticipadas.
  #2 (permalink)  
Antiguo 20/12/2012, 17:34
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Consejo para crear un modulo como el que piensas de facebook.

Tenes que tener en cuenta estas cosas:

En tu tipo de contenido "quepiensas" no tenes los campos CCK agregados para "nom" y "dni", por lo que no podrías guardar en la tabla "node" asi nomas. Debeberias modificar el hook_install para agregar esos campos CCK al tipo de contenido.

Luego para crear y guardar un nodo automaticamente debes poner este codigo en la funcion inscripcion_submit()

Código PHP:
Ver original
  1. $node = new stdClass();
  2.  
  3. $node->title = "Titulo del nodo";
  4. $node->body = "Body del nodo";
  5. $node->type = 'quepiensas';
  6. $node->created = time();
  7. $node->changed = $node->created;
  8. $node->status = 1;          // Publicado
  9. $node->promote = 0;       // Promovido
  10. $node->sticky = 0;          // Sticky (Pegajoso)
  11. $node->format = 1;         // Filtered HTML
  12. $node->uid = 1;             //  Autor (admin en este caso)
  13. $node->language = 'en'; // Ingles como lenguaje del nodo
  14.  
  15. //Si tenes un tipo de contenido llamad "nom" debes poner esto
  16. $node->field_nom[0]['value'] = $nom; // $nom vendria a ser lo que pones en el formulario
  17.  
  18. node_submit($node);
  19. node_save($node);

No copies y pegues directamente lo que puse porque no te va a funcionar! Debes cambiar los valores por los que te devuelva el $form_state.

De todos modos queres hacer un modulo de aprendizaje pero intercalando campos CCK y vistas, cosa que quizas sea avanzado para empezar.
La vista la podes hacer como cualquier otra, y mientras crees un nodo de tipo quepiensas, en la vista va a salir. Lo mismo con los CCK, es mejor que pongas el contenido de lo que piensa un usuario en el body, y evitar pelearte con los CCK. De hecho en una primera iteracion podes hacer que funcione como te digo, y luego meter campos CCK (por ejemplo el sitio donde esta escribiendo el pensamiento como un textarea).

Saludos.
  #3 (permalink)  
Antiguo 21/12/2012, 21:15
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Mensajes: 269
Antigüedad: 15 años, 7 meses
Puntos: 22
Respuesta: Consejo para crear un modulo como el que piensas de facebook.

Gracias mario, voy a probarlo ahora y te cuento.
  #4 (permalink)  
Antiguo 23/12/2012, 21:05
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Mensajes: 269
Antigüedad: 15 años, 7 meses
Puntos: 22
Respuesta: Consejo para crear un modulo como el que piensas de facebook.

Amigo Mario, hay algo que no me funciona bien....

Mira este es mi codigo completo
del archivo
quepiensas.admin.inc
Código PHP:
<?php 

/** 
 * @file 
 * Admin page callbacks for the book module. 
 */ 

/** 
 * Returns an administrative overview of all books. 
 */ 
function quepiensas_admin_overview() { 
            
          
//Formulario que piensas 
            
$form['quepiensas'] = array( 
            
'#type' => 'textarea'
            
'#title' => t('¿Que piensas?'), 
            
'#default_value' =>  variable_get('quepiensas'''), 
            
'#cols' => 60
            
'#rows' => 5, );   
            
//boton publicar         
    
            
$form['submit'] = array('#type' => 'submit''#value' => t('Publicar')); 
            return 
$form
    
}




function 
quepiensas_admin_overview_submit($form, &$form_state) {




$node = new stdClass();

global 
$user;
$node->uid $user->uid;// en esta parte es que esta el problema
$node->title "Que piensas?";
$node->body $form_state['values']['quepiensas'];
$node->type 'quepiensas';
$node->created time();
$node->changed $node->created;
$node->status 1;      
$node->promote 0;     
$node->sticky 0;      
$node->format 1;      
   
$node->language 'es'
$node->comment 2;
 
node_submit($node);
node_save($node);



//$name = $form_state['values']['quepiensas'];
$name $user->uid;
    
drupal_set_message(t('Gracias, %name',
        array(
'%name' => $name)));
        

    
    
//    drupal_set_message(t('Guardado correctamente!'));
        
}

el problema que tengo es que en la parte que dice
Código PHP:
global $user;
$node->uid $user->uid;// en esta parte es que esta el problema 
en la tabla node de mi base de datos, en uid, me guarda un 0 que es el usuario anonimo, y lo he probado de varias formas lo puesto asi

Código PHP:

$node
->uid 1;// en esta parte es que esta el problema 
para ver si me guarda el valor 1 que es el usuario Admin, pero aun asi, el valor que me guarda es el 0.

en los otros valores, si los cambio, se cambia en la tabla node, pero no se que esta pasando la verdad.

incluso muestro el uid del usuario en un drupal_set_message

Código PHP:
$name $user->uid;
    
drupal_set_message(t('Gracias, %name',
        array(
'%name' => $name))); 
para saber si lo estoy haciendo bien, pero no me funciona. Que estara pasando?
Bueno, Gracias anticipadas
  #5 (permalink)  
Antiguo 23/12/2012, 21:16
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Mensajes: 269
Antigüedad: 15 años, 7 meses
Puntos: 22
Respuesta: Consejo para crear un modulo como el que piensas de facebook.

Bueno,

Solucionado

comente esta linea de codigo
Código PHP:
//node_submit($node); 
y al estar esta parte de codigo
Código PHP:

global $user;
$node->uid $user->uid;// en esta parte es que esta el problema 
verifique y se guardo el valor 1 en la base de datos.
le puse tambien de esta manera
Código PHP:

global $user;
$node->uid 2
y tambien se guardo

pero que consecuencias podria traer que haya comentado esa linea?
  #6 (permalink)  
Antiguo 24/12/2012, 04:05
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Consejo para crear un modulo como el que piensas de facebook.

Y si pones primero el node_submit() y luego asignas el uid? Puede servir

Vi articulos donde mencionan lo que decis, aplican patchs para solucionarlo pero no lo veo necesario en tu caso. Si ves que aun asi no te funciona borra esa linea que tambien te servira tal como lo tenes hecho.

Saludos.
  #7 (permalink)  
Antiguo 24/12/2012, 11:28
(Desactivado)
 
Fecha de Ingreso: septiembre-2008
Mensajes: 269
Antigüedad: 15 años, 7 meses
Puntos: 22
Respuesta: Consejo para crear un modulo como el que piensas de facebook.

Muchas gracias Mario nuevamente.

Etiquetas: allowed, consejo, modulo, views
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




La zona horaria es GMT -6. Ahora son las 11:29.