Foros Néfele 4 Harbour › Foros › Dudas › Imagen en Columna wArrayBrowse
- Este debate tiene 13 respuestas, 4 mensajes y ha sido actualizado por última vez el 4 años, 2 meses por Alfredo Sanz. This post has been viewed 820 times
-
AutorEntradas
-
-
03-10-2020 a las 21:20 #959Gabriel OrnelasParticipante
Hola, no logro como poner una columna con imagen en wArrayBrowse, como le digo a nefele que WItemColBrowse es una imagen ? en el array de datos le paso la ruta
aItems:= { "images/htocino.jpg", "Huevos con tocino", "70.00" }
Saludos!
- Este debate fue modificado 4 años, 2 meses por Gabriel Ornelas.
-
03-10-2020 a las 22:56 #961Pedro AmaroSuperadministrador
Supongo que es esto lo que pretendes.
123456789101112131415161718192021222324252627282930313233343536PROCEDURE MainPage()// Comenzamos instanciando la Página Web que queremos crearWith Object TWebPage():New():lValign := .T.With Object WArrayBrowse():New(:WO):AddCol("Imagen"):AddCol("Nombre"):AddCol("PVP",,xc_Right, xc_Numeric, "@z 999.99"):AddRow( { PutImagen("https://sincarta.es/samples_images/aquarius.png"), "Aquarius Naranja", 1.2} ):AddRow( { PutImagen("https://sincarta.es/samples_images/bifrutas.png"), "Bifrutas", 1} ):AddRow( { PutImagen("https://sincarta.es/samples_images/cocacola.png"), "Coca Cola Lata", 1} ):AddRow( { PutImagen("https://sincarta.es/samples_images/colacao.png"), "Colacao", .9} ):Create()END WithoCgi:SendPage( :Create() ) // Se crea el HTML final y se envía al navegador saliendo del ejecutable CGIEnd WithRETURN//------------------------------------------------------------------------------FUNCTION PutImagen( cImage )LOCAL cSalidaWith Object WImage():New():lResponsive :=.T.:cImage := cImage:Create()cSalida := :FullHtml()End WithRETURN cSalidaPrueba y nos cuentas
- Esta respuesta fue modificada 4 años, 2 meses por Pedro Amaro.
-
04-10-2020 a las 00:55 #963Gabriel OrnelasParticipante
Gracias pedro.. exactamente es lo que quiero hacer 🙂
Muy Agradecido
-
10-10-2020 a las 10:36 #1069XeviParticipante
Siguiendo este hilo/ejemplo...
Intento hacer que el Browse reaccione SOLAMENTE al click de la imagen, por lo que añado :cOnClick al definir la imagen
123456789101112FUNCTION PutImagen( cImage )LOCAL cSalidaWith Object WImage():New():lResponsive :=.T.:cImage := cImage:cOnClick := "VisParam":Create()cSalida := :FullHtml()End WithRETURN cSalidaPero claro... no se en que registro estoy y como recuperar los parámetros de ese registro que he hecho click
Si al definir el Browse pongo :nIndexValue := 1 y :cOnClick := "VisParam" si me retorna el valor de la columna 1 del registro donde he hecho click, pero no es ese el efecto deseado... solo que actúe el OnClick al dar click a la imagen
Un Saludo,
Xevi
(Editado, no me ha dejado añadir un comentario más)
Bien, se me ocurre...
1234567891011121314151617181920//Añadir un identificador para recibirlo en PutImagen:AddRow( { PutImagen("https://sincarta.es/samples_images/aquarius.png", "1"), "Aquarius Naranja", 1.2} ):AddRow( { PutImagen("https://sincarta.es/samples_images/bifrutas.png", "2"), "Bifrutas", 1} ):AddRow( { PutImagen("https://sincarta.es/samples_images/cocacola.png", "3"), "Coca Cola Lata", 1} ):AddRow( { PutImagen("https://sincarta.es/samples_images/colacao.png", "4"), "Colacao", .9} )//Luego, en PutImagen, recibir ese parámetro y sobrecargar :aParamsFUNCTION PutImagen( cImage, cId )LOCAL cSalidaWith Object WImage():New():lResponsive :=.T.:cImage := cImage:aParams := {{ "cId", cId }}:cOnClick := "VisParam":Create()cSalida := :FullHtml()End WithRETURN cSalidaNo se si es la forma más correcta de proceder, pero...
Lo recibo correctamente en VisParam y puedo pues, de esta manera, hacer lo que sea ya con ese dato...
Un saludo,
Xevi
- Esta respuesta fue modificada 4 años, 2 meses por Xevi.
-
10-10-2020 a las 11:51 #1089Alfredo SanzSuperadministrador
Correcto, le pasas parámetros adicionales cuando pulsas en la imagen.
-
10-10-2020 a las 12:29 #1091XeviParticipante
Siguiendo más...
Estoy con el WListView, ya que no veo que con el WArrayBrowse se pueda hacer multilinea, collapsable...
Intentando el mismo efecto, mostrar una imagen y que ésta me envie a otra página.
Siempre con ejemplos sencillitos, pocas líneas e intentar entender.
12345678910111213141516171819202122232425262728293031PROCEDURE ProvaBrowse()With Object TWebPage():New():lValign := .T.WITH OBJECT WListView():New(:WO):cType := xc_Collapsible:lTitleItem := .T.WITH OBJECT :AddItem( "4", PutImagen("/images/@Soft/PDFview.bmp", "4"), AsciiHTML("Factura Núm."), {AsciiHTML("detalle")}) AS wItemListViewEND With:Create()END WithoCgi:SendPage( :Create() ) // Se crea el HTML final y se envía al navegador saliendo del ejecutable CGIEnd WithRETURN//------------------------------------------------------------------------------FUNCTION PutImagen( cImage, cId )LOCAL cSalidaWith Object WImage():New():lResponsive :=.T.:cImage := cImage:aParams := {{ "cId", cId }}:cOnClick := "VisParam":Create()cSalida := :FullHtml()End WithRETURN cSalidaFUNCIONA el click me envia a VisParam y recojo correctamente el parámetro,
PERO... no visualizo correctamente la imagen y añade un texto debajo de la imagen
Un Saludo,
Xevi
- Esta respuesta fue modificada 4 años, 2 meses por Xevi.
-
10-10-2020 a las 14:26 #1095Pedro AmaroSuperadministrador1234567891011121314151617181920212223242526272829303132333435PROCEDURE ProvaBrowse()With Object TWebPage():New():lValign := .T.WITH OBJECT WListView():New(:WO):cType := xc_Collapsible:lTitleItem := .T.WITH OBJECT :AddItem( "4", , AsciiHTML("Factura Núm."),) AS wItemListViewPutImagen("/images/@Soft/PDFview.bmp", "4", :WO)WITH OBJECT wLabel():New(:WO):cText := AsciiHTML("detalle"):Create()END WITHEND With:Create()END WithoCgi:SendPage( :Create() ) // Se crea el HTML final y se envía al navegador saliendo del ejecutable CGIEnd WithRETURN//------------------------------------------------------------------------------FUNCTION PutImagen( cImage, cId, oParent )LOCAL cSalidaWith Object WImage():New(oParent):lResponsive :=.T.:cImage := cImage:aParams := {{ "cId", cId }}:cOnClick := "VisParam":Create()End WithRETURN Nil
Cuando quieres incluir controles dentro del detalle del ItemListView debes hacerlo de esta manera, en el AddItem espera una cadena con en enlace a la imagen o un Basr64 con la imagen.
Ten en cuenta que si añadimos controles dentro del detalle no va ha hacer caso al texto que le pases para el detalle, tendrás tu que montarlo con un wLabel.- Esta respuesta fue modificada 4 años, 2 meses por Pedro Amaro.
- Esta respuesta fue modificada 4 años, 2 meses por Pedro Amaro.
-
10-10-2020 a las 18:55 #1101XeviParticipante
Pedro,
funcionó perfecto!!!
Y sigo con ello...
Un Browse sencillito para ir haciendo pruebas.
Hay algun componente Néfele para hacer un HiperVínculo???
En una TWebPage puedo poner uno inyectando Html
123With Object TWebPage():New():lValign := .T.:AddHTML( [<a href="pdfdocs/factura00046.pdf" rel="nofollow">Visualitzar Factura 00046.pdf</a>] )Pero en el ejemplo no lo puedo incrustar en una línea de un registro.
123456789101112WITH OBJECT WListView():New(:WO):lTitleItem := .T.WITH OBJECT :AddItem( 46, , "Factura: 00046",) AS wItemListViewWITH OBJECT wLabel():New(:WO):cText := "Fecha: " + DToC(aItems[n,3]):Create()END WITH:AddHTML( [<a href="pdfdocs/factura00046.pdf" rel="nofollow">Visualitzar Factura 00046.pdf</a>] )END With...Un Saludo,
Xevi
-
10-10-2020 a las 22:44 #1103Pedro AmaroSuperadministrador
Se nos había pasado, en la próxima versión de Néfele traerá incluida
1nfl_HttpLink( cUrl, cText, cIcon, cAlign, cColor ) -
11-10-2020 a las 13:18 #1108XeviParticipante
Bien, siguiendo con el Browse...
Me está funcionando correctamente con las indicaciones que me has dado, Pedro.
Un Browse, donde muestro un título, una linea de descripción y una imagen, en la que al "pinchar" en ella, me ejecuta una funcioncilla que lo que hace es mostrar un documento PDF, que previamente debo tener alojado en una ubicación accesible en htdocs/...
Hasta ahí bien!!!
Ahora más... lo que pretendo es, NO tener que duplicar estos archivos que ya dispongo en mi Servidor de mi aplicación de escritorio, sinó que si lo necesito, ir a buscar el archivo en el Servidor y copiarlo en la carpeta htdocs/download o htdocs/tmp para, seguidamente, mostrar el fichero
Muestro el código que tengo funcionando, cortito, pero sencillo para entenderlo...
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768#include "Xailer.ch"#include "Nefele.ch"PROCEDURE ProvaBrowse()Local n, aItems := {}//Cargamos datos en un Array que se mostraran en el Browse//Podríamos proveer de datos el Array desde cualquier consulta DBF o MariaDBAAdd( aItems, { 1, 20180, Date(), "202020180&d2ac1dad64a8b9074583ca4e672b4958ee3d9227" } )AAdd( aItems, { 2, 20181, Date(), "202020181&7101dc5caccff7c0cff55c813786b0c2b1c6f460" } )AAdd( aItems, { 3, 20182, Date(), "202020182&477b1d322a8373a0d53d99f0fa299ea3e0296676" } )With Object TWebPage():New()WITH OBJECT WListView():New(:WO):lTitleItem := .T.For n:=1 To Len(aItems)WITH OBJECT :AddItem( aItems[n,1],, "Factura: " + PadL(ToString(aItems[n,2]),5,"0") ) AS wItemListViewWITH OBJECT wLabel():New(:WO):aWidth := {11}:cText := "Data: " + DToC(aItems[n,3]):Create()END WITHPutImagen("/images/@Soft/PDFview.bmp", aItems[n,4], :WO)END WithNext:Create()END WithoCgi:SendPage( :Create() )End WithRETURN//------------------------------------------------------------------------------FUNCTION PutImagen( cImage, cPdf, oParent )LOCAL cSalidaWith Object WImage():New(oParent):lResponsive :=.T.:cImage := cImage:cCursor := "pointer"//Esto funciona correctamente SI el fichero lo tengo en la carpeta htdocs/download//Abro i muestro el fichero en otra pestaña.// :cOnClick := "#window.open( '/download/" + cPdf + ".pdf' )"//Pero lo que pretendo es ir a buscar el archivo en el Servidor que tengo mi aplicación de escritorio//Copiarlo en la carpeta htdocs/download o htdocs/tmp para, seguidamente, mostrar el fichero:aParams := {{ "cPdf", cPdf }}:cOnClick := "xCopyAndShow":Create()End WithRETURN NilPROCEDURE xCopyAndShow()Local cPdf := oCGI:GetCgiValue("cPdf","")//hasta aquí, funciona correctamente, se copia el fichero en la carpeta htdocs/downloadCopyFile( "\\Server10\c\XeviFTP\Factures\"+cPdf+".pdf", oCgi:GetEnv("DOCUMENT_ROOT")+"\download\"+cPdf+".pdf" )//Pero... no se muestra el documento, se muesta el script en una nueva ventanaoCGI:SendScript( Tag( "script", "window.open( '/download/" +cPdf+".pdf' )" ) )RETURNPero... como comento, no me muestra el documentp, sinó que me muestra el código script en una ventana nueva.
Que hago mal o que me falta ???
Gracias por vuestro tiempo.
Un Saludo,
Xevi.
-
11-10-2020 a las 14:04 #1118Alfredo SanzSuperadministrador
No.
La llamada la tienes que hacer por Ajax,
debajo del :cOnClick := "xCopyAndShow" pon:
:cAjaxBevel := "nflCargo"
y cuando haces el SendScript no hace falta que pongas el Tag("script
Es suficiente poner
oCGI:SendScript( "window.open( '/download/" +cPdf+".pdf' )" )
Pruébalo y me cuentas
-
11-10-2020 a las 14:36 #1119XeviParticipante
Funciona PERFECTO!!!
Gracias por tu tiempo.
La verdad, es que estoy realmente sorprendido de lo que con Néfele uno puede llegar a hacer, en pocas líneas!!!
Un Saludo,
Xevi.
-
12-10-2020 a las 19:22 #1136XeviParticipante
sigo con ejemplillos sencillitos, cortos pero que pueda entender para aprender.
No es que los ejemplose de Néfele no estén bien documentados, que lo estan, sinó que a veces con tanto código uno se pierde e igual a más de uno le puede dar por "rendirse" a probar de hacer su propio ejemplillo funcional.
Comparto lo más sencillo de código para tener un Browse con paginación, que podeis probar con un simple copy-paste.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include "Xailer.ch"#include "Nefele.ch"PROCEDURE Factures()// Comenzamos instanciando la Página Web que queremos crearwith object TWebPage():New()// Instanciamos un Panel para que sea el contenedor del formulario, permite poner un titulo y tiene un efecto sombraWith Object WPanel():New(:WO)// tenemos que tener un contenedor para recibir la respuesta del AJAXWith Object WBevel():New(:WO):cId := "pages"// Cuando cargamos la primera vez montamos la página 1 del listviewFacturesBrowse( 1, :WO ):Create()End With:Create()end with// Y listo, ya tenemos nuestra página creada, como el :Create() de un tWebPage nos retorna todo el HTML de la página// sobre la marcha hacemos el envio de dicho HTML al navegador que nos ha realizado la conexiónoCgi:SendPage(:Create())end withRETURN//------------------------------------------------------------------------------static FUNCTION FacturesBrowse( nPage, oParent )LOCAL cHtmlLocal n, aItems := {}//Cargamos datos en un Array que se mostraran en el Browse//Podríamos proveer de datos el Array desde cualquier consulta DBF o MariaDBAAdd( aItems, { 1, 20001 } )AAdd( aItems, { 2, 20002 } )AAdd( aItems, { 3, 20003 } )AAdd( aItems, { 4, 20004 } )AAdd( aItems, { 5, 20005 } )DEFAULT nPage TO 1WITH OBJECT WListView():New(oParent):lTitleItem := .T.// Parametros para la Paginación:nItemInPage := 3//7:nPage := nPage:cOnChangePage := "FacturesAjaxChangePage" // Esta es la función a Llamar al cambiar de página:cAjaxPages := "pages" // Este es el wBevel que contiene el wListView y al que hay que enviar la respuesta del AJAXFor n:=1 To Len(aItems)WITH OBJECT :AddItem( aItems[n,1],, "Factura: " + ToString(aItems[n,2]) ) AS wItemListViewEND WithNext:Create()// Como tambien lo podemos llamar por AJAX recuperamos todos el código HTML y JS en una cadenacHtml := :FullHtml()end withRETURN cHtml//------------------------------------------------------------------------------// Esta es el metodo que es llamado por AJAXPROCEDURE FacturesAjaxChangePage()// El Listview nos envia en la llamada tres Parametros de su configuración que podemos// recuperar con oCgi:GetCgiValue// newpage := Próxima página a mostrar// cType := tipo de ListView// lTitleItem := Si se presenta el titulo de las lineas (cuidado devuelve 'true' o 'false')LOCAL nPagina := Val(oCgi:GetCgiValue("newpage", "1")) // Recuperamos la página a mostrar// Montamos el listview con los parametros recibidos y lo enviamos de respuestaoCgi:SendPage( FacturesBrowse(nPagina) )RETURN//------------------------------------------------------------------------------Un Saludo,
Xevi.
- Esta respuesta fue modificada 4 años, 2 meses por Xevi.
-
12-10-2020 a las 21:11 #1138Alfredo SanzSuperadministrador
Ok Xevi,
Gracias por le aporte
-
-
AutorEntradas
- Debes estar registrado para responder a este debate.