NanoCMS Java

Aus Melin DokuWiki

Wechseln zu: Navigation, Suche

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();
%>