mod_harbour

Es soll sie ja geben ...

Moderator: Moderatoren

Antworten
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

mod_harbour

Beitrag von azzo » Mo, 29. Jul 2019 17:49

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

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1414
Registriert: Mi, 28. Jul 2010 17:16

Re: mod_harbour

Beitrag von ramses » Mi, 31. Jul 2019 6:46

Hallo Otto

Sieht interessant aus. Arbeitest du damit? Lassen sich dlls verwenden( funktionsaufrufe in c dlls z.b. List&Label)?
Valar Morghulis

Gruss Carlo

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14799
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: mod_harbour

Beitrag von brandelh » Mi, 31. Jul 2019 8:06

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

Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » Mi, 31. Jul 2019 10:38

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


Bild
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
//----------------------------------------------------------------------------//




Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » Mi, 31. Jul 2019 13:27

Hallo Hubert,

DLLs sollte man einbinden können.

Yes!
Please review mod_harbour/samples/mysql.prg source code
We use Harbour's dynamic linking
LG
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 )

//----------------------------------------------------------------//



Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » Mi, 31. Jul 2019 20:22

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

Bild

2. ich verwende Bootstap Studio zum Designen des Layouts
Video
https://mybergland.com/fwforum/bootstrap2.gif

Bild
3. Programmieren mit Harbour
Video
https://mybergland.com/fwforum/bootstrap3.gif

Bild

Liebe Grüße
Otto

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1414
Registriert: Mi, 28. Jul 2010 17:16

Re: mod_harbour

Beitrag von ramses » Do, 01. Aug 2019 23:34

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?
Valar Morghulis

Gruss Carlo

Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » Fr, 02. Aug 2019 9:47

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

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1414
Registriert: Mi, 28. Jul 2010 17:16

Re: mod_harbour

Beitrag von ramses » Fr, 02. Aug 2019 12:05

Kennst du da vielleicht einen?
Hallo Otto

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
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstr ... ap.min.css">
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.
Valar Morghulis

Gruss Carlo

Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » Fr, 02. Aug 2019 17:06

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

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1414
Registriert: Mi, 28. Jul 2010 17:16

Re: mod_harbour

Beitrag von ramses » Fr, 02. Aug 2019 21:49

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.
Valar Morghulis

Gruss Carlo

Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » Sa, 03. Aug 2019 22:25

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

Bild

Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » Sa, 03. Aug 2019 22:49

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

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1414
Registriert: Mi, 28. Jul 2010 17:16

Re: mod_harbour

Beitrag von ramses » So, 04. Aug 2019 9:14

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 .....
Valar Morghulis

Gruss Carlo

Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » So, 04. Aug 2019 10:18

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

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7689
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: mod_harbour

Beitrag von Tom » So, 04. Aug 2019 10:34

Ich verfolge das sehr interessiert. Welche Datepicker verwendet Ihr?
Herzlich,
Tom

Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » So, 04. Aug 2019 11:21

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





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


ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1414
Registriert: Mi, 28. Jul 2010 17:16

Re: mod_harbour

Beitrag von ramses » So, 04. Aug 2019 11:33

Hallo Tom

als Datepicker verwende ich https://gijgo.com/datepicker da gibs auch Datum und Zeitpicker Sliders uva.
Valar Morghulis

Gruss Carlo

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1414
Registriert: Mi, 28. Jul 2010 17:16

Re: mod_harbour

Beitrag von ramses » So, 04. Aug 2019 11:42

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.
Valar Morghulis

Gruss Carlo

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14799
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: mod_harbour

Beitrag von brandelh » So, 04. Aug 2019 12:01

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 ?) ...
Gruß
Hubert

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7689
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: mod_harbour

Beitrag von Tom » So, 04. Aug 2019 12:06

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

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1414
Registriert: Mi, 28. Jul 2010 17:16

Re: mod_harbour

Beitrag von ramses » So, 04. Aug 2019 12:11

Tom hat geschrieben:
So, 04. Aug 2019 12:06
weil ich bislang noch keinen gefunden habe, der alles vereint, was ich gerne hätte.
Wenn auch Gijgo deine Wünsche nicht abdeckt: Was hättest du den gerne?
Valar Morghulis

Gruss Carlo

Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 299
Registriert: So, 28. Mär 2010 19:21

Re: mod_harbour

Beitrag von azzo » So, 04. Aug 2019 12:33

Hallo Tom,
danke für die Info. Ist xb2.net die Webpage.
LG
Otto

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7689
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: mod_harbour

Beitrag von Tom » So, 04. Aug 2019 12:38

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.
Herzlich,
Tom

Antworten