Jun
29
2010
0

Obtener el “parent item” del menú de la página actual (Drupal)

Si estamos usando Drupal y queremos obtener en una variable el nombre del item u opción de menú inmediatamente superior ("padre") del nodo o página actual que está visitando el usuario (o sea, si quieres el parent item dentro de nuestra jerarquía del menú al que pertenece dicha página), utilizaremos el siguiente código:

  1. $menuParent = menu_get_active_trail();
  2. $pos = count($menuParent) - 2;
  3. $menuParent = $menuParent[$pos]['link_title'];
No me interesaNo está malBienÚtilMuy bien, muy útil (2 votes, average: 3.00 out of 5)
Loading ... Loading ...
Apr
29
2010
0

Subir archivo al servidor desde formulario y enviar email a usuario con enlace (Drupal)

El archivo se llama a sí mismo para procesar el archivo enviado por el usuario desde el formulario y enviar un email con un enlace al mismo. Con algunas modificaciones se podrá usar en cualquier entorno, no necesariamente en Drupal.

  1. <?php if ( !empty($_POST) ) {
  2. if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/sites/default/files/user_form_uploads/".$_FILES['uploadedfile']['name'])) {
  3. echo "The file has been uploaded";
  4. }
  5. echo "Thank you for sending your file.";
  6. $emailadd = 'Recipient.org <recipient@recipient.org>';
  7. $text = "Alguien envió un archivo desde la web.";
  8. $space = '';
  9. $line = '
  10. ';
  11. foreach ($_POST as $key => $value){
  12. if ( !empty($value) ) {
  13. if ($key!='submit' ) {
  14. $key = str_replace("_", " ", $key);
  15. $text .= "<strong>".$key . ":</strong> " . $value . "";
  16. $space = ' ';
  17. }
  18. if ($key=='Email') {
  19. $emailapplicant=$value;
  20. }
  21. }
  22. }
  23. $text .= $line."You can download the file uploaded by the user <a href='http://www.ejemplo.com/sites/default/files/user_form_uploads/".$_FILES['uploadedfile']['name']."'>clicking here</a>.";
  24. mail($emailadd, "Someone sent a file", $text, "From: ".$emailadd."\r\nContent-type: text/html\r\nContent-type: text/html\r\n");
  25. } ?>
  26. <form id="apply_aff_form" method="post" action="thispage.php" class="formular" enctype="multipart/form-data">
  27. <fieldset>
  28. <input name="uploadedfile" id="uploadedfile" type="file" size="46" />
  29. <input id="submit" type="submit" name="submit" value="Submit" class="submit" />
  30. </fieldset>
  31. </form>
  32.  
No me interesaNo está malBienÚtilMuy bien, muy útil (No Ratings Yet)
Loading ... Loading ...
Post de cabezaBomba en la(s) categoría(s): Desarrollo Web,Drupal,PHP,formularios | Tags: , , , , , , , , , , , , ,
Apr
29
2010
2

Subir archivo .txt para actualizar base de datos MySQL con PHP

La idea es actualizar nuestra base de datos con un Excel con el que estemos trabajando. El proceso es copiar las celdas (CTRL+C) que deseemos actualizar, y pegar el resultado en un archivo de texto (.txt), de modo que aparecerán en él los datos separados por tabulaciones (TAB).

La primera página tendrá un código parecido a ésto, y servirá para permitir al usuario subir ese archivo .txt:

  1. <script language="JavaScript">
  2. function validarDatos() {
  3. var frm = document.formulario;
  4. var err = "";
  5. if (!(frm.fileMuestrario.value)) {
  6. err= err + "Por favor, indique un archivo para subir.";
  7. }
  8. if (err=="") {
  9. return true;
  10. }
  11. else {
  12. alert(err);
  13. return false;
  14. }
  15. }
  16. function enviar() {
  17. var frm = document.formulario;
  18. if (validarDatos()) {
  19. var mensaje = "";
  20. mensaje = "Se va a actualizar la valoración de las empresas conforme a los datos del fichero especificado. ¿Confirma la operación?";
  21. if (confirm(mensaje)) {
  22. frm.submit();
  23. }
  24. }
  25. }
  26. </script>
  27. <form name="formulario" method="post" action="paso2.php" enctype="multipart/form-data">
  28.  
  29. Especifique la ruta donde se encuentra el fichero con los valores a actualizar
  30. <input type="file" name="fileMuestrario" size="55" class="campotexto">
  31. <a href="#" onClick="enviar(); return false;">ENVIAR</a>
  32. </form>
  33.  

La segunda página "desmenuza" este archivo y actualiza los valores en nuestra base de datos. Por supuesto, las columnas del archivo de texto deben corresponderse con las columnas de nuestra tabla, para no hacer un desbarajuste con los datos. La primera sería la [0], la segunda es [1], etc.
NOTA: El código utiliza db_query para las consultas a la base de datos porque este código lo hice para Drupal. Sin embargo, puede ser usado en cualquier parte, sólo con sustituir db_query con mysql_connect() y mysql_query.

  1. <?php
  2.  
  3. $registroResultados = "";
  4.  
  5. $subidaFichero = true;
  6. $archivo_temp = $_FILES['fileMuestrario']['tmp_name'];
  7. $archivo = $_FILES['fileMuestrario']['name'];
  8. if ($archivo != '') {
  9. if (!copy($_FILES['fileMuestrario']['tmp_name'], ficheroBackupRUTA)) {
  10. $subidaFichero = false;
  11. }
  12. else {
  13. $subidaFichero = false;
  14. }
  15. }
  16.  
  17. $row = 1;
  18. $ficheroMuestras = ficheroBackupRUTA;
  19. $fSalida = fopen ($ficheroMuestras, "r");
  20.  
  21. $table = 'nombre_tabla';
  22. // Se puede truncar (borrar) la tabla previo a actualizar, o no:
  23. db_query("TRUNCATE TABLE {%s}", $table); //OPCIONAL
  24.  
  25.  
  26. <strong>Actualización exitosa. Estos son los valores actualizados.</strong>
  27. <table>
  28. <tr>
  29. <td>sector1_id</td>
  30. <td>sector2_id</td>
  31. <td>parametro1</td>
  32. <td>parametro2</td>
  33. <td>parametro3</td>
  34. <td>parametro4</td>
  35. </tr>
  36.  
  37. ";
  38.  
  39. while ($data = fgetcsv ($fSalida, 2000, " ")) {
  40. $parametro1 = str_replace(',', '.', $data[0]);
  41. $parametro2 = str_replace(',', '.', $data[1]);
  42. $parametro3 = str_replace(',', '.', $data[2]);
  43. $parametro4 = str_replace(',', '.', $data[3]);
  44.  
  45. $sql = "INSERT INTO nombre_tabla (campo1, campo2, campo3, campo4) VALUES (".$parametro1.", ".$parametro2.", ".$parametro3.", ".$parametro4.")";
  46. db_query($sql);
  47.  
  48. <tr>
  49. <td>".$parametro1."</td>
  50. <td>".$parametro2."</td>
  51. <td>".$parametro3."</td>
  52. <td>".$parametro4."</td>
  53. </tr>
  54.  
  55. ";
  56.  
  57. }
  58. print "</table>
  59.  
  60. ";
  61. fclose ($fSalida);
  62. ?>
No me interesaNo está malBienÚtilMuy bien, muy útil (No Ratings Yet)
Loading ... Loading ...
Post de cabezaBomba en la(s) categoría(s): Desarrollo Web,MySQL,PHP | Tags: , , , , , , , , , , , , , , , , , ,
Apr
12
2009
0

Select List dinámica (PHP) de valores CiviCRM recuperados via API en el módulo CCK (Drupal)

Lo primero de todo, decir que este artículo se refiere a CiviCRM 2.2 usado con Drupal 6.10.

Para poder sacarle el máximo partido al fabuloso CiviCRM y poder usar la información de su base de datos con plena libertad en los nodos de Drupal, hay quien opta por usar el módulo Views. No es mala idea, pero yo finalmente me he decidido por CCK, aunque quizá lo complete usando Views puntualmente.

El caso es que estoy trabajando en la web para una ONG que facilita la donación on-line a los proyectos que sus organizaciones afiliadas tienen por el mundo. Al crear los campos para mi tipo de contenido ("Proyecto") quería incluir uno que permitiese al administrador generar nodos de nuevos proyectos indicando cuál es la organización afiliada correspondiente con la facilidad que supone simplemente elegir de una lista.

Pero la lista de afiliados crece por momentos mientras otros administradores los añaden desde CiviCRM, de modo que la lista de items en esa "select list" de Allowed Values no puede ser estática; debe atacar la base de datos de CiviCRM y recopilar los nombres de los afiliados (en mi caso, buscando a través de la API de CiviCRM de Contacts aquellos incluidos en el Grupo 'All Affiliates', que tiene group_id = 5.

Para ello hay que usar la opción que CCK ofrece de "override allowed values" (Advanced usage only: PHP code that returns a keyed array of allowed values. Should not include <?php ?> delimiters. If this field is filled out, the array returned by this code will override the allowed values list above.)

Para ello, el código que introduzcamos allí deberá darle a Drupal un return con el array de los afiliados, array que debemos hacer que deje de ser asociativo y que deberemos ordenar alfabéticamente después.

De modo que este sería el código (sin abrir/cerrar etiquetas php, pues dejaría de funcionar):

civicrm_initialize();
require_once 'api/v2/Contact.php';
$groupId = 5;
$params = array( 'group' => array( $groupId => 1),
'return.sort_name'    => 1
);
$values = array('contact_id', 'sort_name');
$contacts = civicrm_contact_search( $params);
$result = array_values($contacts);
$n=0;
$final = array();
foreach ($result as $key => $value) {
$final[$n] = $result[$n]['sort_name'];
$n++;
}
sort($final);
return($final);

Entiendo que es un post demasiado concreto, pero quizá a alguno se le ocurre alguna idea pensando en esto.

Sigue la conversación en CiviCRM Forums

No me interesaNo está malBienÚtilMuy bien, muy útil (No Ratings Yet)
Loading ... Loading ...

Creative Commons License
Webcidentes by Alejandro Garcia is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.
Based on a work at www.cabezabomba.com.