Posted by freddy2677 on March 29, 2012 at 6:32pm
hola amigos me gustaria saber si me ayuda con un tema , resulta que soy nuevo en drupal 7 pero ya he comensado a desarrollar dos mudulo , ya algo avanzados pero no he podido cierta funcionalidad.
vamos al grano
tengo un modulo de un formulario de busqueda donde envio dos parametros a una base de datos , pero al momneto de tratar de mostrar el resultado por pantalla no me genera nada en la misma pantalla en la parte inferiro del formulario , he probado muchas formas pero nada , me pueden indicar que debo hacer
Comments
Ponga aquí el código de la
Ponga aquí el código de la función que genera el formulario.
Juan Villegas
micoworker
Diseño y Desarrollo Web
No lo dejes tan abierto
tienes que dar un poco mas de pistas de los que estas haciendo.
codigo en el cual estoy trabajando
<?php
//$Id$
/**
* nombre de tu modulo
* descripciones aunq no es necesario
* @file
*/
/**
*Implementando el hook_menu()
*/
function busqueda_citas_menu(){
$items = array();
$items['busqueda_citas'] = array(
'title' => 'Consultar Citas',
'description' => 'Consultar las citas asignadas',
'page callback' => 'drupal_get_form',
'page arguments' => array('busqueda_citas_form'),
'access callback' => TRUE,
);
return $items;
}
/**
*formularios de busqueda
*/
function busqueda_citas_form($form,& $form_state)
{
if (empty($form_state['storage']['tipo_identificacion']) || empty($form_state['storage']['identificacion']))
{
$form['tipo_identificacion'] = array (
'#title' => t('Tipo de Identificacion'),
'#type' => 'select',
'#required'=> TRUE,
'#options'=> array(
'CC' => t('Cedula de Ciudadania'),
'CE' => t('Cedula de Extranjeria'),
'TI' => t('Tarjeta de Identidad'),
'PS' => t('Pasaporte'),
'RC' => t('Registro Civil'),
'MI' => t('Menor sin Identidad'),
'AI' => t('Adulto sin Identidad')
),
'#description' => t('Seleccione el tipo de identificacion')
);
$form['identificacion'] = array(
'#title' => t('Documento de Identidad'),
'#type' => 'textfield',
'#required'=> TRUE,
'#description' => t('Ingrese su numero de Identificacion')
);
$form['submit']= array(
'#type' => 'submit',
'#value' => t('Consultar Cita'),
);
}
else
{
$form['results'] = array(
'#type' => 'item',
'#title' => t('The results of your form submission'),
'#value' => busqueda_citas_list(),
);
}
return $form;
}
/**
*eventos q lanza boton submit
*/
function busqueda_citas_form_submit($form, &$form_state)
{
$form_state['rebuild'] = TRUE;
$form_state['storage']['tipo_identificacion'] = $form_state['values']['tipo_identificacion'];
$form_state['storage']['identificacion'] = $form_state['values']['identificacion'];
}
/**
*funcion que conecta base de datos externa y genera la listo o resultado
*/
function busqueda_citas_list()
{
$output='';
db_set_active('sinergias');
$sql = "
select a.hora, b.fecha_turno, a.agenda_turno_id, c.paciente_id, c.tipo_id_paciente,
d.primer_nombre || ' ' || d.segundo_nombre || ' ' || d.primer_apellido || ' ' || d.segundo_apellido as nombre_completo,
e.plan_id, e.plan_descripcion, b.tipo_consulta_id, f.descripcion, c.cargo_cita, c.sw_atencion,
case WHEN h.sw_estado = '3' THEN 'CUMPLIDA'
WHEN h.sw_estado = '1' THEN 'ACTIVA' END AS estado_cita,
i.tipo_id_tercero, i.tercero_id, i.nombre_tercero
from agenda_citas as a
left join agenda_citas_asignadas as c on (a.agenda_cita_id=c.agenda_cita_id)
left join pacientes as d on(c.paciente_id=d.paciente_id and c.tipo_id_paciente=d.tipo_id_paciente)
left join planes as e on(c.plan_id=e.plan_id)
left join os_cruce_citas as g on(c.agenda_cita_asignada_id=g.agenda_cita_asignada_id)
left join os_maestro as h on(g.numero_orden_id=h.numero_orden_id),
agenda_turnos as b ,
tipos_servicios_ambulatorios as f,
terceros as i
where b.profesional_id=i.tercero_id
and b.tipo_id_profesional=i.tipo_id_tercero
and a.agenda_turno_id=b.agenda_turno_id
and b.tipo_consulta_id=f.tipo_servicio_amb_id
and d.tipo_id_paciente='CC'
and d.paciente_id='21776614'
and a.sw_estado IN ('0','1')
and h.sw_estado = '1'
and date(b.fecha_turno)>='2012-02-01'
order by b.fecha_turno,a.hora, b.tipo_consulta_id
";
$result = db_query($sql);
db_set_active('default');
$header = array('FECHA', 'HORA', 'TIPO ID','IDENTIFICACION','PACIENTE','PLAN','CONSULTA','ESTADO');
$data = array();
foreach ($result as $row)
{
$data[] = array($row->fecha_turno, $row->hora, $row->tipo_id_paciente ,$row->paciente_id, $row->nombre_completo, $row->plan_descripcion, $row->descripcion, $row->estado_cita);
}
$output = theme('table', array('header' => $header, 'rows' => $data ));
return $output;
}
codigo en el cual estoy trabajando
lo que estoy haciendo es un sitio desde el cual pueda consultar registros en una base de datos externa y q los resultados de la consulta me los muestre en pantalla
Casí al final tiene la
Casí al final tiene la siguiente línea:
<?phpforeach ($result as $row) {
// Su código
}
?>
Cámbielo por el siguiente y me cuenta:
<?phpwhile ($row = db_fetch_object($result)) {
// Su código
}
?>
Juan Villegas
micoworker
Diseño y Desarrollo Web
RESPUESTA
al ser drupal 7 no me reconoce ese comando
db_fetch_object($result)
Entonces cámbielo por<?php
Entonces cámbielo por
<?phpwhile ($row = $result->fetchObject()) {
// Su código
}
?>
O también puede probar
<?phpforeach ($result->fetchAll() as $row) {
// Su código
}
?>
Juan Villegas
micoworker
Diseño y Desarrollo Web
respuesta
listo ya realice el cambio por la instruccion indicada y nada no genera resultado. lo q me da la impresion es q no esta llamando la funcion busqueda_citas_list() , aunq el siguiente texto si me lo muestra The results of your form submission
else
{
$form['results'] = array(
'#type' => 'item',
'#title' => t('The results of your form submission'),
'#value' => busqueda_citas_list(),
);
}
¿Tiene instalado el módulo
¿Tiene instalado el módulo Devel?
Use la función dpm() (de Devel) para hacer debug y saber qué tiene cada variable.
Por ejemplo
<?php$result = db_query($sql);
dpm($result);
?>
Con eso mira qué hay en $result, o al final puede poner:
<?php$output = theme('table', array('header' => $header, 'rows' => $data ));
dpm(array('header' => $header, 'rows' => $rows));
?>
Juan Villegas
micoworker
Diseño y Desarrollo Web
RESPUESTA
de acuerdo a lo indicado se lleva acabo la intalacion del modulo devel, definitivamente una excelente herramienta mi amigo , le hice seguimiento a cada bloque del codigo y funciona, veo los valores de las variables , hasta los resultados del query, segun lo observado el problema es cuando se envia a imprimir por pantalla.
en la ultima parte de este
$output = theme('table', array('header' => $header, 'rows' => $data ));
return $output;
RESPUESTA
ya q si envio a imprimir lo que hay en esta linea de codigo
dpm(array('header' => $header, 'rows' => $data));
me arroja los datos almacenados
Entonces intentémos por otro
Entonces intentémos por otro lado... haga este cambio:
<?php$form['results'] = array(
// '#type' => 'item', // Al no usar type se usa markup, que es la opción por defecto
// '#title' => t('The results of your form submission'), // Markup no usa título
'#value' => busqueda_citas_list(),
);
?>
http://api.drupal.org/api/drupal/developer%21topics%21forms_api_referenc...
Juan Villegas
micoworker
Diseño y Desarrollo Web
También le recomiendo
También le recomiendo hacer
<?php$output = theme('table', array('header' => $header, 'rows' => $data ));
dpm($output);
return $output;
?>
Para ver si al menos eso sí está quedando en la variable $output y el problema sería que esos datos no se pueden imprimir en el formulario.
Juan Villegas
micoworker
Diseño y Desarrollo Web
respuesta
listo segui tus consejos y coloque la instruccion en el sitio del $output
y me genero las respuesta con la siguiente linea de codigo html
q me recomiendas q haga
respuesta
"
"
respuesta
bueno en si me sale esto pero en codigo html ..no me genera la tabla q se refleja aqui
Creo que lo tengo... ahora
Creo que lo tengo... ahora cámbielo por:
<?php$form['results'] = array(
'#markup' => busqueda_citas_list(),
);
?>
Según http://api.drupal.org/api/drupal/developer%21topics%21forms_api_referenc...
Juan Villegas
micoworker
Diseño y Desarrollo Web
O como lo tenía originalmente
O como lo tenía originalmente sería:
<?php$form['results'] = array(
'#type' => 'item',
'#title' => t('The results of your form submission'),
'#markup' => busqueda_citas_list(), // Vea que usé markup en lugar de value.
);
?>
Juan Villegas
micoworker
Diseño y Desarrollo Web
respuesta
mi estimado amigo le haz dado en el clavo , efectivamente se a ejecutado a la perfecion y ya muestra los resultados, te lo agradesco mucho , ademas me haz dado una buena leccion de drupal, a un hermano principiante.
Al pelo, me alegro que le
Al pelo, me alegro que le haya servido... ¿a dónde paso por el cheque?... jejeje
Estamos para ayudarnos.
Juan Villegas
micoworker
Diseño y Desarrollo Web
Pregunta de un Novato
Hola amigos
de nuevo aqui molestandolos, me gustaria saber si es posible convertir en pagina de contenido principal un bloque que he desarrollado y no me salga el aquel texto que dice "Aun no se ha creado contenido para la página principal."
En Drupal 7 el contenido
En Drupal 7 el contenido principal viene en un bloque que se llama "Main page content"; sólo es cuestión de configurarle reglas de visibilidad si no se quiere que aparezca en el home.
Lo olvidaba... es cierto,
Lo olvidaba... es cierto, esta opción es mucho mejor.
Juan Villegas
micoworker
Diseño y Desarrollo Web
Esto es en el front_page
Esto es en el front_page porque si es asi...puesdes crear un front tpl y modificarlo de tal forma que imprimas el bloque que deseas....o tambien la solucion que te dan del bloque....que no se imprima en el
Lo que puede hacer es crear
Lo que puede hacer es crear una página usando hook_menu() y que sea de tipo (type) MENU_CALLBACK
Pone esa página como página de inicio y pone el bloque a que aparezca en esa página.
Juan Villegas
micoworker
Diseño y Desarrollo Web
nueva pregunta
Amigos como hago para volver los nodos en ventanas emergentes o pupups
si me regalan un ejemplo lanzandolas desde una imagen
Pregunta de un Novato en Gmap
Hola mis amigos
Resulta que ahora estoy trabajando con este modulo de gmap y todo va al pelo he ido creando nodos con las direcciones de la empresa en la cual trabajo y la ubicacion con gmap , location .. todo me funciona bien desde el administrador pero cuando quiero ver el nodo en vista previa no me sale nada del mapa o si consulto el nodo me sale el siguiente mensaje
Javascript is required to view this map.
CONSULTA HACERCADE LIGHTBOX
HOLA M IS AMIGOS
ESTOY TERMINANDO MI PROMER SITIO EN DRUPAL COMO NOVATO PERO ME GUSTARIA METERLE UN LIGTHBOX EN EÑ CUAL MUESTRE EL CONTENIDO DE MIS NODOS, ME GISTARIA SABER SI EXISTE ALGUNOS ASI COMO EL LIGTHBOX2 PEROQ ME PERMITA MOSTRAR ESTOS. LA VERDAD NO LE HE DADO CON EL CHISTE.
SI GUSTAN VER EL SITIO ES www.cosmitet.net
aunq le faltan cositas
Hola
Claro puedes intentarlo con Colorbox y Colorbox Node.
Saludos
Nuevo Asunto
Hola mis amigos me gustaria preguntarle si me pueden guiar para elaborar un modulo de paginas maestro - detalle, la idea es que se realice una consulta a la db , esta me retorne una lista de registros y si le doy en una opcion de ver el registro en detalle este me lleve a una nueva pagina con informacion mas detallada , pues la primera parte ya la tengo hecha pero la ultima no se por dodne empezar.
se los agradesco de antemano
saludos
pues he seguido tu consejo de utilizarlo y esta super ppero cuando estoy cargando el modulo me genera un error de ajax http 200 y me dejo frito no he encontrado solucion en la web
AYUDA CON MODULO
HOLA MIS AMIGOS ESTOY CREADO UN MODULO QUE ME LANCE UN POPUP AL INGRESAR A MI SITIO, ESTOY UTILIZANDO LA LIBRERIA COLORBOX PERO SI SE LAS ADICIONO A MI MODULO ME DESHABILITA LA LIBRERIA DE LOS OTROS ENLACES DODNE LOS TENGO PROGRAMADO. ME GUSTARIA SABER COMO HAGO PARA Q PUEDA TRABAJARLOS DESDE MI MODULO SIN PROBLEMAS.
Fancybox
usa esta librería men http://fancybox.net/ es muy chevere y fácil de usar. espero te sirva...
SOLICITUD DE AYUDA A MIS AMIGOS DRUPALEROS
BUENO MIS AMIGOS DE ACUERDO AL ULTIMO POS ENVIADO POR MEICKOL REALICE UN HIBRIDO TOMANDO LA FUNCIONALIDAD DE LAS LIBRERIA FANCYBOX Y EL CODIGO DE COLOBOX_NODE PARA CREAR UN MODULO Y ASI PODER DESPLEGAR ARTICULOS EN VENTANS EMERGENTE. RESULTA Q PARA ESTO FUNCIONE YO LE AGREGO UNA CLASE TIPO CSS A LOS LINK EN MIS NUEVO MODULOS PEROOO CUANDO SON MODULOS DEL SISTEMAS NO HE PODIDO SABER COMO AGREGARLE ESTE ATRIBUTO A LOS LINK EN LOS DIFERENTES TIPO DE CONTENIDO, SI ALGUNO DE USTEDES TIENEN IDEA SE LOS AGRADECERIA. YO PROBE CON ESTO PERO NADA Q ME FUNCIONA
function MYMODULE_link_alter(&$links, $node)
Jquery
HOLA, por que no intentas con jquery ? busca todos los links que quieras desplegar de esa manera, y agrégales la clase, ejemplo
jQuery('clasemodulo a').addClas('Tuclase');
así le agregas "tuclase" a todos los módulos que tienen la clase "clasemodulo"
Nuevo Asunto
Hola mis amigos me gustaria preguntarle si me pueden guiar para elaborar un modulo de paginas maestro - detalle, la idea es que se realice una consulta a la db , esta me retorne una lista de registros y si le doy en una opcion de ver el registro en detalle este me lleve a una nueva pagina con informacion mas detallada , pues la primera parte ya la tengo hecha pero la ultima no se por dodne empezar.
se los agradesco de antemano
F
Hola Freddy. Entrega más detalles de lo que necesitas y lo que tienes para ayudarte más acertadamente:
¿Cómo hiciste la primera parte? ¿Consultaste directamente la BD con db_query, hiciste una vista con el módulo views o que hiciste?
¿Que tipo de datos estas cargando?¿Nodos, una entity personalizada u otra cosa?
Saludos
hey men
Bueno
He realizado un modulo el cual me permite consultar atraves de un formularios de busqueda los datos de una persona , el nombre , cc , ocupacion , fechas de nacimiento etc... y otra informacion. los resultados los muestro en una tabla de registros , coloque un enlace de ver detalle en cada registro, la idea es q si le doy en esa opcion el me lleve a una nueva pantalla para ver los datos adicionales.
¿Que tipo de entity son las
¿Que tipo de entity son las personas: usuarios, nodos, custom entity? SI las personas son entities de cualquier tipo, lo mas "fácil" es que uses el modulo views para listar las personas e incluir el vinculo hacia la vista detallada. La vista de detalle de cualquier entity la puedes hacer o modificar usando los template files de Drupal:
node.tpl.php para los nodos
user.tpl.php para los usuarios
etc
Si creaste las entities tipo persona usando el API de drupal, lo correcto es que uses la funcion entity_load() para cargar una o varias entities a la vez, luego construyes los links hacia la vista detallada de cada entity, la URL generalmente será del tipo content/[ENTITY_ID]
Si creaste la tabla manualmente (usando phpmyadmin o código directo desde php), esa no es la forma correcta en Drupal, deberías crear la tabla y los datos usando el API de Drupal.
Saludos
nueva respuesta
-Bueno basicamente lo que hice fue esto .. primero un formularios de busqueda.
function appointment_search_form($form,& $form_state)
{
$form['tipo_identificacion'] = array (
'#title' => t('Tipo de Identificacion'),
'#type' => 'select',
'#required'=> TRUE,
'#options'=> array(
'CC' => t('Cedula de Ciudadania'),
'CE' => t('Cedula de Extranjeria'),
'TI' => t('Tarjeta de Identidad'),
'PS' => t('Pasaporte'),
'RC' => t('Registro Civil'),
'MI' => t('Menor sin Identidad'),
'AI' => t('Adulto sin Identidad')
),
'#description' => t('Seleccione el tipo de identificacion'),
'#prefix' => '
'#suffix' => '
',
);
$form['identificacion'] = array(
'#title' => t('Documento de Identidad'),
'#type' => 'textfield',
'#maxlength'=> 255,
'#size'=> 30,
'#required'=> TRUE,
'#description' => t('Ingrese su numero de Identificacion'),
'#prefix' => '
'#suffix' => '
',
);
$form['submit']= array(
'#type' => 'submit',
'#value' => t('Consultar Citas'),
'#prefix' => '
);
$form['reset']= array(
'#type' => 'submit',
'#value' => t('Limpiar Datos'),
'#suffix' => '
'
);
// Get the path to the module
$path = drupal_get_path('module', 'appointment_search');
// Attach the CSS and JS to the form
$form['#attached'] = array
(
'css' => array
(
'type' => 'file',
'data' => $path . '/css/appointment_search.css',
),
'js' => array
(
'type' => 'file',
'data' => $path . '/js/appointment_search.js',
),
);
if (!empty($form_state['storage']['tipo_identificacion']) || !empty($form_state['storage']['identificacion']))
{
$tipo=$form_state['values']['tipo_identificacion'];
$id=$form_state['values']['identificacion'];
$form['results'] = array(
'#type' => 'item',
'#markup' => appointment_search_list($tipo,&$id),
);
}
return $form;
}
y los resultados los genero en la funcion appointment_search_list()
function appointment_search_list($tipo,&$id)
{
$output='';
db_set_active('dusoft');
$sql = "
select a.hora, b.fecha_turno, a.agenda_turno_id, c.paciente_id, c.tipo_id_paciente,
d.primer_nombre || ' ' || d.segundo_nombre || ' ' || d.primer_apellido || ' ' || d.segundo_apellido as nombre_completo,
e.plan_id, e.plan_descripcion, b.tipo_consulta_id, f.descripcion, c.cargo_cita, c.sw_atencion,
case WHEN h.sw_estado = '3' THEN 'CUMPLIDA'
WHEN h.sw_estado = '1' THEN 'ACTIVA' END AS estado_cita,
i.tipo_id_tercero, i.tercero_id, i.nombre_tercero
from agenda_citas as a
left join agenda_citas_asignadas as c on (a.agenda_cita_id=c.agenda_cita_id)
left join pacientes as d on(c.paciente_id=d.paciente_id and c.tipo_id_paciente=d.tipo_id_paciente)
left join planes as e on(c.plan_id=e.plan_id)
left join os_cruce_citas as g on(c.agenda_cita_asignada_id=g.agenda_cita_asignada_id)
left join os_maestro as h on(g.numero_orden_id=h.numero_orden_id),
agenda_turnos as b ,
tipos_servicios_ambulatorios as f,
terceros as i
where b.profesional_id=i.tercero_id
and b.tipo_id_profesional=i.tipo_id_tercero
and a.agenda_turno_id=b.agenda_turno_id
and b.tipo_consulta_id=f.tipo_servicio_amb_id
and d.tipo_id_paciente='".$tipo."'
and d.paciente_id='".$id."'
and a.sw_estado IN ('0','1')
and h.sw_estado = '1'
--and date(b.fecha_turno)>='2013-02-01'
order by b.fecha_turno,a.hora, b.tipo_consulta_id
";
$result = db_query($sql);
db_set_active('default');
$number_rows = $result->rowCount();
if($number_rows > 0)
{
$header = array('FECHA', 'HORA', 'PACIENTE','CONSULTA');
$data = array();
while ($row = $result->fetchObject())
{
$data[] = array(strtolower($row->fecha_turno), strtolower($row->hora), strtolower($row->nombre_completo), strtolower($row->descripcion));
}
$output = theme('table', array('header' => $header, 'rows' => $data ));
return $output;
}
else
{
$message = '
';
drupal_set_message(t($message));
}
}
con lo cual me genera una lista de resultados ... con los registros de la consulta.
desde esta lista es q quiero generar la vista de detalle ... me guian por favor si estoy equivocado
Hola Freddy. No había
Hola Freddy. No había respondido porque tuve problemas con mi conexión a internet.
Dándole una mirada a tu código, creo que lo único que hace falta para la vista de detalle es que construyas los enlaces en tu función appointment_search_list, específicamente donde creas las filas de la tabla, así que puedes crear un enlace con la función l de Drupal hacia la vista de nodo, esa vista tipicamente tiene la URL content/ID_DEL_NODO o node/ID_DEL_NODO, quedaría algo así:
<?php...
while ($row = $result->fetchObject())
{
$data[] = array(strtolower($row->fecha_turno), strtolower($row->hora), strtolower($row->nombre_completo), strtolower($row->descripcion), l('Ver detalle', 'node/' . $row->agenda_turno_id));
}
...
?>
En esa vista puedes mostrar los datos detallados de tu nodo.
Ahora bien, lo que estás haciendo está técnicamente bien desde el punto de vista de PHP, pero no es la forma correcta en Drupal, en la documentación se refieren a esto como "the Drupal way":
1. Tienes a tu disposición módulos como entityreference que te permiten crear relaciones entre entidades y bundles, tu datos "paciente", "citas" etc. deberían ser relaciones
2. Estás consultando la base de datos directamente, lo ideal es que uses la función db_query y sus propiedades, te dejo un ejemplo que usa joins y condiciones:
<?php
function get_participations_nids( $node_id ) {
$query = db_select('field_revision_field_ref', 'p');
$query->join('node', 'n', 'n.nid = p.entity_id');
$query->condition('entity_type', 'node');
$query->condition('p.bundle', 'participation');
$query->condition('field_ref_target_id', $node_id);
$query->condition('n.status', 1);
$query->fields('p', array('entity_id'));
$result = $query->execute()->fetchCol();
return $result;
}
?>
Un saludo y espero te sirva.
Hola de nuevo
Muchas gracias por tus recomendacion me han parecido muy buenas. realmete me interesa mucho seguir aprendiendo cada dia mas de drupal, nose si seria mucho pedir y si me regalas un pequeño ejemplito para asi yo guiarme para hace las referencias y no utilizar php neto, sino el frame de drupal
vistas
Fredy, intentaste con vistas?... hacer una vista que filtre usuarios, los filtros se exponen de tal forma que se arma el formulario de búsqueda, y en la misma vista le das la opción de que vaya al detalle del usuario?
Lo que quieres mostrar o no se maneja muy fácil con display suite!
ayuda con drupal
Hola, soy nuevo en drupal, estoy realizando un modulo y no se que hacer una vez realizado el modulo, subido y activado lo que debo hacer para utilizarlo en una pagina.
Gracias de antemano.
Te recomiendo que leas:
Te recomiendo que leas: https://www.drupal.org/developing/modules
Es difícil ayudarle con tan
Es difícil ayudarle con tan poca información... yo le recomiendo que abra un tema nuevo en el grupo, dando más detalles acerca de lo que quiere hacer y cómo lo está implementando... seguro que muchos aquí vamos a poder ayudarle mejor.
Juan Villegas
micoworker
Diseño y Desarrollo Web