NanoCMS Java
Aus Melin DokuWiki
In den Melin-Templates kann - zusätzlich zur Melin-Template-Syntax - mit Java und PHP gearbeitet werden.
Der Java-Code wird dabei beim Bearbeiten, in der Vorschau und beim Absoeichern ausgeführt. Der Code wird markiert wie in JSP-Seiten. Wenn etwas im Template ausgegeben werden soll an der Stelle schreibt man das in die vordefinierte Variable "val":
<% val = "Hello World"; %>
Daneben sind alle Variablen vordefiniert die es im Template gibt - inklusive der Eingabefelder. Das folgende Beispiel verwendet das Feld __DOCID (die Dokumenten-ID des aktuellen Dokuments):
<%
// Create a really random and secure password to protect the web link
randomStr = "SECRET_TEXT" + __DOCID;
java.security.MessageDigest md = java.security.MessageDigest.getInstance( "MD5" );
byte[] bytes = md.digest( randomStr.getBytes() );
StringBuffer hexString = new StringBuffer();
for (int i=0;i<bytes.length;i++) {
hexString.append(Integer.toHexString(0xFF & bytes[i]));
}
val = "";
MELIN_MEMORY = hexString.toString();
%>
Das Feld MELIN_MEMORY ist auch ein Spezialfeld: in einer Seite können beliebig viele Java-Blocke eingearbeitet werden. Diese arbeiten alle unabhängig. Um Ergebnisse von einem Feld ins nächste zu übertragen kann man das Ergebnis in MELIN_MEMORY (und MELIN_MEMORY1 .. MELIN_MEMORY9) sichern.
Um das an anderer Stelle auszugeben schreibt man:
<% val=MELIN_MEMORY; %>
Datenbank-Abfragen sind damit ebenfalls einfach möglich, hier eine Abfrage die auch gleich eine Textversion (MELIN_MEMORY) mit erstellt die an anderer Stelle im Template ausgegeben werden kann:
<%
import java.sql.DriverManager;
import java.sql.*;
import java.net.*;
import java.util.*;
import java.io.*;
import java.text.SimpleDateFormat;
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost/melin", "root", "");
Statement s = conn.createStatement();
String catNewsSQL = "select * FROM texte WHERE texte.layout = 'news' " .
. " AND DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= FROM_UNIXTIME(texte.created) LIMIT 10";
ResultSet rsd = s2.executeQuery(catNewsSQL);
if (rsd.next()) {
String TITEL = rsd.getString("titel");
String ID = rsd.getString("textid");
String TEASER = rsd.getString("texte.teaser");
val +="<tr><td>"+ TITEL + "</td></tr>\n";
MELIN_MEMORY += "------------------------------------------------------------\n";
MELIN_MEMORY += TITEL + "\n";
MELIN_MEMORY += "------------------------------------------------------------\n";
MELIN_MEMORY += TEASER + "\n";
MELIN_MEMORY += "http://www.melin.de/texte/" + ID + "\n\n";
}
s.close();
conn.close();
%>
