Guía 36 – Carga dinámica de imágenes según dato introducido

En nuestras aplicaciones, cada vez más, utilizamos la imagen para representar a un usuario, a un producto, a un país, etc., es decir, utilizamos asociado a un código la imagen que representa a ese objeto.

PHPRunner dispone o hace muchas cosas, pero la funcionalidad de «AUTOFILL» no la hace para el caso de que lo que queramos traer asociado a un campo sea una imagen.

Objetivo

En campo del tipo «lookup«, cuando cargamos un valor nos debe recuperar en otra parte de la pantalla a la imagen del registro seleccionado.

DEMO:  https://fhumanes.com/photo

Solución técnica

Para dar solución a este requisito lo he resuelto de esta forma:

  • Para la zona donde queremos que aparezca la imagen he definido un snipped definiendo un «DIV» en su interior. Dicho «DIV» lo vamos a rellenar con la información de la imagen.
  • En JavaScript definimos una función para ejecutar un proceso ajax donde nos va a recuperar el PATH de la imagen asociada al valor introducido.
  • También en JavaScript, nos va a controlar cuando el campo cambia de valor, para refrescar la imagen.

En el ejemplo se han definido Usuarios «users» y Grupos «groups», cada registro de estas entidades tienen un nombre y una imagen asociada.

Cuando se mantiene la entidad de Usuarios en Grupos «users_group», cuando se introduce un usuario y/o grupo, el sistema recupera la imagen asociada estas entidades.

Muestro algunos ejemplos de código escrito.

JavaScript Onload Event, en la acción de ADD

// USER -------------------------------------------------------------
function loadImageUser(ctrl) {
  pvalor = ctrl.getValue();
  if ( pvalor != '' ) {			// No hay valor en el campo
  $.ajax({
    type: 'POST',
    url: './ajax_load_image_user.php',
    data: {
       valor: pvalor
    }
  }).done(function (msg) {
    // alert(msg);
    var image_user = new Image();

    var src_user = msg;
    image_user.src = src_user;

    $('#image_user').empty().append(image_user);  // Limpiar y cargar nueva imnagen
  }).fail(function (jqXHR, textStatus, errorThrown) {
    alert("The following error occured: " + textStatus + " " + errorThrown);
  });
 } else {
  $('#image_user').empty();
 }
}
// ---------------------------------------------------------------------------------
var ctrl_user = Runner.getControl(pageid, 'user_id');
if ( ctrl_user.getValue()!= '') loadImageUser(ctrl_user);
// ---------------------------------------------------------------------------------
ctrl_user.on('change', function (e) {
  loadImageUser(ctrl_user);
});

// GROUP -------------------------------------------------------------

function loadImageGroup(ctrl) {
  pvalor = ctrl.getValue();
  if ( pvalor != '' ) {			// No hay valor en el campo
  $.ajax({
    type: 'POST',
    url: './ajax_load_image_group.php',
    data: {
       valor: pvalor
    }
  }).done(function (msg) {
    // alert(msg);
    var image_group = new Image();

    var src_group = msg;
    image_group.src = src_group;

    $('#image_group').empty().append(image_group);  // Limpiar y cargar nueva imnagen
  }).fail(function (jqXHR, textStatus, errorThrown) {
    alert("The following error occured: " + textStatus + " " + errorThrown);
  });
 } else {
  $('#image_group').empty();
 }
}
// ---------------------------------------------------------------------------------
var ctrl_group = Runner.getControl(pageid, 'group_id');
if ( ctrl_group.getValue()!= '') loadImageGroup(ctrl_group);
// ---------------------------------------------------------------------------------
ctrl_group.on('change', function (e) {
  loadImageGroup(ctrl_group);
});

Proceso de ajax, para recuperar el path de la imagen ajax_load_image_user.php

<?php 
require_once("include/dbcommon.php"); // DataBase PHPRunner

if (!isset($_POST['valor'])) { //  Control of the call and verification of the existence of the parameter
  echo("Please provide a Valor.");
  die();
}
$id_user = $_POST['valor'];

$rs = DB::Query("select photo from photo_user where id_user = $id_user");
$photo = $rs->value("photo");
// get information about uploaded files
$fileArray = my_json_decode($photo);
$path = $fileArray[0]["name"];

echo($path);
?>

Espero que os guste y si tenéis cualquier duda, por favor, contactar a través de email [email protected]

Os dejo el proyecto, para que lo instaléis en vuestros PC y podáis ver con todo detalle este ejemplo y modificarlo para que se ajuste a vuestras necesidades.

Adjuntos

Archivo Tamaño de archivo Descargas
zip PHPRunner 10.7 y backup de BD 42 KB 212

Blog personal para facilitar soporte gratuito a usuarios de React y PHPRunner