submit desde tipo de contenido

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

Buenos días, la frase típica: "soy nuevo en drupal", ese es mi caso. Estoy montando una web para una distribuidora de productos varios en drupal 7, Cree un nuevo tipo de contenido para los productos y todo bien, pero necesito crear la forma de que los clientes de la distribuidora soliciten información de los productos que estos requieran vía email. Es decir, si no lo fuera hacer en drupal, podría pensar en algo como esto:

un formulario en cada producto con un submit que me guarde el Id del producto y la session del del usuario en una tabla temporal y al final poder revisar el consolidado de productos seleccionados y enviarlos vía post a un email. El inconveniente es que esto en drupal no se cómo hacerlo. He pensado en crear un módulo, pero esto implicaría crear mi tabla de productos desde el módulo y prescindir de las de creacíon de campos en en el cms. O podría conservarlos y acceder desde mi módulo a un botón submit del tipo de contenido productos, pero no se como lo haría. De antemano, muchas gracias por sus aportes

Comments

El módulo webform te permite

rodrigoaguilera's picture

El módulo webform te permite crear formularios arbitrarios y mostrarlos como un bloque (el bloque sólo se mostrará en los productos). webform permite hacer muchas cosas con los resultados que envíen los usuarios. ¿me he explicado bien?

Claro algo asi puedes hacer

alarez's picture

Claro algo asi puedes hacer con el modulo webform.

Primero creas el formulario.
Puedes crear un campo que se llame ID Producto. En la configuración del mismo en la opción de Default value pones algo como %get[id-producto]

Luego crear un link desde el producto hacia el formulario:
Digamos que el URL del formulario es "ejemplo.com/infoproducto"
entonces el link seria

<a href="/infoproducto?id-producto=<?php $nid ?>" ?>Solicitar Info</a>

Yo hice algo asi en este sitio. http://www.ameuropeservices.com/es/propiedades/espectacular-apartamento-...

Si le das click al boton de abajo de "Contáctenos" vas a ver el funcionamiento.

Duda

lucsab20's picture

Estoy teniendo el siguiente problema: cuando coloco el enlace en el body del nodo no me imprime el $nid y en el formato de entrada tengo puesto "PHP Code". Tendrás idea de cual puede ser el problema?

Gracias de antemano.

Un poco más complicado que eso

hatuhay's picture

Drupal te permite desarrollo modular, por tanto puedes crear una función que le agregue funcionalidad a tu nodo (producto). No es necesario programar el tipo de contenido
Tampoco es necesario crear un formulario, sólo requieres una función que se active desde un botón, esa función debe capturar el id del nodo y escribir el array() en la sesión.
Escribir en la sesión es posible y fácil, pero vas a requerir usar AJAX, lo cual te lleva a otro nivel de desarrollo.
Para insertar el botón te recomiendo hacerlo directamente en el node.tpl.php, ya que te permite incluir el botón inclusive en listados. Otra opción es utilizar Display Suite. En ambos el nid está disponible fácilmente.
Para escribir en la sesión utiliza $_SESSION dale una leída a http://drupal.org/node/33513.
Para el AJAX te recomiendo utilizar ctools, específicamente ctools_ajax_text_button que lo puedes encontrar en http://drupalcontrib.org/api/drupal/contributions!ctools!includes!ajax.inc/function/ctools_ajax_text_button/7 y también en el código de ejemplo de módulo ctools.
Finalmente debes generar un botón enviar correo que debe llamar una función que lea la sesión y active la función drupal_mail http://api.drupal.org/api/drupal/includes!mail.inc/function/drupal_mail/7
Suerte

muchas gracias

acobos's picture

Muchas gracias por tomarte el tiempo de responder. Esta solución aunque un poco más compleja parece acercarse más a lo que necesito. Voy a intentar implementarla.

acobos's picture

Gracias, ambas soluciones sirven si yo requiero solicitar información de un producto en particular, pero mi necesidad real, es que el usuario pueda navegar e ir agregando los productos de los cuales requiere información, como si se tratara de un carrito de compras pero solo estoy agregando el Id del producto, y al final poder enviar el listado de los diferentes productos que seleccioné y que requiero información. Seguramente no me expliqué bien en la pregunta inicial. Muchas gracias

Puedes usar flag para marcar

rodrigoaguilera's picture

Puedes usar flag para marcar los productos, rules para enviar el mail, views para listar los productos marcados, views_rules para meter el el listado de productos marcados en el mail y rules link para montar el enlace en el que el usuario ha terminado de marcar productos y activa la rule que lo pone todo en marcha.

Es el camino que se me ocurre.

¿fácil verdad? pero es posible y todo a golpe de click

Tipo de contenido con un campo file para subir fichero

pcoliver's picture

Hola a todos:
Soy nuevo en Drupal 7 y estoy empezando a utilizar este magnifico CMS. Estoy creando un tipo de contenido que incluye un campo file para subir un fichero en el servidor y que se almacene en la tabla file_managed, pero tengo el problema de que se almacena el nodo pero no consigo que se suba el fichero al servidor.
He creado un hook_form con el formulario y luego me he creado un hook_form_alter con una llamada a una funcion que sube el fichero al servidor, pero por alguna razon no funciona.
No llega a recoger el valor del campo file del formulario y tampoco me entra en el form_alter.
Les dejo mi codigo para ver si alguien me puede echar una mano y decirme porque razón no funciona.
Gracias a todos no obstante por ayudar a principiantes como yo.


function mpd_core_v5_pdf_install() {
node_types_rebuild();
$types= node_type_get_types();
node_add_body_field($types['documento_pdf'],'Description');
}

/**
*Implemets hook_install().
*/
function mpd_core_v5_pdf_uninstall() {
$result = db_query("SELECT n.nid FROM {node} n WHERE n.type = :type", array(':type' => 'documento_pdf'));

$nids = array();

foreach ($result as $item) {
array_push($nids, $item->nid);
}

if (count($nids)) {
node_delete_multiple($nids);
}

drupal_uninstall_schema('documento_pdf');
}

/**
* Implements hook_form()
* @return array
*/

function mpd_core_v5_pdf_menu()
{
$items = array();
$items['mpd_core_v5_pdf'] = array(
'title' => t('MPD5 Core settings PDF. Formulario'),
'description' => t('Settings for the core module. Documents and pages configuration options are found here.'),
'page callback' => 'drupal_get_form',
'page arguments' => array('mpd_core_v5_pdf_form'),
'access arguments' => array('administer nodes'),
'type' => MENU_NORMAL_ITEM,
);

return $items;

}

/**
*
* @param type $node
* @param type $form_state
* @return string
*/

function mpd_core_v5_pdf_form($node, &$form_state) {

if (empty($_SESSION['mpd_core_v5_pdf_default_file'])) {
    $_SESSION['mpd_core_v5_pdf_default_file'] = 'public://drupal.txt';
}
    $default_file = $_SESSION['mpd_core_v5_pdf_default_file'];
if (empty($_SESSION['mpd_core_v5_pdf_default_directory'])) {
    $_SESSION['mpd_core_v5_pdf_default_directory'] = 'public://directory1';
}
$default_directory = $_SESSION['mpd_core_v5_pdf_default_directory'];
//$default_directory = 'public://';

$form = array ();   
$type = node_type_get_type($node);

if ($type->has_title){

$form['title'] = array(
    '#type' => 'textfield',
    '#title' => check_plain($type->title_label),
    '#description' => t('Introducir el nombre del documento'),
    '#weight' => -5,
    '#maxlenght' => 255,
    '#required' => TRUE, 
    //'#default_value' => !empty($node->document_title) ? $node->document_title : '', 
'#default_value' => !empty($node->title) ? $node->title : '',

);
}

if ($type->has_body){
    $form['body_field'] = node_body_field($node, $type->body_label, $type->min_word_count);
}

$active =  array(1 => t('Format PDF'), 2 => t('Format HTML - zip'));
//Radiobutton con los posibles tipos de documento PDF o HTML

// $form['tipo_documento'] = array(
// '#type' => 'radios',
// //'#options' => drupal_map_assoc(array(t('Format PDF '), t('Format HTML - zip'))),
// //'#options' => array(1 => t('Format PDF '), 2 => t('Format HTML - zip')),
// '#options' => $active,
// '#title' => t('Selecciona el tipo de documento'),
// '#description' => t('Seleccionar el formato del documento PDF o HTML'),
// //'#default_value' => isset($node->document_type) ? $node->document_type: '',
// '#default_value' => !empty($node->tipo_documento) ? $node->tipo_documento: 0,
// //'#default_value' => variable_get('tipo_documento'), // Default to Never
// );

$form['permitir_descarga'] = array(
    '#type' => 'checkbox',
    '#title' => t('allow PDF download'),
    '#description' => t('if checked, users can download this entire document as a PDF.'),
    '#default_value' => $node->permitir_descarga,
);

//Fieldset con la fecha de alta
//$form['created_date'] = array(
$fecha_publicacion_doc = $node->fecha_publicacion ? getdate($node->fecha_publicacion): getdate();
$form['fecha_publicacion'] = array(
    '#type' => 'date',
    '#title' => t('Fecha Creacion Tipo Documento'),

    '#description' => t('Formato dd-mm-aaaa'),
    //'#default_value' => isset($node->created_date) ? $node->created_date: '', 
'#default_value' => array (
    'day' =>  $fecha_publicacion_doc['mday'],
    'month' =>$fecha_publicacion_doc['mon'],
    'year' => $fecha_publicacion_doc['year'],
),
);

// Creamos un grupo llamado information que va a contener la informacion del Documento
$form['information'] = array(
    '#type' => 'fieldset',
    '#title' => t('Informacion Documento MPD'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#weight' => 99,
    '#group' => 'Informacion Adicional',
);

$form['information']['informacion_adicional'] = array(
    '#type' => 'textarea',
    '#title' => t('Aditional Information'),
'#required' => FALSE,
    '#description' => t('Rellenar informacion adicional del contenido'),
    '#maxlenght' => 255,        
    //'#default_value' => !empty($node->document_title) ? $node->document_title : '', 
'#default_value' => !empty($node->informacion_adicional) ? $node->informacion_adicional : '',

'#weight' => 1,
);


$form['formatos']['PDF'] = array(
    '#type' => 'file',
    '#title' => t('PDF File'),
    '#default_value' => $default_file,

);
  drupal_set_message("Nombre formulario:",$form_id);  // print form ID to messages
//drupal_set_message(print_r($form, TRUE));  // print array to messages
print_r($form_id);
return $form;

}

/**
* Formulario de Validacion
* @param type $node
* @param type $form
* @param type $form_state
*/

function mpd_core_v5_pdf_validate($node){

// $patern = '/^\d*(.*)?$/';
//
//if($form_state['values']['document_type'] == ''){
// if($form_state['values']['tipo_documento'] == ''){
//We notify the form API that this field has failed.
//form_set_error('document_type', t('You must specifiy a valid document type'));
// form_set_error('tipo_documento', t('You must specifiy a valid document type'));
// } else drupal_set_message(t('validacion tipo documento OK'));

// Mensajes de control
 $Message = 'Validacion de el Formulario realizada';
 drupal_set_message(t($Message));

}

/**
* Hook Insert
* @param type $node
*/

function mpd_core_v5_pdf_insert($node)
{
$path = $node->nid . '/' . $node->nid . '.pdf';
//Drupal 7 --> INSERT
db_insert('documento_pdf')
-> fields(array(
'nid' => $node->nid,
'publicacion' => mktime(0, 0, 0, $node->publicacion['month'], $node->publicacion['day'], $node->publicacion['year']),
'permitir_descarga' => $node->permitir_descarga,
'nombre_original' => $node->nid .'.pdf',
'suma_md5_original' => '',
'pid_portada' => 1,
'fid_file'=>1

        ))
    ->execute();

}

function mpd_core_v5_pdf_form_alter(&$form, &$form_state, $form_id){

drupal_set_message($form_id);  // print form ID to messages
drupal_set_message(print_r($form, TRUE));  // print array to messages
$Message = 'Entra en form_alter';
drupal_set_message(t($Message));

$form['#validate'][]='subir_pdf_validar';

$form['#submit'][]='subir_pdf_submit';

}

function subir_pdf_validar($form, &$form_state)
{
echo 'Test-validate';

}

function subir_pdf_submit($form, &$form_state)
{

// Mensajes de control
$Message = 'Entra en subir_pdf_submit';
drupal_set_message(t($Message));

// Al insertar el nodo subimos el fichero y creamos el nodo
// crear_directorio($node->nid);

$path = $node->nid . '/' . $node->nid . '.pdf';

$data=$form_state['values']['PDF'];

$form_state['formatos']['PDF']:NULL;
$uri=!empty($form_state['values']['PDF']) ? $form_state['values']['PDF']:NULL;

//drupal_set_message(t('Entra en Submit de Añadir fichero file %data y URL %uri', array('%data' => $data, '%uri' => $uri))); 
//$file_object = file_save_data($data, $uri, FILE_EXISTS_RENAME);

// Deja el archivo como temporal
$file_object = file_save_upload('PDF', array(), 'public://', FILE_EXISTS_RENAME);

if (!empty($file_object)) {
    $url = file_create_url($file_object->uri);
    $_SESSION['mpd_core_v5_pdf_default_file'] = $file_object->uri;
    drupal_set_message(t('Saved managed file: %file to destination %destination (accessible via !url, actual uri=<span id="uri">@uri</span>)', array('%file' => print_r($file_object, TRUE), '%destination' => $uri, '@uri' => $file_object->uri, '!url' => l(t('this URL'), $url))));
}
else {
    drupal_set_message(t('Failed to save the managed file'), 'error');
}

// Pasa el archivo como definitivo a la ubicacion final
// Preparar el directorio
$directory = 'sites/default/files'; // Comprobar si el directorio existe

if (file_prepare_directory(&$directory, $options = FILE_MODIFY_PERMISSIONS)) { 
   echo "The directory '$directory' exists and is writeable";
} else { 
   echo "The file does not exist or it is not writeable";
} 
$directory =  file_default_scheme() .'://';
// Prepara el directorio
file_prepare_directory($directory, FILE_CREATE_DIRECTORY);

$destination = file_stream_wrapper_uri_normalize($directory  
                  . "/$file->filename");


$file = file_save_upload('PDF', $validators); 


// Ahora creamos el directorio con el nombre prueba
$url_path="public://";
$dirname="prueba";
//$directory = $form_state['values']['directory_name'];
//$directory = "public://prueba";
$directory=$url_path.$dirname;
   if (!file_prepare_directory($directory, FILE_MODIFY_PERMISSIONS | FILE_CREATE_DIRECTORY)) {
   drupal_set_message(t('Failed to create %directory.', array('%directory' => $directory)), 'error');
}
else {
    $result = is_dir($directory);
    drupal_set_message(t('Directory %directory is ready for use.', array('%directory' => $directory)));
    $_SESSION['mpd_core_v5_pdf_default_directory'] = $directory;
}
// Comprobar que el fichero existe y si existe habra que reemplazarlo por el otro.

// If the file passed validation:
$newdir=$directory;
if ($file) {
   drupal_set_message(t('Entra a Crear el Archivo Temporal File1')); 
   // Move the file, into the Drupal file system
   //if ($file = file_move($file, 'public://')) {
   if ($file = file_move($file, $newdir)) {
        $file->status = FILE_STATUS_PERMANENT;
        // $file->file_display = 1;
        $file = file_save($file);
    drupal_set_message(t('Entra a Crear el Archivo Temporal Estatus cambiado'));  

    } else {
        $output = t('Failed to write the uploaded file the site\'s file folder.');
    }       
 } else {
    $output = t('No file was uploaded.');
 }

// Movemos el fichero almacenado en el directorio

}

/**
* Hook Update
* @param type $node
*/

function mpd_core_v5_pdf_update($node)
{
db_update('documento_pdf')
->fields(array(
'publicacion' => mktime(0, 0, 0, $node->publicacion['month'], $node->publicacion['day'], $node->publicacion['year']) ,
))
->condition('nid',$node->nid ,"=")
->execute();
}

/**
* Hook node load
* @param type $node
* @return type
*/
function mpd_core_v5_pdf_load($nodes)
{
$result = db_query('SELECT cid, nid, fecha_publicacion, tipo_documento, informacion_adicional FROM {mpd_contenido} WHERE nid IN (:nids)', array(':nids' => array_keys($nodes)));
foreach ($result as $record) {
$nodes[$record->nid]->cid = $record->cid;
$nodes[$record->nid]->nid = $record->nid;
$nodes[$record->nid]->fecha_publicacion = $record->fecha_publicacion;
$nodes[$record->nid]->tipo_documento = $record->tipo_documento;
$nodes[$record->nid]->informacion_adicional = $record->informacion_adicional;

}

}

function mpd_core_v5_pdf_delete($node)
{

//Drupal 7 --> DELETE
$borrar_registro= db_delete('documento_pdf')
  -> condition('nid', $node->nid, '=')
  ->execute(); 

}

function mpd_core_v5_pdf_init(){
global $navegador;
$navegador = get_browser(NULL, true);
}

Spanish

Group organizers

Group notifications

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