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
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
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
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
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
Diseño Web
muchas gracias
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.
agregar productos a lo largo de la session de navegación
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
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
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,
);
}
/**
*
* @param type $node
* @param type $form_state
* @return string
*/
function mpd_core_v5_pdf_form($node, &$form_state) {
// $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
// );
}
/**
* 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'));
}
/**
* 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
}
function mpd_core_v5_pdf_form_alter(&$form, &$form_state, $form_id){
}
function subir_pdf_validar($form, &$form_state)
{
echo 'Test-validate';
}
function subir_pdf_submit($form, &$form_state)
{
// Al insertar el nodo subimos el fichero y creamos el nodo
// crear_directorio($node->nid);
$form_state['formatos']['PDF']:NULL;
$uri=!empty($form_state['values']['PDF']) ? $form_state['values']['PDF']:NULL;
// 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)
{
}
function mpd_core_v5_pdf_init(){
global $navegador;
$navegador = get_browser(NULL, true);
}