Respuestas de foro creadas
-
AutorEntradas
-
Alfredo Sanz
SuperadministradorHola de nuevo!
Qué cosa más curiosa, parece que funciona diferente Chrome y Edge para este caso
Si vemos el código web con debugger, lo que hace Chrome vemos esto
Fíjate que isEnabled es true y por tanto procesa el getUserId
Del mensaje anterior, comenta la línea
:cOnReady += cJs
y dime si te funciona en Chrome
En cambio, la misma página desde Edge nos dice esto
IsEnabled nos devuelve false y por tanto no procesa nada.
Alfredo Sanz
SuperadministradorHola que tal!
Tendré que revisarlo, porque veo que una de las propiedades de OneSignal no la está tomando bien.
De momento prueba esto:
Justo después del
WITH OBJECT TWebPage():New()
pones:1234567891011121314cJs := '' // mejor si la declaras como localTEXT INTO cJsOneSignal.isPushNotificationsEnabled(function(isEnabled) {OneSignal.getUserId(function(userId) {OneSignalUser = userId;var a = document.getElementsByName("onesignaluser")for (i = 0; i < a.length; i++)a[i].value = OneSignalUser;});});ENDTEXT:cOnReady += cJsEl propio Nefele te crea un input de tipo texto llamado onesignaluser con el id del usuario y al que puedes llamar luego con oCgi:GetCgiValue( "onesignaluser" )
Ya me contarás si te funciona
1 Saludo
Alfredo Sanz
SuperadministradorHola,
No, no hemos recibido nada.
Te puedes poner en contacto directamente a través de alfredo@sanzperez.com1 Saludo
Alfredo Sanz
SuperadministradorYa veo.
Habría que saber qué servidor web se está usando y si es apache, si tenemos acceso a modificar el httpd.conf o podemos usar .htaccessSi tienes acceso a estos fichero, revisa esta entrada https://httpd.apache.org/docs/2.4/mod/mod_alias.html
Alfredo Sanz
SuperadministradorHola Juan, necesitaría saber la url de tu página para revisarlo
1 Saludo,
FredyAlfredo Sanz
SuperadministradorTienes razón, tenemos que cambiar el changelog.
TWebPage tiene una propiedad llamada cTrackUserAgent que por defecto tiene el valor "TrackUserAgent"
PROPERTY cTrackUserAgent INIT "TrackUserAgent"
Al crear la página, si cTrackUserAgent no está vacío nos crea un fichero log dentro de cgi-bin con el nombre del contenido de cTrackUserAgent con el siguiente formato
20200820 08:53:41 90.168.237.130 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4225.0 Safari/537.36
Que corresponde a
fecha - hora - dirección ip - navegador
Si queremos desactivar el log:
:cTrackUserAgent := nil
Si queremos guardar el registro en un fichero llamado accesos.txt
:cTrackUserAgent := "accesos.txt"
Alfredo Sanz
SuperadministradorEstará disponible en la próxima versión de Nefele
Alfredo Sanz
SuperadministradorUff! asegúrate de tener abierto en el router además del puerto 80 el puerto 443. A ver si tenemos suerte y es eso.
Ya nos contarás.Alfredo Sanz
SuperadministradorSí tienes la propiedad cargo en todos los controles
Recuerda que también puedes aprobechar la herencia para crearte nuevas propiedades que sean comunes a todos los componentes
CLASS WNefeleComponent FROM ZNefeleComponent
PROPERTY MiSegundoCargo
ENDCLASS15-07-2021 a las 19:50 en respuesta a: C:\Xailer\Hb32\comp\mingw\Bin\ld: cannot find -ldolphin #1849Alfredo Sanz
SuperadministradorHola!
- Bájate la última versión del samples desde https://nefele.dev/blog/download/nefele-samples-v-1-4-0/
- Verás que contiene un fichero llamado "Ficheros adicionales.zip"
- Dentro de él hay una carpeta llamada "lib a añadir a Xailer"
- Dentro de esta carpeta está el fichero libdolphin.a
- Copia ese fichero a la carpeta donde tengas las librerías de xailer compila de nuevoYa me contarás si te funciona o tienes algún problema.
Alfredo Sanz
SuperadministradorTengo que verificarlo, pero creo que el ADO de sqlite no admite bases de datos con contraseña
Alfredo Sanz
SuperadministradorDescárgate el nuevo nefele wizard desde https://nefele.dev/blog/download/nefele-wizard-0-4-0/ y reempláza todos los ficheros anteriores por estos.
Luego, ejecuta el nefelewizard.exe para que actualice las librerias de nefele en xailer y a funcionar.Alfredo Sanz
SuperadministradorHola,
En https://nefele.dev/blog/download-category/descargas/ tienes la nueva versión de Néfele y de los ejemplosAlfredo Sanz
SuperadministradorAlfredo Sanz
SuperadministradorHola.
Están en el email que os envié ayer. falta el .sql de mysql que lo tendré listo espero para el lunes
Alfredo Sanz
SuperadministradorRaro. Exporta el proyecto y adjúntalo a ver qué veo
-
Esta respuesta fue modificada 3 años, 3 meses por
Alfredo Sanz.
Alfredo Sanz
Superadministrador¿existe la función MainPage()?
Alfredo Sanz
SuperadministradorEs el comportamiento por defecto de materialize
Puedes usar la propiedad cCss de TWebpage para modificarlo
1:cCSS := ".tabs .tab { text-transform: initial;}"Alfredo Sanz
SuperadministradorSí. Me ha costado un poquito encontrarlo, porque hace mucho que se lo preparamos, pero lo tenemos.
Te dejo un pequeño ejemplo
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121// Comenzamos instanciando la Página Web que queremos crearWITH OBJECT TWebPage():New():lValign := .f.:lContainer := .f.:lAlerts := .f.WITH OBJECT WPanel():New(:WO):cTitle := "Clientes":aWidth[ _grande ] := 10:aOffset[ _grande ] := 1:oStyle:cPadding := 0:oStyle:cBorder_radius := "10px"WITH OBJECT WForm():New( :WO ):cId := "forma_clientes":cFunction := "#alert('Saliendo')"WITH OBJECT wTabs():New( :WO ):cId := "tabs_captura":AddItem("primero" , "bevel_uno") //Nombre del tab y bevel a contener:AddItem("segundo" , "bevel_dos"):AddItem("tercero" , "bevel_tres"):Create()END WITH// Bevel contenedor de la primera pestañaWITH OBJECT WBevel():New(:WO):cId := "bevel_uno":nStyle := xc_RowWITH OBJECT WEdit():New( :WO ):cId := "cliente":cHint := ".":cTitle := "cliente":nLength := 4:Create()END WITHWITH OBJECT WEdit():New( :WO ):cId := "nombre":cHint := ".":cTitle := "Nombre":nLength := 50:Create()END WITH:Create()END WITH// Bevel contenedor de la segunda pestañaWITH OBJECT WBevel():New(:WO):cId := "bevel_dos":nStyle := xc_RowWITH OBJECT WEdit():New( :WO ):cId := "direccion":cHint := ".":cTitle := "Direccion":nLength := 40:Create()END WITHWITH OBJECT WEdit():New( :WO ):cId := "ciudad":cHint := ".":cTitle := "Ciudad":nLength := 40:Create()END WITH:Create()END WITH// Bevel contenedor de la tercera pestañaWITH OBJECT WBevel():New(:WO):cId := "bevel_tres":nStyle := xc_RowWITH OBJECT WEdit():New( :WO ):cId := "empresa":cHint := ".":cTitle := "Empresa":nLength := 40:Create()END WITHWITH OBJECT WEdit():New( :WO ):cId := "puesto":cHint := ".":cTitle := "Puesto":nLength := 40:Create()END WITH:Create()END WITH// esta parte queda fuera de los tabsWITH OBJECT WButton():New(:WO):cText := "Nuevo Cliente":cIcon := "addbox":lLarge := .T.:nFix := "100%":cOnClick := "#alert('Nuevo cliente')":Create()END:Create()END WITH // Form:Create()END WITH // Listview principaloCgi:SendPage( :Create() ) // Se crea el HTML final y se envía al navegador saliendo del ejecutable CGIEND WITHContenido no disponible.
Por favor, acepta las cookies haciendo clic en este avisoAlfredo Sanz
SuperadministradorHola!
Yo creo que es porque ya estás ejecutando apache como un servicio.
Me explico:
Si apache ya se está ejecutando (como aparece en el administrador de tareas) y ejecutas de nuevo el demonio apache httpd.exe, te va a dar ese mensaje, diciendo que el puerto ya está en uso.Alfredo Sanz
SuperadministradorGabriel,
Comprime los prg en un archivo .zip y vuelvelo a enviar.
Alfredo Sanz
SuperadministradorSí, las indicaciones son para lets Encrypt
Alfredo Sanz
SuperadministradorTienes que usar la clase wRadioMenu
12345678with object WRadioMenu():New( :WO ):cId := "RadioMenu":aItems := { "Canarias", "Zaragoza", "Murcia", "Bilbao" }:nIndex := 2:cTitle := "Seleccione una punto de reunión":lGap := .T.:Create()end withPara recogerlo, oCgi:GetCgiValue("<cId del control>") y te devuelve el texto del valor seleccionado
Más info en https://nefele.dev/wiki/controles/wradiomenu
Alfredo Sanz
SuperadministradorHola!
SendAjaxScript es una función de los ejemplos nefele y que no forma parte del núcledo nefele
La encontrarás en el prg eFuncionesGenericas.prg en los ejemplos
Te la adjunto por si no la encuentras
123456789101112131415161718192021222324252627//-------------------------------------FUNCTION SendAjaxScript( cText, cModal, cFocus )IF !Empty( cModal )cText += cOpenModal( cModal )ENDIFIF !Empty( cFocus )cText += SetFocus( cFocus )ENDIFoCGI:Send( "" )oCGI:send( IF(At("<SCRIPT>",Upper(cText))=0,"<script>","") + crlf + cText + crlf + "</script>" )RETURN NIL//----------------------------------------------FUNCTION cOpenModal( cName )RETURN '$("#' + cName + '").modal("open");' + crlf//----------------------------------------------FUNCTION SetFocus( cName )RETURN 'document.querySelector("#' + cName + '").focus();' + crlf-
Esta respuesta fue modificada 3 años, 5 meses por
Alfredo Sanz.
Alfredo Sanz
SuperadministradorREV 2110
11-03-2020
+ source\zClassNefele\SimpleMenu.prg
Clase que hereda de SideNav para la creación de menús
PROPERTY cIcon INIT "star" // icono de fontawesome a colocar a la izquierda de cada opción
* include\css\nefelecore.css
// Incluidas definciones para utilizar el modo lCompress de los wForm
* source\zClass\source\Form.prg
+ PROPERTY lCompress INIT .F. // Habilita el modo de tamaño comprimido
* source\zClass\source\Edit.prg
+ PROPERTY lCompress // Habilita el modo de tamaño comprimido, por defecto utiliza el definido en wForm
* source\zClass\source\Combobox.prg
+ PROPERTY lCompress // Habilita el modo de tamaño comprimido, por defecto utiliza el definido en wForm
* source\zClass\source\FileOpenDlg.prg
+ PROPERTY lCompress // Habilita el modo de tamaño comprimido, por defecto utiliza el definido en wForm08-03-2020
* samples\Nefele_Samples\
+ Incluidos ejemplos cpn wPDFReports* source\zClass\source\Cgi.prg
! La estructura que retorna GetCodefCookie incluye un campo 'Value' que comparte contenido con el campo 'Valor'
para ir internacionalizando el tema, hay que ver como podemos avisar de que ese campo va a desaparecer
!! source\zClass\source\WebPage.prg
!! PROPERTY lPDFReports remplaza a ljsPDF
* source\zClass\source\SplitButton.prg
% Se ha homogeneizado con wButton para que respete aWidth y aOffset
% PROPERTY lCenter // Se mantiene por compatibilidad con versiones anteriores
+ PROPERTY cPosition INIT xc_Center // Alineación con respecto a su contenedor
+ PROPERTY lContainer INIT .T. // Contenedor interno del botón
% oIconMenu por defecto pasa a ser "arrow_drop_down_circle"* source\zClass\source\PDFReport.prg
! Homogeneizadas todas las propiedades de Color para que funcionen como en cualquier control, admitiendo
colores materialize, en Hexadecimas RGB y numerico07-03-2021
* source\zClass\source\Webpage.prg
+ PROPERTY lPDFObject INIT .T. // Utilizaremos PDFObject para la gestión de PDF embebidos
* source\zClass\source\PDFReport.prg
¡¡ Se han cambiado el orden de los parametros de todos los metodos para que esten primero los imprecindibles
+ METHOD QrCode( nLeft, nTop, nWidth, nHeight, cText, cEccLevel, nClrPane, nClrText, nMargin, nModuleSize, lAuto )
// Para incluir Códigos QR en los report.
+ PROPERTY lPDFObject INIT .T. // Por defecto se utilizara PDFObject para el embebido de PDF01-03-2021
* samples\Nefele_Samples\
+ Ejemplo Generación Códigos QR
* source\zClass\source\Webpage.prg
+ PROPERTY lQrJS2 // Inicializa la página para que pueda contener Códigos QR
+ source\zClass\source\QrCode.prg // Clase para la creación de códigos QR
* source\NefeleCore.prg
+ FUNCTION nfl_MakeQrCode() // Funciones para la creación de códigos QR
* \samples\Nefele_Samples\
+ Ejemplos uso pdf
+ \samples\EnviarPdf
Ejemplo de uso pdfs* include\core\css\ext-materialize.css
+ .card-content { overflow: auto; } // Para evitar que el contenido se salga
* source\zClass\source\SideNav.prg
+ Habilitadas las propiedades relacionadas con ShadowSheet ( lShadowSheet, cShadowSheetTitle y cShadowSheetSubTitle )
se aplica a todas la opciones del Menú que llaman a nuestro CGI. Las que ejecuten JS o href no tienen ShadowSheet
* source\zClass\source\Cgi.prg
+ PROPERTY aSecurityPolicy INIT {} // Nos permite añadir Parametros de Seguridad en el Header del envío
* source\NefeleFunction.prg
+ FUNCTION nfl_DefaultSecurityPolicy( lHTTPS ) // Configuración basica de seguridad con las pruebas que hemos realizadoAlfredo Sanz
Superadministrador123456789with object WEdit():New(:WO):cShortCut := "Alt+N":cId := "nombre":cTitle := "<u>N</u>ombre":cHint := "Nombre del Cliente":cIcon := "person":SetRequired():Create()end withAlfredo Sanz
SuperadministradorHola,
Enséñame la función ingresacliente()
Alfredo Sanz
SuperadministradorEn el enrutador de prg, justo debajo de
Class TCgi FROM XCgi
pon esta línea
METHOD editorini() INLINE nfl_editorini()
Alfredo Sanz
SuperadministradorREV 2107
* source\zClass\source\NefeleControl.prg
Aceleradores de teclado ( ej. alt + a ). (De momento solo en edit y button)
+ PROPERTY cShortCut // ::cSortCut= "Alt+A"
+ PROPERTY cShortCutAction INIT "click"* source\zClass\source\wArrayBrose.prg
! Comprueba si la cabecera o las celdas llevan icono comparando con "icon:", antes lo hacia con "icon" y fallaba* source\zClass\source\Edit.prg
% si ::SetSearch() y ::nTimeOut > 0, al pulsar la x lanza el evento de cambio con texto := ""Alfredo Sanz
SuperadministradorDisculpa, con ejemplo me refería al trozo de código fuente con el que estás generando ese html
Alfredo Sanz
SuperadministradorHola!
No lo temino de enterder.
Mándanos un pequeño ejemplo para revisarlo.
1 Saludico,
Fredy
Alfredo Sanz
SuperadministradorREV 2103
21-01-2021
* source\zClass\source\ItemColBrowse.prg
+ PROPERTY lDefault INIT .f. // Utilizar si los datos nos llegan ordenados ya por esta columna
+ PROPERTY lSort INIT .t. // La columna se puede ordenar
+ PROPERTY lSearch INIT .t. // La columna tiene caja de búsqueda* source\NefeleFunctions.prg
! FUNCTION nfl_CallAutoForm // No añadia ; al final, por lo que fallaba si se le adjuntaban otras funciones-
Esta respuesta fue modificada 3 años, 7 meses por
Alfredo Sanz.
Alfredo Sanz
SuperadministradorHola Xevi,
No tienes que utilizar :oStyle:cWidth sino :aWidth
revisa https://nefele.dev/wiki/propiedades/awidth
-
Esta respuesta fue modificada 3 años, 7 meses por
Alfredo Sanz.
Alfredo Sanz
SuperadministradorREV 2101
07-01-2021
* source\zClass\source\wArrayBrose.prg
+ Se pueden utilizar los estilos xc_Striped y xc_Highlight al mismo tiempo
+ PROPERTY lSort INIT .f. // Ordenación por columnas
+ PROPERTY lSearch INIT .t. // Búsqueda por columnas
+ PROPERTY cSearchTxt INIT "Buscar" // Texto placeholder casilla búsqueda columna
+ PROPERTY cSearchId INIT "buscar" // Id de la caja de búsqueda externa
+ PROPERTY lScroll INIT .f. // Browse scrollable
+ PROPERTY cHeight INIT "90vh" // Altura del browseVer ejemplo de uso en https://nefele.dev/foro/topic/nuevo-ejemplo-warraybrowse/
Alfredo Sanz
SuperadministradorVamos a mirarlo y te cuento.
Feliz año!
Alfredo Sanz
SuperadministradorHola!
SendAjaxScript no es una función de Néfele, sino que forma parte de los ejemplos.
La tienes en el fichero 9-eFuncionesGenericas.prg dentro de los browses
Te la adjunto por si te resulta más fácil copiar y pegar
1234567891011121314151617181920//-------------------------------------//- Envía por Ajax el javascript indicado, abriendo la ventana modal y posicionándose en el campo//. cText: Texto a enviar//. cModal: Id de la ventana a abrir//. cFocus: Id del control que tomará el focoFUNCTION SendAjaxScript( cText, cModal, cFocus )IF !Empty( cModal )cText += cOpenModal( cModal )ENDIFIF !Empty( cFocus )cText += SetFocus( cFocus )ENDIFoCGI:Send( "" )oCGI:Send( IF(At("<SCRIPT>",Upper(ToString(cText)))=0,"<script>","") + crlf + ToString(cText) + crlf + "</script>" )RETURN NILFeliz año!!
-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
Alfredo Sanz
SuperadministradorRev 2052
27-12-2020
* source\zClass\source\Timepicker.prg
+ PROPERTY lAutoSelect INIT .F. // No se selecciona el texto al coger el foco
+ PROPERTY nAdjustTime // Ajusta el tiempo seleccionado en el picker al valor indicado.
// si nAdjusTime = 5 y seleccionamos las 12:03, lo cambia a 12:05* source\zClass\source\button.prg
% Eliminado el texto "Enviar" por defecto cuando :cText está vacío-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
Alfredo Sanz
SuperadministradorRev 2051
18-12-2020
* source\zClass\source\Rebar.prg
! Faltaban unas comillas en la img del Method PlaceLogo()
* source\zClass\source\Form.prg
+ PROPERTY lValidatePlus INIT .f. // Sistema de validación basado en https://jqueryvalidation.org/
+ PROPERTY cValidateLang INIT "es" //Idioma a usar
+ PROPERTY cValidateText // Texto alternativo al usado por defecto "Este campo es obligatorio"* source\zClass\source\edit.prg
! No se podia usar nLength y nTimeOut conjuntamente
+ cAjaxTimeOut recibe parámetros definidos en aParams16-12-2020
* source\zClass\source\edit.prg
! Permitia erroneamente caracteres especiales en las cadenas de AutoComplete, ahora filtra '"', CRLF, CR, LF15-12-2020
* AddOn\MySQL MariaDB\Source\MariaBD_Connect.prg
% FUNCTION MariaDBConnect(cSqlHost,cSqlUser,cSqlPass,cSqlDDBB,nPort,nTimeOut)
// Añadidos nPort y nTimeOut* source\ConfigINI_DDBB.prg
% Se ha añadido nPort y nTimeOut a las llamadas a los DataSource de Xailer-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
Alfredo Sanz
SuperadministradorRev 2050
12-12-2020
* source\zClass\source\cgi.prg
! Corregido bug con UserData09-12-2020
* source\NefeleFunctions.prg
% FUNCTION nfl_OpenModal(cId, lDirect, cIdFocus)
% FUNCTION nfl_CloseModal(cId, lDirect, cIdFocus)
// con cIdFocus podemos indicar el control que cogera el foco al Abrir/Cerrar el Modal* source\zClass\source\icon.prg
METHOD Merge( oIcon )// Fusiona las propiedades del Objeto con las del pasado por parametro si no se han definido* source\zClass\source\ItemListView.prg
% Aplicamos el Methodo Merge en oIconEdit y oIconDelete, para poder definir propiedades en cada Item y el resto utilizar las de ListView
% Permitimos utilizar Iconos sin su correspondiente cOnClick, son meramente informativos* source\zClass\source\cgi.prg
! Cookie2Session y Session2Cookie no estaba funcionando correctamente07-12-2020
* source\zClass\source\FlatingBtn.prg
! Corregido bug al crear el control-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
Alfredo Sanz
SuperadministradorRev 2049
04-12-2020
* source\zClass\source\Badge.prg
% Evento OnClick en los Badge, se modifica el cursor a pointer si hay cOnClick
+ PROPERTY cOnClick
+ PROPERTY cTarget* source\zClass\source\Chips.prg
% Evento OnClick en los Chips, se modifica el cursor a pointer si hay cOnClick
+ PROPERTY cOnClick
+ PROPERTY cTarget* source\zClass\source\NefeleControl.prg
% METHOD CreateEvent // Admite URL como cFunction, las ejecuta con Window.Open e incluye un event.stopPropagation()-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
Alfredo Sanz
SuperadministradorVersión 0.3.6
04-12-2020
* source\zClass\source\MsgAlert.prg
! No ponia correctamente la version de ext-materialize, utilizaba la de Nefele.ch
% Ahora si se carga en una página habilita ::lAlert en tWebPage y si no lo carga directamente pero utilziando ::oCGI:cVersionMaterialize03-12-2020
* source\zClass\source\ItemListView.prg
% Los eventos OnClick de ambos botones incluyen una aParam "EVENT" con "EditClick" o "DeleteClick"01-12-2020
* source\zClass\source\ArrayBrowse.prg
% Las columnas no heredaban los aParams del WArrayBrowse - Resuelto29-11-2020
* source\NefeleFuntions.prg
- FUNCTION ReplaceChars // Deprecated
+ FUNCTION nfl_ReplaceChars
* source\zClass\source\NefeleControl.prg
% METHOD EventFunction // Cuando la llamada a generar es por AJAX añade un aParam para que el CGI pueda identificarla
* source\zClass\source\Cgi.prg
+ PROPERTY lAjaxCall INIT .F. // La llamada al CGI ha sido desde AutoFormAjax28-11-2020
* source\zClass\source\ItemFloatButton.prg
% Pasan a heredar de wControl para integrarle CreateEvent
+ METHOD CreateFloatBtn() // Para utilizar en wFloatBtn
+ METHOD CreateSplitBtn() // Para utilizar en wSplitButton
% Aplicadas las propiedades ::cClrPane y ::cClrText, si es xc_Divider ::cClrText es el color de la linea
* source\zClass\source\SplitButton.prg
% Implementamos CreateEvent en los iTems para homogeneizar código
% Utilizamos CreateSplitBtn para crear cada uno de los Item
* source\zClass\source\FloatingBtn.prg
% Implementamos CreateEvent en los iTems para homogeneizar código
% Utilizamos CreateFloatBtn para crear cada uno de los Item
* source\zClass\source\icon.prg
+ PROPERTY cClrIcon // Aunque internamente utilizamos ::cClrText me parecia que era más intuitivo27-11-2020
* source\NefeleFunctions.prg
! FUNCTION nfl_CreateParamToScript // Con los HASH y los Array los paso a BASE64 para evitar problemas
* source\zClass\source\Cgi.prg
% METHOD New // Procesa los HASH y ARRAY encapsulados por Néfele en aParams en BASE64
* source\zClass\source\PDFReport.prg
+ PROPERTY cModalBevel INIT "" // Si queremos que una vez creado el PDF se visualize en una ventana Modal26-11-2020
* source\zClass\source\PDFReport.prg
+ PROPERTY lShow INIT .T. // Se abre directamente en modo vista previa en otra pestaña del navegador
// Metadatos del PDF
+ PROPERTY cPDFTitle INIT ""
+ PROPERTY cPDFSubject INIT ""
+ PROPERTY cPDFAuthor INIT ""
+ PROPERTY cPDFKeyword INIT ""
+ PROPERTY cPDFCreator INIT "wPDFReport by Néfele Project"25-11-2020
* source\XA_Application.prg
% METHOD Console // Soporte de HASH como valor para enviar a NéfeleConsole
* source\NefeleFunctions.prg
% FUNCTION nfl_CreateParamToScript // Admite HASH y ARRAY como valores de aParam
* source\zClass\source\Cgi.prg
% METHOD New // Procesa los HASH y ARRAY encapsulados por Néfele en aParams22-11-2020
* source\zClass\source\ItemListView.prg
! cOnClickDelete no estaba funcionando21-11-2020
* source\ConfigINI_DDBB.prg
+ Soporte para PostgresSQL
* include\Nefele.ch
+ #define xc_PostgreSQL 10505
* source\zClass\source\AdoConnect.prg
+ Soporte para PostgreSQL-
Esta respuesta fue modificada 3 años, 8 meses por
Alfredo Sanz.
Alfredo Sanz
SuperadministradorVisto y arreglado.
En la próxima versión estará disponible.
Alfredo Sanz
SuperadministradorLa incluiremos en el próximo samples.
De momento, te lo dejo aquí
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674FUNCTION BevelBasico()LOCAL n, oStiloWITH OBJECT TWebPage():New():lContainer := .T. // Con márgenes a los lados:lFooter := .F. // Sin pie de páginaWITH object oStilo := wStyle():New( :WO ):cId := ".bandera"WITH OBJECT :addMedia():cType := "only screen":cMaxWidth := "601px"WITH OBJECT :oStyle:cHeight := "200px !important"ENDEND:Create()END WITHWITH object oStilo := wStyle():New( :WO ):cId := ".suiza"WITH OBJECT :addMedia():cType := "only screen":cMaxWidth := "601px"WITH OBJECT :oStyle:cHeight := "50px !important"ENDEND:Create()END WITHWITH OBJECT WBevel():New( :WO ):lShadow := .F.:cTitle := "<U><B>EJEMPLOS DE BEVEL</B></U>":Create()END//------------------------------------------------------------------------------// BANDERA FRANCESA//------------------------------------------------------------------------------// TítuloWITH OBJECT WBevel():New( :WO ):cTitle := "BANDERA FRANCESA":nStyle := xc_Row // el Bevel usará toda la fila:cTitleAlign := xc_Center:Create()END// Bevel contenedor de la banderaWITH OBJECT WBevel():New( :WO ):cClass := "bandera":lShadow := .T.:nStyle := xc_Row:aWidth[ xc_L ] := 6 // La anchura será de 6/12:aOffset[ xc_L ] := 3 // Con un margen izquierdo de 1/3 (para que quede centrado)// Elementos de estilo css:oStyle:cHeight := 300 // altura de 300 pixel:oStyle:cPadding := 0 // y sin margen interno// Barra azulWITH OBJECT WBevel():New( :WO ):cClrPane := "blue" // Color de fondo:aWidth[ xc_S ] := 4 // Anchura respecto al bevel que la contine de 4/12 ( o 1/3):oStyle:cHeight := "100%" // con una altura del 100% del bevel que la contiene:Create()END// Barra BlancaWITH OBJECT WBevel():New( :WO ):aWidth[ xc_S ] := 4:Create()END// Barra RojaWITH OBJECT WBevel():New( :WO ):cClrPane := "red":aWidth[ xc_S ] := 4:oStyle:cHeight := "100%":Create()END:Create()END WITH//------------------------------------------------------------------------------// BANDERA SUIZA//------------------------------------------------------------------------------WITH OBJECT WBevel():New( :WO ):cTitle := "BANDERA SUIZA":nStyle := xc_Row:cTitleAlign := xc_Center:oStyle:cMargin_top := 20 // Margen superior para separarla de la bandera anteriro:Create()END// Bevel contenedor de la banderaWITH OBJECT WBevel():New( :WO )//:oStyle:cPadding=0:aWidth[ xc_L ] := 6:aOffset[ xc_L ] := 3// :oStyle:cMargin_top := 20:lShadow := .T.:cClrPane := "red"// Banda superiorWITH OBJECT WBevel():New( :WO ):cClass := "suiza"// Al ocupar el 100% del espacio no hace falta indicar :aWidth:oStyle:cHeight := 100:cClrPane := "red":Create()END WITH// Parte superior de la cruzWITH OBJECT WBevel():New( :WO ) // Zona de color rojo:cClass := "suiza":aWidth[ xc_S ] := 5:cClrPane := "red":oStyle:cHeight := 100:Create()END WITHWITH OBJECT WBevel():New( :WO ) // Parte de la cruz:cClass := "suiza":aWidth[ xc_S ] := 2:cClrPane := "white":oStyle:cHeight := 100:Create()END WITHWITH OBJECT WBevel():New( :WO ) // Zona de color rojo:cClass := "suiza":aWidth[ xc_S ] := 5:cClrPane := "red":oStyle:cHeight := 100:Create()END WITH//Zona media de la cruzWITH OBJECT WBevel():New( :WO ) // Zona de color rojo:cClass := "suiza":aWidth[ xc_S ] := 3:cClrPane := "red":oStyle:cHeight := 100:Create()END WITHWITH OBJECT WBevel():New( :WO ) // Parte de la cruz:cClass := "suiza":aWidth[ xc_S ] := 6:oStyle:cHeight := 100:cClrPane := "white":Create()END WITHWITH OBJECT WBevel():New( :WO ) // Zona de color rojo:cClass := "suiza":aWidth[ xc_S ] := 3:cClrPane := "red":oStyle:cHeight := 100:Create()END WITH// Parte inferior de la cruzWITH OBJECT WBevel():New( :WO ) // Zona de color rojo:cClass := "suiza":aWidth[ xc_S ] := 5:cClrPane := "red":oStyle:cHeight := 100:Create()END WITHWITH OBJECT WBevel():New( :WO ) // Parte de la cruz:cClass := "suiza":aWidth[ xc_S ] := 2:oStyle:cHeight := 100:cClrPane := "white":Create()END WITHWITH OBJECT WBevel():New( :WO ) // Zona de color rojo:cClass := "suiza":aWidth[ xc_S ] := 5:cClrPane := "red":oStyle:cHeight := 100:Create()END WITH// Banda inferiorWITH OBJECT WBevel():New( :WO ):cClass := "suiza":oStyle:cHeight := 100:cClrPane := "red":Create()END WITH:Create()END WITH//------------------------------------------------------------------------------// BANDERA CORONA DE ARAGÓN//------------------------------------------------------------------------------WITH OBJECT WBevel():New( :WO ):cTitle := "BANDERA DE LA CORONA DE ARAGÓN":cTitleAlign := xc_Center:nStyle := xc_Row:oStyle:cMargin_top := 40:Create()END// Bevel contenedor de la banderaWITH OBJECT WBevel():New( :WO ):cClass := "bandera":aWidth[ xc_L ] := 6:aOffset[ xc_L ] := 3:nStyle := xc_Row:lShadow := .T.:oStyle:cPadding := 0:oStyle:cHeight := 300FOR n := 1 TO 9WITH OBJECT WBevel():New( :WO ):cClrPane := IF( n / 2 == Int( n / 2 ), "red", "yellow" ) // Si es par, en rojo, impar en amarillo:oStyle:cHeight := "11.11%":Create()ENDNEXT:Create()END//------------------------------------------------------------------------------// BANDERA DE JAPÓN//------------------------------------------------------------------------------WITH OBJECT WBevel():New( :WO ):cTitle := "BANDERA DE JAPÓN":cTitleAlign := xc_Center:nStyle := xc_Row:oStyle:cMargin_top := 20:Create()END// Bevel contenedor de la banderaWITH OBJECT WBevel():New( :WO ):cClass := "bandera":aWidth[ xc_L ] := 6:aOffset[ xc_L ] := 3:nStyle := xc_Row:lShadow := .T.:oStyle:cHeight := 300:lHcenter := .T. //Los elementos que contiene se alinearán al centro horizontalmente:lValing := .T. //Los elementos que contiene se alinearán al centro verticalmente//Punto rojo ( como su contenedor tiene lHcenter y lValing, nos saldrá en el centro de la banderaWITH OBJECT WBevel():New( :WO ):oStyle:cHeight := 140 // altura:oStyle:cWidth := 140 // anchura:oStyle:cMargin := 0 // Sin márgenes:oStyle:cBackground_color := "red !important" //Color:oStyle:cBorder_radius := "50%" // radio del 50% para hacer el bevel redondo:Create()END:Create()END//------------------------------------------------------------------------------// BANDERA MÉXICO//------------------------------------------------------------------------------WITH OBJECT WBevel():New( :WO ):cTitle := "BANDERA DE MÉXICO":cTitleAlign := xc_Center:nStyle := xc_Row:oStyle:cMargin_top := 20:Create()ENDWITH OBJECT WBevel():New( :WO ):cClass := "bandera":aWidth[ xc_L ] := 6:aOffset[ xc_L ] := 3:nStyle := xc_Row:lShadow := .T.:oStyle:cPadding := 0:oStyle:cHeight := 300WITH OBJECT WBevel():New( :WO ):aWidth[ xc_S ] := 4:cClrPane := "green":oStyle:cHeight := "100%":Create()ENDWITH OBJECT WBevel():New( :WO ):aWidth[ xc_S ] := 4:lHcenter := .T.:lValing := .T.:oStyle:cHeight := "100%"WITH OBJECT WImage():New( :WO ):cImage := "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Coat_of_arms_of_Mexico.svg/245px-Coat_of_arms_of_Mexico.svg.png":Create()END WITH:Create()ENDWITH OBJECT WBevel():New( :WO ):aWidth[ xc_S ] := 4:cClrPane := "red":oStyle:cHeight := "100%":Create()END:Create()END//------------------------------------------------------------------------------// BANDERA CHINA//------------------------------------------------------------------------------WITH OBJECT WBevel():New( :WO ):cTitle := "BANDERA DE CHINA":cTitleAlign := xc_Center:nStyle := xc_Row:oStyle:cMargin_top := 20:Create()ENDWITH OBJECT WBevel():New( :WO ):cClass := "bandera":aWidth[ xc_L ] := 6:aOffset[ xc_L ] := 3:nStyle := xc_Row:lShadow := .T.:oStyle:cPadding := 0:oStyle:cHeight := 300//Zona con las estrellasWITH OBJECT WBevel():New( :WO ):aWidth[ xc_S ] := 5:cClrPane := "red":oStyle:cHeight := "50%" // La mitad de la altura del contenedorWITH OBJECT WImage():New( :WO ):oStyle:cPadding := 6 // Un margen interno de 6 puntos:oStyle:cHeight := "100%" // una altura del 100% de su contenedor:oStyle:cWidth := "auto" // Anchura automática respecto a la altura:cImage := "https://www.clipartmax.com/png/full/226-2262107_open-china-flag-yellow-stars.png":Create()END WITH:Create()END// Banda superior sin estrellasWITH OBJECT WBevel():New( :WO ):aWidth[ xc_S ] := 7:cClrPane := "red":oStyle:cHeight := "50%":Create()END// Banda inferiorWITH OBJECT WBevel():New( :WO ):cClrPane := "red":oStyle:cHeight := "50%":Create()END:Create()END////------------------------------------------------------------------------------// IKURRIÑA//------------------------------------------------------------------------------WITH OBJECT WBevel():New( :WO ):cTitle := "IKURRIÑA":cTitleAlign := xc_Center:nStyle := xc_Row:oStyle:cMargin_top := 20:Create()ENDWITH OBJECT WBevel():New( :WO ):cClass := "bandera":aWidth[ xc_L ] := 6:aOffset[ xc_L ] := 3:nStyle := xc_Row:lShadow := .T.:oStyle:cPadding = 0:oStyle:cHeight = 300WITH OBJECT WBevel():New( :WO ) // Cuarto superior izquierdo:cClrPane := "red":oStyle:cHeight := "41.67%" // En lugar de usar materialize (:aWidth) usamos % directo:oStyle:cWidth := "46%":oStyle:cPadding := 0WITH OBJECT WImage():New( :WO ):cImage := "https://fractality.ddns.net:44444/images/cuartillo.png":oStyle:cHeight := "100%" // una altura del 100% de su contenedor:oStyle:cWidth := "100%" // Anchura automática respecto a la altura:Create()END WITH:Create()END WITHWITH OBJECT WBevel():New( :WO ) // aspa superior de la cruz:cClrPane := "white":oStyle:cHeight := "41.67%":oStyle:cWidth := "8%":Create()END WITHWITH OBJECT WBevel():New( :WO ) // cuarto superior derecho:cClrPane := "red":oStyle:cHeight := "41.67%":oStyle:cWidth := "46%":oStyle:cPadding := 0WITH OBJECT WImage():New( :WO ):cImage := "https://fractality.ddns.net:44444/images/cuartillo.png":oStyle:cHeight := "100%":oStyle:cWidth := "100%":oStyle:cTransform := "rotate(180deg)" // rotado:oStyle:cTransform := "scaleX(-1)" // y girado:Create()END WITH:Create()END WITHWITH OBJECT WBevel():New( :WO ) // parte central de la cruz:cClrPane := "white":oStyle:cHeight := "16.66%":Create()END WITHWITH OBJECT WBevel():New( :WO ) // Inferior Izquierda:cClrPane := "red":oStyle:cHeight := "41.67%":oStyle:cWidth := "46%":oStyle:cPadding := 0WITH OBJECT WImage():New( :WO ):cImage := "https://fractality.ddns.net:44444/images/cuartillo.png":oStyle:cHeight := "100%":oStyle:cWidth := "100%":oStyle:cTransform := "rotate(180deg)":oStyle:cTransform := "scaleX(-1)":Create()END WITH:Create()ENDWITH OBJECT WBevel():New( :WO ) // Aspa inferio de la cruz:cClrPane := "white":oStyle:cHeight := "41.67%":oStyle:cWidth := "8%":Create()END WITHWITH OBJECT WBevel():New( :WO ) // Inferior derecha:cClrPane := "red":oStyle:cHeight := "41.67%":oStyle:cWidth := "46%":oStyle:cPadding := 0WITH OBJECT WImage():New( :WO ):cImage := "https://fractality.ddns.net:44444/images/cuartillo.png":oStyle:cHeight := "100%" // una altura del 100% de su contenedor:oStyle:cWidth := "100%" // Anchura automática respecto a la altura:oStyle:cTransform := "rotate(180deg)":Create()END WITH:Create()END:Create()END//------------------------------------------------------------------------------// BANDERA CANARIA//------------------------------------------------------------------------------WITH OBJECT WBevel():New( :WO ):cTitle := "BANDERA DE CANARIAS":cTitleAlign := xc_Center:nStyle := xc_Row:oStyle:cMargin_top := 20:Create()ENDWITH OBJECT WBevel():New( :WO ):cClass := "bandera":aWidth[ xc_L ] := 6:aOffset[ xc_L ] := 3:nStyle := xc_Row:lShadow := .T.:oStyle:cPadding := 0:oStyle:cHeight := 300WITH OBJECT WBevel():New( :WO ):aWidth[ xc_S ] := 4:cClrPane := "white":oStyle:cHeight := "100%":Create()ENDWITH OBJECT WBevel():New( :WO ):aWidth[ xc_S ] := 4:oStyle:cBackground_color := "#1665a2 !important" // Para que prevalezca este color sobre lo indicado en el css:lHcenter := .T.:lValing := .T.:oStyle:cHeight := "100%"WITH OBJECT WImage():New( :WO ):cImage := "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/Canary_Islands_CoA.svg/1024px-Canary_Islands_CoA.svg.png":Create()END WITH:Create()ENDWITH OBJECT WBevel():New( :WO ):aWidth[ xc_S ] := 4:oStyle:cBackground_color := "#f8c600 !important":oStyle:cHeight := "100%":Create()END:Create()END//------------------------------------------------------------------------------// MURCIA//------------------------------------------------------------------------------WITH OBJECT WBevel():New( :WO ):cTitle := "MURCIA":cTitleAlign := xc_Center:nStyle := xc_Row:oStyle:cMargin_top := 20:Create()ENDWITH OBJECT WBevel():New( :WO ):cClass := "bandera":aWidth[ xc_L ] := 6:aOffset[ xc_L ] := 3:nStyle := xc_Row:lShadow := .T.:cClrPane := "red":oStyle:cPadding := 0:oStyle:cHeight := 300WITH OBJECT WBevel():New( :WO ) // Creamos un bevel dentro del principal de 3/4 y 40% de altura para los castillos:cClrPane := "red":aWidth[ xc_S ] := 3:oStyle:cHeight := "40%":oStyle:cPadding := 0FOR n = 1 TO 4 // Ponemos los 4 castillosWITH OBJECT WBevel():New( :WO ) // Zona de color rojo:aWidth[ xc_S ] := 6 // la mitad de ancho cada uno:oStyle:cHeight := "50%" // Y la mitad de alto:cClrPane := "red":oStyle:cPadding := 0WITH OBJECT WImage():New( :WO ):cImage := "https://fractality.ddns.net:44444/images/castillo.png":oStyle:cHeight := "100%" // una altura del 100% de su contenedor:oStyle:cWidth := "100%" // Anchura automática respecto a la altura:oStyle:cMax_width := 86:oStyle:cMax_Height := 86:oStyle:cPadding := 10:Create()END WITH:Create()END WITHNEXT:Create()END WITHWITH OBJECT WBevel():New( :WO ) // Zona de color rojo:oStyle:cHeight := "40%":cClrPane := "red":aWidth[ xc_S ] := 9:Create()ENDWITH OBJECT WBevel():New( :WO ) // Zona de color rojo fila media:oStyle:cHeight = "27%":cClrPane = "red":aWidth[ xc_S ] := 12:Create()ENDWITH OBJECT WBevel():New( :WO ) // Zona de color rojo fila inferior:oStyle:cHeight := "33%":cClrPane := "red":aWidth[ xc_S ] := 8:Create()ENDWITH OBJECT WBevel():New( :WO ) // Zona inferior derecha de las coronas:oStyle:cHeight := "33%":cClrPane := "red":aWidth[ xc_S ] := 4:oStyle:cDisplay := "flex":oStyle:cAlign_items := "flex-end" // Para ajustar a la derechaWITH OBJECT WImage():New( :WO ):cImage := "https://fractality.ddns.net:44444/images/coronas.png":oStyle:cHeight := "100%" // una altura del 100% de su contenedor:oStyle:cWidth := "auto" // Anchura automática respecto a la altura:oStyle:cMargin_left := "auto":oStyle:cPadding := 10:Create()END WITH:Create()END:Create()ENDoCgi:SendPage( :Create() )END WPAGERETURN NILAlfredo Sanz
SuperadministradorSí, la verdad es que las ventanas modales no se llevan muy bien con el sistema de validación html.
Estamos trabajando sobre uno nuevo, que pronto estará disponible.
Contenido no disponible.
Por favor, acepta las cookies haciendo clic en este avisoAlfredo Sanz
SuperadministradorAlfredo Sanz
SuperadministradorHoola!
Tal y como está ahora, el :aparams lo puedes poner en cada :addCol() de esta forma
12345678910with object :AddCol() AS wItemColBrowse:cid := "para_ampliar_grupo":cheadtext := "":aParams := {{"combogrupo","#combogrupo"}}:calign := xc_Center:cCursor := "pointer":cOnClick := "amplia_grupo":nwidth := 5:cAjaxBevel := "nflcargo"end withPero ya lo hemos modificado para que tenga en cuenta los aparams "generales" para todo el browse que se definen al definir el browse
12345WITH OBJECT obrowse := WArrayBrowse():New(obevel_browse):cId := "browse_modal_grupos":nStyle := xc_Striped:nIndexValue := 1:aparams := {{"combogrupo","#combogrupo"}}En la próxima versión tendrás disponible este cambio.
Ojo: En caso de que se defina el mismo nombre de aparam tanto al definir el browse como dentro de una columna, tiene preferencia el valor asignado en la columna
En cuanto al error de javascript formSelect, al definir el combo, tienes que cambiar la línea del :lReload := .t. por
1:lReLoad := (bevel_padre = nil)De esta forma hacemos que fuerce la recreación del control, pero solo cuando estamos generando el combo a través de una llamada ajax (no tiene bevel padre), cuando lo generamos la primera vez, al estar dentro del código inicial no hay que hacerlo
Alfredo Sanz
SuperadministradorHola!
Esa versión de Xailer es muy vieja.
Te recomiendo que uses la Versión 6 personal
Alfredo Sanz
SuperadministradorBusca esta línea en tu httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
Asegúrate de que no tiene la # delante
Si la tiene, quítasela y reinicia apache
Ya me dirás si te lo soluciona
Alfredo Sanz
SuperadministradorHola!
Qué versión de Xailer estás usando
Alfredo Sanz
SuperadministradorVaya,
Ejecuta el nefele wizard para que te actualice la librería, que me da la sensación de que no estás usando la última versión
-
Esta respuesta fue modificada 3 años, 3 meses por
-
AutorEntradas