mod_harbour
Moderator: Moderatoren
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
mod_harbour
Hallo,
ich denke mod harbour eröffnet uns CLIPPER Entwickler neu Perspektiven.
mod_harbour ist ein Erweiterungsmodul für Apache, mit dem man PRGs direkt im Web ausführen kann, ohne EXE-Dateien usw. erstellen zu müssen.
mod_harbour wird einfach als Erweiterung auf einem Apache-Server installiert.
Der volle Funktionsumfang von Harbour kann genutzt werden somit kann man DBF, ADS,SQL ohne Probleme nutzen. Die Webseiten werden sehr schnell aufgebaut.
mod harbour ist eine serverseitig Programmiersprache zum Erstellen von Websites. Die Ausgabe von mod - harbour wird an den Browser geschickt. HTML und Javascript wird hier unterstützt.
Live-Demo
https://harbour.fourtech.es/modharbour_ ... /index.prg
( email@email.com PW 1234 oder einfach anmelden )
mod_harbour völlig kostenlos und Open Source.
Mit lieben Grüßen
Otto
ich denke mod harbour eröffnet uns CLIPPER Entwickler neu Perspektiven.
mod_harbour ist ein Erweiterungsmodul für Apache, mit dem man PRGs direkt im Web ausführen kann, ohne EXE-Dateien usw. erstellen zu müssen.
mod_harbour wird einfach als Erweiterung auf einem Apache-Server installiert.
Der volle Funktionsumfang von Harbour kann genutzt werden somit kann man DBF, ADS,SQL ohne Probleme nutzen. Die Webseiten werden sehr schnell aufgebaut.
mod harbour ist eine serverseitig Programmiersprache zum Erstellen von Websites. Die Ausgabe von mod - harbour wird an den Browser geschickt. HTML und Javascript wird hier unterstützt.
Live-Demo
https://harbour.fourtech.es/modharbour_ ... /index.prg
( email@email.com PW 1234 oder einfach anmelden )
mod_harbour völlig kostenlos und Open Source.
Mit lieben Grüßen
Otto
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: mod_harbour
Hallo Otto
Sieht interessant aus. Arbeitest du damit? Lassen sich dlls verwenden( funktionsaufrufe in c dlls z.b. List&Label)?
Sieht interessant aus. Arbeitest du damit? Lassen sich dlls verwenden( funktionsaufrufe in c dlls z.b. List&Label)?
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: mod_harbour
Die Seite sieht gut aus, ich vermute das ist unabhängig von der Anwendung, kannst du dazu was sagen wie du die gemacht hast ? (Framework, Tool etc.)
Gruß
Hubert
Hubert
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
Hallo Carlo, hallo Hubert,
ich habe schon einige Sachen probiert.
Für das Front-End wird html und Javascript verwendet. Das Back-End ist Harbour.
Ich verwende Bootstrap Studio zum Designen des Front-Ends.
Hier bereite ich eine CSV Datei mit Harbour vor. Der Quellcode ist sehr einfach. Die Umsatzdatei ist 490000 Zeilen groß.
Die Geschwindigkeit ist sehr gut.
Ob man DLLs einbinden kann muss ich selbst nachfragen.
Mit freundlichem Gruß
Otto
ich habe schon einige Sachen probiert.
Für das Front-End wird html und Javascript verwendet. Das Back-End ist Harbour.
Ich verwende Bootstrap Studio zum Designen des Front-Ends.
Hier bereite ich eine CSV Datei mit Harbour vor. Der Quellcode ist sehr einfach. Die Umsatzdatei ist 490000 Zeilen groß.
Die Geschwindigkeit ist sehr gut.
Ob man DLLs einbinden kann muss ich selbst nachfragen.
Mit freundlichem Gruß
Otto
REQUEST DBFCDX
REQUEST DBFFPT
function Main()
local cFileNoExtention := "report"
SET EXCLUSIVE OFF
//csv_report_erstellen( cFileNoExtention )
TEMPLATE
<html lang="en">
<head>
<title>Panels</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstr ... ap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/j ... "></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstr ... "></script>
<script src="https://fivetechsoft.github.io/xcloud/s ... "></script>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.loader {
margin: 70px;
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid #3498db;
width: 120px;
height: 120px;
-webkit-animation: spin 2s linear infinite; /* Safari */
animation: spin 2s linear infinite;
}
/* Safari */
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
</head>
<body>
<div class="container">
<div class="loader"></div>
</div>
ENDTEXT
csv_report_erstellen( cFileNoExtention )
TEMPLATE
<div class="container">
<script>location.replace("https://my3zinnen.com/test/reports/basi ... /index.php");</script>
</div>
</body>
ENDTEXT
return nil
//----------------------------------------------------------------------------//
INIT PROCEDURE PrgInit
SET CENTURY ON
SET EPOCH TO YEAR(DATE())-98
SET DELETED ON
SET EXCLUSIVE OFF
REQUEST HB_Lang_DE
REQUEST HB_CODEPAGE_DEWIN
HB_LangSelect("DE")
// HB_SetCodePage("DEWIN")
SET DATE TO GERMAN
// SetHandleCount(205)
rddsetdefault( "DBFCDX" )
//SetGetColorFocus()
EXTERN DESCEND
RETURN
//----------------------------------------------------------------------------//
function csv_report_erstellen( cFileNoExtention )
local cline := ""
local cheader := "customerName;productName;productLine;orderDate;orderDay;orderMonth;orderYear;orderQuarter;dollar_sales"
local n := 0
local aTemp := {}
local ISeek := 0
local aFeld := {}
*----------------------------------------------------------
cline += cheader + CRLF
use ( "c:\xampp\htdocs\samples\test\umsatz.dbf" ) new SHARED
do while .not. eof()
if umsatz->wert > 0
if umsatz->datum > ctod("01.01.2019")
ISeek := ASCAN( aTemp, {|aVal| aVal[1] == Alltrim( umsatz->name) + " " + ALLTRIM(umsatz->ort) })
if ISeek != 0
aTemp[ ISeek, 2 ] += umsatz->wert
else
aadd( aTemp ,{Alltrim( umsatz->name) + " " + ALLTRIM(umsatz->ort), umsatz->wert } )
endif
endif
endif
skip
enddo
use
TEMPLATE PARAMS aTemp
<?prg str( len(aTemp)) ?>
ENDTEXT
FOR I := 1 to len(aTemp)
cline += aTemp[I,1 ] + " ; ; ; ; ; ; ; ; " + str( aTemp[I,2 ] ) + CRLF
if I > 150
exit
endif
next
hb_memowrit( "c:\xampp\htdocs\test\databases\customer_product_dollarsales2.csv", cLine, .f. )
return nil
//----------------------------------------------------------------------------//
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
Hallo Hubert,
DLLs sollte man einbinden können.
Otto
DLLs sollte man einbinden können.
LGYes!
Please review mod_harbour/samples/mysql.prg source code
We use Harbour's dynamic linking
Otto
Code: Alles auswählen
#define HB_DYN_CALLCONV_CDECL 0x0000000 // C default
#define HB_DYN_CTYPE_LONG_UNSIGNED 0x0000014
#define HB_DYN_CTYPE_CHAR_PTR 0x0000101
#define HB_DYN_CTYPE_LONG 0x0000004
#define HB_DYN_CTYPE_INT 0x0000003
#define HB_DYN_CTYPE_LLONG_UNSIGNED 0x0000015
#define NULL 0x0000000
static pLib, hMySQL, hConnection, hMyRes
//----------------------------------------------------------------//
function Main()
local nRetVal, n, m, hField, hRow
pLib = hb_LibLoad( "/usr/lib/x86_64-linux-gnu/libmysqlclient.so" ) // libmysqlclient.so.20 for mariaDB
hMySQL = mysql_init()
?? "pLib = " + ValType( pLib ) + ;
If( ValType( pLib ) == "P", " (MySQL library properly loaded)", " (MySQL library not found)" )
? "hMySQL = " + Str( hMySQL ) + " (MySQL library " + ;
If( hMySQL != 0, "initalized)", "failed to initialize)" )
? If( hMySQL != 0, "MySQL version: " + mysql_get_server_info( hMySQL ), "" )
?
? "Connection: "
?? hConnection := mysql_real_connect( "127.0.0.1", "harbour", "password", "dbHarbour", 3306 )
?? If( hConnection != hMySQL, " (Failed connection)", " (Successfull connection)" )
if hConnection != 0
nRetVal = mysql_query( hConnection, "select * from users" )
? "MySQL query " + If( nRetVal == 0, "succeeded", "failed" )
if nRetVal != 0
? "error: " + Str( nRetVal )
endif
endif
if hConnection != 0
hMyRes = mysql_store_result( hConnection )
? "MySQL store result " + If( hMyRes != 0, "succeeded", "failed" )
?
endif
if hMyRes != 0
? "Number of rows: " + Str( mysql_num_rows( hMyRes ) )
endif
if hMyRes != 0
? "Number of fields: " + Str( mysql_num_fields( hMyRes ) )
?? "<table border=1 cellspacing=0>"
?? "<tr>"
for n = 1 to mysql_num_fields( hMyRes )
hField = mysql_fetch_field( hMyRes )
if hField != 0
?? "<td>" + PtrToStr( hField, 0 ) + "</td>"
endif
next
?? "</tr>"
for n = 1 to mysql_num_rows( hMyRes )
if ( hRow := mysql_fetch_row( hMyRes) ) != 0
?? "<tr>"
for m = 1 to mysql_num_fields( hMyRes )
?? "<td>" + AllTrim( PtrToStr( hRow, m - 1 ) ) + "</td>"
next
?? "</tr>"
endif
next
?? "</table>"
endif
mysql_free_result( hMyRes )
mysql_close( hMySQL )
? "MySQL library properly freed: "
?? HB_LibFree( pLib )
return nil
//----------------------------------------------------------------//
function mysql_init()
return hb_DynCall( { "mysql_init", pLib, hb_bitOr( HB_DYN_CTYPE_LLONG_UNSIGNED, HB_DYN_CALLCONV_CDECL ) }, NULL )
//----------------------------------------------------------------//
function mysql_close( hMySQL )
return hb_DynCall( { "mysql_close", pLib, HB_DYN_CALLCONV_CDECL, HB_DYN_CTYPE_LLONG_UNSIGNED }, hMySQL )
//----------------------------------------------------------------//
function mysql_real_connect( cServer, cUserName, cPassword, cDataBaseName, nPort )
if nPort == nil
nPort = 3306
endif
return hb_DynCall( { "mysql_real_connect", pLib, hb_bitOr( HB_DYN_CTYPE_LLONG_UNSIGNED, HB_DYN_CALLCONV_CDECL ),;
HB_DYN_CTYPE_LLONG_UNSIGNED,;
HB_DYN_CTYPE_CHAR_PTR, HB_DYN_CTYPE_CHAR_PTR, HB_DYN_CTYPE_CHAR_PTR, HB_DYN_CTYPE_CHAR_PTR,;
HB_DYN_CTYPE_LONG, HB_DYN_CTYPE_LONG, HB_DYN_CTYPE_LONG },;
hMySQL, cServer, cUserName, cPassword, cDataBaseName, nPort, 0, 0 )
//----------------------------------------------------------------//
function mysql_query( hConnect, cQuery )
return hb_DynCall( { "mysql_query", pLib, hb_bitOr( HB_DYN_CTYPE_INT, HB_DYN_CALLCONV_CDECL ),;
HB_DYN_CTYPE_LLONG_UNSIGNED, HB_DYN_CTYPE_CHAR_PTR },;
hConnect, cQuery )
//----------------------------------------------------------------//
function mysql_use_result( hMySQL )
return hb_DynCall( { "mysql_use_result", pLib, hb_bitOr( HB_DYN_CTYPE_LLONG_UNSIGNED, HB_DYN_CALLCONV_CDECL ),;
HB_DYN_CTYPE_LLONG_UNSIGNED }, hMySQL )
//----------------------------------------------------------------//
function mysql_store_result( hMySQL )
return hb_DynCall( { "mysql_store_result", pLib, hb_bitOr( HB_DYN_CTYPE_LLONG_UNSIGNED, HB_DYN_CALLCONV_CDECL ),;
HB_DYN_CTYPE_LLONG_UNSIGNED }, hMySQL )
//----------------------------------------------------------------//
function mysql_free_result( hMyRes)
return hb_DynCall( { "mysql_free_result", pLib, HB_DYN_CALLCONV_CDECL, HB_DYN_CTYPE_LLONG_UNSIGNED }, hMyRes )
//----------------------------------------------------------------//
function mysql_fetch_row( hMyRes )
return hb_DynCall( { "mysql_fetch_row", pLib, hb_bitOr( HB_DYN_CTYPE_LLONG_UNSIGNED, HB_DYN_CALLCONV_CDECL ) }, hMyRes )
//----------------------------------------------------------------//
function mysql_num_rows( hMyRes )
return hb_DynCall( { "mysql_num_rows", pLib, hb_bitOr( HB_DYN_CALLCONV_CDECL, HB_DYN_CTYPE_LLONG_UNSIGNED ),;
HB_DYN_CTYPE_LLONG_UNSIGNED }, hMyRes )
//----------------------------------------------------------------//
function mysql_num_fields( hMyRes )
return hb_DynCall( { "mysql_num_fields", pLib, hb_bitOr( HB_DYN_CALLCONV_CDECL, HB_DYN_CTYPE_LONG_UNSIGNED ),;
HB_DYN_CTYPE_LLONG_UNSIGNED }, hMyRes )
//----------------------------------------------------------------//
function mysql_fetch_field( hMyRes )
return hb_DynCall( { "mysql_fetch_field", pLib, hb_bitOr( HB_DYN_CALLCONV_CDECL, HB_DYN_CTYPE_LLONG_UNSIGNED ),;
HB_DYN_CTYPE_LLONG_UNSIGNED }, hMyRes )
//----------------------------------------------------------------//
function mysql_get_server_info( hMySQL )
return hb_DynCall( { "mysql_get_server_info", pLib, hb_bitOr( HB_DYN_CTYPE_CHAR_PTR, HB_DYN_CALLCONV_CDECL ), ;
HB_DYN_CTYPE_LLONG_UNSIGNED }, hMySql )
//----------------------------------------------------------------//
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
Hallo Hubert, hallo Carlos,
ich habe hier ein paar Screenshots gemacht, wie man eine einfache responsive Webseite macht.
1. zuerst das Ergebnis - fully responsive - great looking
Video
https://mybergland.com/fwforum/bootstrap1.gif
2. ich verwende Bootstap Studio zum Designen des Layouts
Video
https://mybergland.com/fwforum/bootstrap2.gif
3. Programmieren mit Harbour
Video
https://mybergland.com/fwforum/bootstrap3.gif
Liebe Grüße
Otto
ich habe hier ein paar Screenshots gemacht, wie man eine einfache responsive Webseite macht.
1. zuerst das Ergebnis - fully responsive - great looking
Video
https://mybergland.com/fwforum/bootstrap1.gif
2. ich verwende Bootstap Studio zum Designen des Layouts
Video
https://mybergland.com/fwforum/bootstrap2.gif
3. Programmieren mit Harbour
Video
https://mybergland.com/fwforum/bootstrap3.gif
Liebe Grüße
Otto
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: mod_harbour
Hallo Otto
Danke für deine Ausführungen.
die Programmierung des Frontends mit Bootstrap, JQuery und der ganzen Bande usw. ist eigentlich kein Problem.
Da gibt es viele Leute und Tools die da aktiv mithelfen können.
Das Backend, der Server ist für mich momentan der wichtigere Punkt. Arbeitets du für produktive grössere System mit mod_harbour?
Danke für deine Ausführungen.
die Programmierung des Frontends mit Bootstrap, JQuery und der ganzen Bande usw. ist eigentlich kein Problem.
Da gibt es viele Leute und Tools die da aktiv mithelfen können.
Das Backend, der Server ist für mich momentan der wichtigere Punkt. Arbeitets du für produktive grössere System mit mod_harbour?
Valar Morghulis
Gruss Carlo
Gruss Carlo
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
Hallo Carlos,
genau das ist ja auch mein Problem.
Mit mod Harbour wird nun praktisch PHP durch Harbour/Clipper ersetzt und man fühlt sich dadurch gleich zuhause.
Bei PHP is für einen Clipper-Programmierer alles neu. Alleine beim zusammenführen von 2 Strings mit einem "Punkt" bin ich schon eine ganze Zeit beschäftigt gewesen.
mod harbour -
Man hat hier am Backend Harbour-Code.
Im Code wird dann einfach mit
TEMPLATE PARAMS cText oder BLOCKS PARAM cText
auf HTML umgeschaltet.
Im HTML Code verwendet man dann <prg return cText > oder {{ cText }} .
Innerhalt von HTML wird dann mit <script /script> zw. HTML und javascript umgeschaltet.
Ich würde gerne mit einem kleinen, einfachen Programm starten.
Einfach eine DBF - Datei - Notiz mit 2 Feldern: mit einem Titelfeld und einem Memofeld.
Ich bin noch am Suchen nach einem passenden WYSIWYG Editor in Javascript, den man einbinden kann.
Kennst du da vielleicht einen?
Liebe Grüße
Otto
genau das ist ja auch mein Problem.
Mit mod Harbour wird nun praktisch PHP durch Harbour/Clipper ersetzt und man fühlt sich dadurch gleich zuhause.
Bei PHP is für einen Clipper-Programmierer alles neu. Alleine beim zusammenführen von 2 Strings mit einem "Punkt" bin ich schon eine ganze Zeit beschäftigt gewesen.
mod harbour -
Man hat hier am Backend Harbour-Code.
Im Code wird dann einfach mit
TEMPLATE PARAMS cText oder BLOCKS PARAM cText
auf HTML umgeschaltet.
Im HTML Code verwendet man dann <prg return cText > oder {{ cText }} .
Innerhalt von HTML wird dann mit <script /script> zw. HTML und javascript umgeschaltet.
Ich würde gerne mit einem kleinen, einfachen Programm starten.
Einfach eine DBF - Datei - Notiz mit 2 Feldern: mit einem Titelfeld und einem Memofeld.
Ich bin noch am Suchen nach einem passenden WYSIWYG Editor in Javascript, den man einbinden kann.
Kennst du da vielleicht einen?
Liebe Grüße
Otto
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: mod_harbour
Hallo OttoKennst du da vielleicht einen?
ja natürlich. Schau mal unter:
https://summernote.org/
der ist nicht schlecht. Unter der freizügigen MIT Lizenz.
Beim Aufbau des Frontends würde ich Links wie du Sie verwendest
absolut konsequent vermeiden und nur Teile verwenden die du auf deinem eigenen Server hostest. Nur dann bist du sicher dass jederzeit die Tools geladen werden mit welcher du die Seite gebaut hast, die Tools auch immer verfügbar sind und du beim Kunden keine Probleme bekommst weil meist Links bezw. Downloads für den Seitenaufbau ab fremden Servern sowieso strikte Verboten sind. Oder bei Intranet Anwendungen gar nicht möglich sind.<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstr ... ap.min.css">
Valar Morghulis
Gruss Carlo
Gruss Carlo
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
Hallo Carlos,
hast du selbst Erfahrung mit Summernotes.
Ich habe den Editor nun eingebunden und einige Tests gemacht.
Wie funktioniert das mit den Bildern. Es schaut so aus, als ob diese direkt im Dokument gespeichert werden. Kann man die auch linken.
Mit bestem Dank im voraus und freundlichem Gruß
Otto
hast du selbst Erfahrung mit Summernotes.
Ich habe den Editor nun eingebunden und einige Tests gemacht.
Wie funktioniert das mit den Bildern. Es schaut so aus, als ob diese direkt im Dokument gespeichert werden. Kann man die auch linken.
Mit bestem Dank im voraus und freundlichem Gruß
Otto
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: mod_harbour
Hallo Otto
ich setzte Summernotes als Modul ein. Einige der Möglichkeiten der Toolbar habe ich dekativiert.
Wenn du in der Grundeinstellung Bilder in den Text einfügst werden diese base64 codiert und in den Text eingefügt.
z.B für Notizen ist dies die einfachste Lösung.
Man kann die Bilder auch linken. Dazu musst du deinen eigenen Scriptcode und ServerCode schreiben der dir das Bild zum Server schickt und den Link zusammenbaut. Der Punkt dabei ist du musst die Filenamen "einmalig" machen. Das Linken der Bilder bedeutet einigen zusätzlichen Aufwand zur Verwaltung der Bilder und Auslieferung der Bilder an den Client. Da diese dann als Link eingebunden sind musst du auch noch die Zugriffsrechte zum Bild verwalten. Dies würde ich nur machen wenn dies absolut nötig ist ....
Ein anderer Weg ist der auf dem Server die base64 codierten Bilder bei Bedarf zu extahieren.
Beachten musst du noch dass du die Grösse der Bilder begrenzt. Wenn der User dann JPG mit 45MB einfügen will gerät dann einiges aus dem Takt.
ich setzte Summernotes als Modul ein. Einige der Möglichkeiten der Toolbar habe ich dekativiert.
Wenn du in der Grundeinstellung Bilder in den Text einfügst werden diese base64 codiert und in den Text eingefügt.
z.B für Notizen ist dies die einfachste Lösung.
Man kann die Bilder auch linken. Dazu musst du deinen eigenen Scriptcode und ServerCode schreiben der dir das Bild zum Server schickt und den Link zusammenbaut. Der Punkt dabei ist du musst die Filenamen "einmalig" machen. Das Linken der Bilder bedeutet einigen zusätzlichen Aufwand zur Verwaltung der Bilder und Auslieferung der Bilder an den Client. Da diese dann als Link eingebunden sind musst du auch noch die Zugriffsrechte zum Bild verwalten. Dies würde ich nur machen wenn dies absolut nötig ist ....
Ein anderer Weg ist der auf dem Server die base64 codierten Bilder bei Bedarf zu extahieren.
Beachten musst du noch dass du die Grösse der Bilder begrenzt. Wenn der User dann JPG mit 45MB einfügen will gerät dann einiges aus dem Takt.
Valar Morghulis
Gruss Carlo
Gruss Carlo
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
Hallo Carlos,
ich habe heute den ganzen Tag mit verschiedenen WYSIWYG Textprogrammen experimentiert.
Ich habe mich dann für Jodit entschieden.
Heute war ein richtig produktiver Tag. Ich kann nun mit dem Editor Daten von Textdateien oder DBF- memo-Feldern lesen, Bilder mit cut & paste einfügen und alles zurückspeichern.
Mit freundlichem Gruß
Otto
ich habe heute den ganzen Tag mit verschiedenen WYSIWYG Textprogrammen experimentiert.
Ich habe mich dann für Jodit entschieden.
Heute war ein richtig produktiver Tag. Ich kann nun mit dem Editor Daten von Textdateien oder DBF- memo-Feldern lesen, Bilder mit cut & paste einfügen und alles zurückspeichern.
Mit freundlichem Gruß
Otto
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
16 Zeilen Quellcode
// WYSIWYG editor
#define FILELOG AP_GETENV( 'DOCUMENT_ROOT' ) + AP_GETENV( 'PATH_APP' ) + '/samples/document.txt'
function Main()
local cText := "<h2>Data from Harbour</h2><h1>This is a Heading</h1><p>This is a paragraph.</p>"
cText := STRTRAN( MemoRead( FILELOG ), CHR(34), "'" )
TEMPLATE PARAMS cText
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jodit/3.1.39/jodit.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/jodit/3.1.39/jodit.min.js"></script>
<form action="postpairs.prg" method="post">
<textarea id="editor" name="editor"></textarea>
<input type="submit" value="Send data">
</form>
<script>
var cText = "<?prg return cText ?>"
var editor = new Jodit('#editor')
editor.value = cText;
</script>
ENDTEXT
return nil
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: mod_harbour
Hallo Otto
mit Jodit hatte ich auch experimentiert. Konnte aber die benötigten Anforderungen damit nicht abdecken. Bei Summernote bin ich dann hängen geblieben.
Deine Muster sehen schön aus. Du hast mit Jodit auch mit wenig Aufwand einen Editor. In deinen 16 Zeilen Sourcecode fehlen dir noch sehr wichtige Dinge wie Sessionmanagement, Zugriffsrechte usw. Bei den Bildern die du einsetzt hast du nur ein Link zum Originalbild d.h. jedesmal wenn du den Text aufrufts wird das Bild vom Originalserver geladen. Solche externe Links sind in meiner Umgebung ein "no go" so ist z.B. auch wenn das Bild auf dem Original-Server noch vorhanden ist im Intranet kein Zugriff darauf möglich. Ich muss die Bildgrösse einschränken und das Bild entweder im Text als Base64 codierter String speichern oder auf den Server Uploaden und dann ein intern vorhandener Link im Text einsetzten.
Du solltest dir noch Umfassende Gedanken über externe vs. interne Links und deren Möglichkeiten und Folgen machen und entscheiden wie du künftig arbeiten willst.
Verwendet du z.B. den Link:
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jodit/3.1.39/jodit.min.css">
Arbeitet dein Programm nur wenn die Datei bei dieser externen Stelle vorhanden ist .... du bist davon abhängig, wirst sicher getrackt ....
und vorallen sind externe Links auch immer ein nicht zu unterschätzender Angriffspunkt für verschiedene Angriffe .....
mit Jodit hatte ich auch experimentiert. Konnte aber die benötigten Anforderungen damit nicht abdecken. Bei Summernote bin ich dann hängen geblieben.
Deine Muster sehen schön aus. Du hast mit Jodit auch mit wenig Aufwand einen Editor. In deinen 16 Zeilen Sourcecode fehlen dir noch sehr wichtige Dinge wie Sessionmanagement, Zugriffsrechte usw. Bei den Bildern die du einsetzt hast du nur ein Link zum Originalbild d.h. jedesmal wenn du den Text aufrufts wird das Bild vom Originalserver geladen. Solche externe Links sind in meiner Umgebung ein "no go" so ist z.B. auch wenn das Bild auf dem Original-Server noch vorhanden ist im Intranet kein Zugriff darauf möglich. Ich muss die Bildgrösse einschränken und das Bild entweder im Text als Base64 codierter String speichern oder auf den Server Uploaden und dann ein intern vorhandener Link im Text einsetzten.
Du solltest dir noch Umfassende Gedanken über externe vs. interne Links und deren Möglichkeiten und Folgen machen und entscheiden wie du künftig arbeiten willst.
Verwendet du z.B. den Link:
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jodit/3.1.39/jodit.min.css">
Arbeitet dein Programm nur wenn die Datei bei dieser externen Stelle vorhanden ist .... du bist davon abhängig, wirst sicher getrackt ....
und vorallen sind externe Links auch immer ein nicht zu unterschätzender Angriffspunkt für verschiedene Angriffe .....
Valar Morghulis
Gruss Carlo
Gruss Carlo
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
Hallo Carlos,
danke für deine Hinweise. Im Echtbetrieb werde ich dann die Komponenten am Server installieren.
Bevor ich nun richtig mit mod harbour starte möchte ich alle Komponenten, die man so braucht testen.
Die Dinge, die du ansprichst sind dann sicher von Anwendung zu Anwendung zu lösen.
Aber ich kann hier dann "Clipper" Code verwenden.
Ich habe mir gedacht, dass ich vor dem Öffnen immer eine Kopie automatisch erstelle und eine Versionierung.
Für die Benutzeranmeldung gibt es schon ein kleines Framework (GENESIS für mod harbour).
>Link zum Originalbild
Ich habe gesehen, dass die Bilder, die man mit Copy & Paste einfügt direkt im HTML gespeichert werden.
Vielleicht sollte man dann beim Speichern die Bilder aus dem Code in eigene Dateien sicheren.
Beim Einbinden der youtube Videos habe ich noch ein Problem mit den Anführungszeichen. Hier muss ich noch mit STRTRAN() genauer ersetzen.
Für meine Anwendung brauche ich das Textprogramm nur als Ersatz für memoedit - also vorerst nur wenig Funktionalität.
------
Unsere Desktop Software läuft auf einem Server und die Benutzer greifen mit RemoteDesktop zu. Nun planen wir zusätzlich zum RemoteDesktop Server auch einen Apache zu installieren. Man kann dann über Internet parallel auf die Daten direkt zugreifen.
Unsere Software wird auf einem eigenen VS installiert. Alles ist virtualisiert und vorinstalliert. Beim Kunden wird dann nur eine neue VS angelegt und das vhdx importiert.
------
Ich habe vor 15 Jahren einige Webprogramme mit ASP Classic gemacht. Seit dem nichts mehr. Ich bin nun praktisch wieder ein Anfänger .
Mit freundlichem Gruß
Otto
danke für deine Hinweise. Im Echtbetrieb werde ich dann die Komponenten am Server installieren.
Bevor ich nun richtig mit mod harbour starte möchte ich alle Komponenten, die man so braucht testen.
Die Dinge, die du ansprichst sind dann sicher von Anwendung zu Anwendung zu lösen.
Aber ich kann hier dann "Clipper" Code verwenden.
Ich habe mir gedacht, dass ich vor dem Öffnen immer eine Kopie automatisch erstelle und eine Versionierung.
Für die Benutzeranmeldung gibt es schon ein kleines Framework (GENESIS für mod harbour).
>Link zum Originalbild
Ich habe gesehen, dass die Bilder, die man mit Copy & Paste einfügt direkt im HTML gespeichert werden.
Vielleicht sollte man dann beim Speichern die Bilder aus dem Code in eigene Dateien sicheren.
Beim Einbinden der youtube Videos habe ich noch ein Problem mit den Anführungszeichen. Hier muss ich noch mit STRTRAN() genauer ersetzen.
Für meine Anwendung brauche ich das Textprogramm nur als Ersatz für memoedit - also vorerst nur wenig Funktionalität.
------
Unsere Desktop Software läuft auf einem Server und die Benutzer greifen mit RemoteDesktop zu. Nun planen wir zusätzlich zum RemoteDesktop Server auch einen Apache zu installieren. Man kann dann über Internet parallel auf die Daten direkt zugreifen.
Unsere Software wird auf einem eigenen VS installiert. Alles ist virtualisiert und vorinstalliert. Beim Kunden wird dann nur eine neue VS angelegt und das vhdx importiert.
------
Ich habe vor 15 Jahren einige Webprogramme mit ASP Classic gemacht. Seit dem nichts mehr. Ich bin nun praktisch wieder ein Anfänger .
Mit freundlichem Gruß
Otto
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
Hallo Tom,
mod harbour ersetzt praktisch PHP.
Für das Front-End kannst du html und javascript verwenden. Ich nutzt bootstrap.
Hier ein kleines Programm, das zeigt, wie mod harbour und html/javascript zusammenarbeiten.
cText wird an HTML übergeben mit BLOCKS oder größere Bereiche mit TEMPLATE PARAMS.
Im HTML sind die Variablen dann mit {{ cPasswort }} oder <?prg return cPasswort ?> nutzbar.
von html werden die Variablen mit <script> var x = "<?prg return cPasswort ?>" </script> in javascript verfügbar gemacht.
Mit submit dann wieder an den Server geschickt.
Im harbour code kann man den vollen Funktionsumfang von harbour (=CLIPPER) nutzen - im HTML html und javascript
Schönen Sonntag und freundliche Grüße Otto
mod harbour ersetzt praktisch PHP.
Für das Front-End kannst du html und javascript verwenden. Ich nutzt bootstrap.
Hier ein kleines Programm, das zeigt, wie mod harbour und html/javascript zusammenarbeiten.
cText wird an HTML übergeben mit BLOCKS oder größere Bereiche mit TEMPLATE PARAMS.
Im HTML sind die Variablen dann mit {{ cPasswort }} oder <?prg return cPasswort ?> nutzbar.
von html werden die Variablen mit <script> var x = "<?prg return cPasswort ?>" </script> in javascript verfügbar gemacht.
Mit submit dann wieder an den Server geschickt.
Im harbour code kann man den vollen Funktionsumfang von harbour (=CLIPPER) nutzen - im HTML html und javascript
Schönen Sonntag und freundliche Grüße Otto
function Main()
local cTest := "Name eingeben"
local cPasswort := "Passwort eingeben"
// BLOCKS PARAMS cPasswort in html Teil dann {{ cPasswort }}
TEMPLATE PARAMS ctest, cPasswort
<html>
<head>
<meta charset="utf-8">
<title>POST example</title>
</head>
<body>
<form action="postpairs.prg" method="post">
<?prg return ctest ?>:
<br>
<input type="text" name= "USER" >
<br>
<?prg return cPasswort ?>:
<script> var x = "<?prg return cPasswort ?>"
alert( x ) </script>
<br>
<input type="password" name="PW" >
<br><br>
<input type="submit" value="Send data">
</form>
</body>
</html>
ENDTEXT
return nil
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: mod_harbour
Hallo Tom
als Datepicker verwende ich https://gijgo.com/datepicker da gibs auch Datum und Zeitpicker Sliders uva.
als Datepicker verwende ich https://gijgo.com/datepicker da gibs auch Datum und Zeitpicker Sliders uva.
Valar Morghulis
Gruss Carlo
Gruss Carlo
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: mod_harbour
Hallo Otto
wenn du so am Anfangs stehst wie du es beschreibst würde ich unbedingt noch xb2.net anschauen.
Dies ist ein voll funktionsfähiger Webserver mit welchem du den gesamten Webserver und deine App in eine xbase++ EXE gelinkt bekommst.
Es reicht dann diese zu Starten. Vorallem hast du damit einige Möglichkeiten mehr als mit Apache besonders auch Geschwindigkeitsvorteile.
Harbour ist leider nur ein Interpreter der deinen Code jedesmal zur Laufzeit neu übersetzt.
Bei xb2.net kannst auch Clipper Code Syntax verwenden. Jedoch ist dieses Modul nicht kostenlos.
wenn du so am Anfangs stehst wie du es beschreibst würde ich unbedingt noch xb2.net anschauen.
Dies ist ein voll funktionsfähiger Webserver mit welchem du den gesamten Webserver und deine App in eine xbase++ EXE gelinkt bekommst.
Es reicht dann diese zu Starten. Vorallem hast du damit einige Möglichkeiten mehr als mit Apache besonders auch Geschwindigkeitsvorteile.
Harbour ist leider nur ein Interpreter der deinen Code jedesmal zur Laufzeit neu übersetzt.
Bei xb2.net kannst auch Clipper Code Syntax verwenden. Jedoch ist dieses Modul nicht kostenlos.
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: mod_harbour
Ich habe für meine kleinen Webseiten meinen normalen Texteditor verwendet und SELFHTML ... aber gegen die aktuellen Webseiten sieht das altbacken aus.
HTML und CSS zu lernen ging ja noch, aber wie mein Vater bei den Intarsien sagte: "es reicht nicht zu wissen wie man Holz schneidet und verleimt ..." ein guter Schreiner ist noch kein Künstler.
Wenn ich sehe was manche an Web Seiten zaubern (Designer ?) ...
HTML und CSS zu lernen ging ja noch, aber wie mein Vater bei den Intarsien sagte: "es reicht nicht zu wissen wie man Holz schneidet und verleimt ..." ein guter Schreiner ist noch kein Künstler.
Wenn ich sehe was manche an Web Seiten zaubern (Designer ?) ...
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: mod_harbour
Das hatte ich schon verstanden, Otto. Ich finde das spannend und interessant, aber ich scripte via Xb2.Net, das ist auch sehr, sehr komfortabel, wahnsinnig kompakt und angriffssicher. Ich wollte nur interessehalber fragen, welche Datepicker (HTML/JS/CSS) Ihr verwendet, weil ich bislang noch keinen gefunden habe, der alles vereint, was ich gerne hätte.
Herzlich,
Tom
Tom
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: mod_harbour
Wenn auch Gijgo deine Wünsche nicht abdeckt: Was hättest du den gerne?
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: mod_harbour
Hallo, Otto.
Xb2.Net ist die Komponente (für Xbase++), mit der ich den Server gestaltet, also, ja, die Webpage, wenn man so will. Wie bei CX/P mit HTTPEndPoint ist kein Webserver mehr nötig.
Xb2.Net ist die Komponente (für Xbase++), mit der ich den Server gestaltet, also, ja, die Webpage, wenn man so will. Wie bei CX/P mit HTTPEndPoint ist kein Webserver mehr nötig.
Herzlich,
Tom
Tom
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: mod_harbour
Hallo Carlos,
in der Zwischenzeit bin ich auch bei Summernote gelanded.
Es ist mir auch gelungen die maximale Größe der Bilder zu beschränken
( maximumImageFileSize: 2097152,).
Ich habe aber nicht herausgefunden, wie man eine Warnung anzeigen könnte.
Hast du eventuell ein Lösung.
Mit freundlichem Gruß
Otto
in der Zwischenzeit bin ich auch bei Summernote gelanded.
Es ist mir auch gelungen die maximale Größe der Bilder zu beschränken
( maximumImageFileSize: 2097152,).
Ich habe aber nicht herausgefunden, wie man eine Warnung anzeigen könnte.
Hast du eventuell ein Lösung.
Mit freundlichem Gruß
Otto