{PROJECT} ../../template/home.ini {GRAFIK_LINKS} $home/gifs/li_phpcms.gif {LOGO_1} $home/gifs/cmslogo1.gif {LOGO_2} $home/gifs/cmslogo2.gif {MENU} 00.08.06.11 {TITEL} Alles über PAX {CONTENT}


Wie funktioniert PAX? Warum PAX?

Ist PAX im GUI aktiviert, wird das Template vor der Übergabe an phpCMS an PAX übergeben um diverse Erweiterungen schon im Vorfeld auszufiltern. So kommt phpCMS nicht durcheinander und PAX kann auch weiterentwickelt werden, ohne weitere grössere Eingriffe im Parser von phpCMS vornehmen zu müssen.

Wie von phpCMS bekannt, werden Scripte, die über das Feld {SCRIPT} eingebunden sind, dynamisch zur Laufzeit in die Ausgabe eingebunden. Sollte Servercache aktiviert sein, wird die Seite jedoch auch im Cache abgelegt (obwohl dynamisch). Im Cache wird aber eben nur jener Teil abgelegt, welcher statisch ist, sich also zur Laufzeit nicht verändert.
Von dieser Funktionalität macht auch PAX gebrauch.

PAX benötigt man, wenn PHP in Templates und/oder Inhaltsdateien (ContentFiles - folgend auch Contentdateien genannt) eingebunden werden soll.
Weiters gibt es mit PAX verschiedene TAGS (PAXTAGS), welche bestimmte Eigenschaften haben.

Bisher war es in phpCMS nicht möglich PHP-Code in phpCMS direkt einzubinden. Es bestand nur die Möglichkeit, wie schon oben angeführt, über {SCRIPT} externe Scripte in einer Contentseite einzubinden. Da ich aber zum Zeitpunt der PAX-Idee Bedarf hatte, ein Umfragescript auf jeder Seite einzubinden, musste ich mir Gedanken machen wie das funktionieren könnte, ohne in jeder Contentdatei das Feld {SCRIPT} anführen zu müssen. Und so entstand eben PAX *g*


Einbindung von PHP im Template

Primär gilt es zu beachten, daß man mit PAX keine Debugging-Funktionalität für PHP hat!
Die Einbindung von PHP im Template geschieht auf sehr einfache Weise und auf eigene Gefahr:

Beispiel:
<!-- PAXPHP Blockbezeichnung
echo 'Hello World!';
PAXPHP Blockbezeichnung -->

  1. PHP muss immer in einen Block geschrieben werden. Diesen filtert PAX im Vorfeld aus und verbindet vor der Ausgabe den von phpCMS erzeugten Code mit dem von PAX


  2. Die "Blockbezeichnung" darf NICHT zweimal vorkommen, egal in welchem Template!


  3. In "Blockbezeichnung" dürfen Buchstaben in Gross/Kleinschreibung, Unterstriche und Zahlen verwendet werden. KEINE LEEREZEICHEN und KEINE SONDERZEICHEN ( A-Z , a-z , _ , 0-9 )


  4. Der Block besteht immer aus einem Beginntag und einem Endetag (<!-- PAXPHP Blockbezeichnung und PAXPHP Blockbezeichnung -->)


  5. Die Trennung mit Leerzeichen des PAXPHP-Tags und der Blockbezeichnung sind wichtig! Weiters muss auch die erste php-Anweisung mit einem Leerzeichen von der Blockbezeichnung getrennt werden


  6. Die üblichen Anfangstags ( <? , <?php ) und das Schlusstag ( ?> ) von PHP dürfen nicht vorkommen.


  7. Beginnt der PHP-Code in der nächsten Zeile, so darf am Ende von "<!-- PAXPHP Blockbezeichnung" kein Leerzeichen oder sonstiges Zeichen stehen. Wenn dies der Fall ist, wird der Code in den nachfolgenden Zeilen ignoriert!!!

Ich empfehle, wie im Beispiel oben angeführt, <!-- PAXPHP Blockbezeichnung in die erste Zeile, folgend den Code in die nächste(n) Zeile(n) und PAXPHP Blockbezeichnung --> in eine abschliessende Zeile zu schreiben. So behält man sich die Übersichtlichkeit.
Wie man am Beispiel sieht, ist es sehr einfach PHP einzubinden.


Was sind PAX TAGS?

---------------

Mit PAXTAGS wird die Funktionalität von phpCMS um einige interessante Features erweitert.


PAXINC: Einbindung von weiteren Templates oder anderen Dateien

Mit PAXINC können weitere Templates oder Dateien an beliebiger Stelle im Template eingebunden werden.
Vorhandene Links werden NICHT überprüft!

TAG:
PAXINC

SYNTAX:
<!-- PAXINC /pfad/vom_docroot/zu/template/oder/datei.html -->
oder
<!-- PAXINC http://www.domain.net/daten.html -->

---------------

Beispiel:
<!-- PAXINC http://plugs.citroman.net/PAX/dokupaxtest.html -->

ergibt bei aktivierten PAXTAGS:

Es können natürlich in den extern einzubindenden Templates oder Dateien weitere PAXTAGS geschrieben werden.


PAXHIGHLIGHT: PHP-Syntaxhighlighting der angegebenen Datei

Mit PAXHIGHLIGHT können weitere Dateien an beliebiger Stelle im Template/Content eingebunden werden. Der darin enthaltene PHP-Code wird nach den PHP.INI-Einstellungen farbig dargestellt. Einbindung wie PAXINC.
Vorhandene Links werden NICHT überprüft!

TAG:
PAXHIGHLIGHT

SYNTAX:
<!-- PAXHIGHLIGHT /pfad/vom_docroot/zu/template/oder/datei.php -->
oder
<!-- PAXHIGHLIGHT http://www.domain.net/datei.php -->

$home wird als Pfadangabe unterstützt.
---------------

Beispiel:
Hier ist der Source einer kleinen Datei, wenn PAXTAGS aktiviert sind.

Es können natürlich in den extern einzubindenden Templates oder Dateien weitere PAXTAGS geschrieben werden.


PAXMENU: Zugriff auf Menüwerte

Mit PAXMENU ist die Möglichkeit gegeben, auf jedes Menüfeld zugreifen zu können.
Die Links werden grundsätzlich ausgehend von $home gesetzt!
PAMENU funktioniert nur im non-stealth-mode einwandfrei!

TAG:
PAXMENU

SYNTAX:
<!-- PAXMENU FIELDNAME,CLASS -->

---------------

einfaches Beispiel:
Nehmen wir an, ich möchte einen Link zu einem Menüeintrag auf einer Seite oder in einem Template haben, dann wird dies wie folgt erreicht:

<a href="<!-- PAXMENU LINK,00.08.06.12 -->"><!-- PAXMENU MNAME,00.08.06.12 --></a>
Dies würde einen Link auf einen Menüpunkt mit seinem Feldwert ergeben.

Ausgabe bei aktivierter PAXTAGS Unterstützung:

---------------

Beispiel mit Titel (für IE), Zielframe/fenster und Statustextanzeige beim Mouseover:

<A HREF="<!-- PAXMENU LINK,00.08.06.12 -->" TARGET="<!-- PAXMENU TARGET,00.08.06.12 -->" onMouseOver="window.status='<!-- PAXMENU TEXT,00.08.06.12 -->';return true;" title="<!-- PAXMENU TEXT,00.08.06.12 -->"><!-- PAXMENU MNAME,00.08.06.12 --></a>

Ausgabe bei aktivierter PAXTAGS Unterstützung:

Meine MenüFelder sehen wie folgt aus:
LINK und CLASS sind ja Pfilchtfelder von phpCMS, also gibt es hierbei auch keine Unterschiede in der Schreibweise!
TARGET: Zielfenster oder -frame für LINK
TEXT: Soll in der Statuszeile dargestellt weden.
MNAME: Feldname für Menübezeichnung

---------------

Zusammengefasst kann man auf jedes Menüfeld zugreifen, welches man in der .mnu-Datei auch definiert hat.


PAXCOMBO: Erstellung eines einfachen DropDown Menüs

Das Menü muss einen eindeutigen Namen tragen! Wenn ein Menü doppelt vorkommt (zb. SUB1), kommt es zu Fehlern bei der Darstellung!

Die Links werden grundsätzlich ausgehend von $home gesetzt!
PAXCOMBO funktioniert nur im non-stealth-mode einwandfrei!

TAG:
PAXCOMBO

SYNTAX:
<!-- PAXCOMBO MENUNAME,FIELDNAME,VALUES,SELECTED,SIZE,MULTI,ONCHANGE,FIRSTENTRY -->

MENUNAME MENU:MAIN > hier wäre MAIN richtig. Darf in der Menüdatei nur ein mal vorkommen!
FIELDNAME Welcher Feldinhalt soll angezeigt werden? LINK, TEXT, NAME, usw...
VALUES optional - welcher Feldinhalt soll als Wert eingefügt werden. Ganz brauchbar für zb. automischen Linklisten. Wenn nichts angegeben, wird der Wert von FIELDNAME eingetragen.
SELECTED optional - welche Zeile des angezeigten Menüs soll den Focus erhalten
SIZE optional - Wie gross soll die Liste sein (in Zeilen)
MULTI (on/off) optional - Soll Multiselect erlaubt werden?
ONCHANGE (on/off) optional - Soll ein automatischer onselect bei eintragsaktivierung eingetragen werden? Praktisch für Linklisten
FIRSTENTRY optional - Text der als erster Eintrag angezeigt werden soll. zb: ~ select an entry ~

---------------

Beispiel:
<!-- PAXCOMBO SUB1, TEXT, LINK,, 1, off, on, ~ select your favorite ~ -->

ergibt bei aktivierten PAXTAGS:


PAXLASTMOD: stellt das letzte Aktualisierungsdatum der Seite dar.

TAG:
PAXLASTMOD

SYNTAX:
<!-- PAXLASTMOD d.m.Y - H:m:s -->

---------------

Beispiel:
<!-- PAXLASTMOD d.m.Y - H:m:s -->

ergibt bei aktivierten PAXTAGS:


zur Formatierung der Ausgabe werden die Werte die für den Befehl date verwendet werden, herangezogen.


DYNATAG

Als DYNATAG bezeichne ich TAGS in der TAG-Datei, welche keinen normalen Text oder HTML-Code beinhalten, sondern jene TAGS denen PHP-Code zugeordnet wurde.

---------------

Beispiel für ein DYNATAG in der TAG-Datei:
Aktuelles Datum und Uhrzeit auf jeder Seite (Danke an Dirk)

Öffne Deine TAG-Datei und schreib ein neues TAG:

<ACTDATE>:=
<!-- PAXPHP datum
   $datum = date("d.m.Y");
   $uhrzeit = date("H:i");
   echo $datum," - ",$uhrzeit," Uhr";
PAXPHP datum -->
Nun kannst Du in jedem Template oder/und in ContentFiles einfach nur das DYNATAG <ACTDATE> angeben und Du hast immer das derzeitige Datum an der Stelle vom Platzhalter <ACTDATE>.
ergibt bei aktiviertem PAXPHP:


Globale Werte

Grundsätzlich stehen im PHP-Code alle globalen Werte zur Verfügung, die vor dem Einlesen der Seite in phpCMS vorhanden sind. Welche das sind, entnimmt man am Besten der Dokumentation für phpCMS.
Nicht alle für Plug-ins beschriebenen Variablen stehen bereit. Hier heisst es experimentieren. Eine genaue Aufstellung werde ich laufend auf http://plugs.citroman.net bekanntgeben.
Übergabe von Parametern ist natürlich ebenso möglich: http://domain.net/index.htm?&var=red
Auch $PHP_SELF steht in unveränderter Form bereit. So könnte man eine Ausführung oder Anzeige von bestimmten Teilen im Code von der dargestellten Seite abhängig machen.


Fehlerquellen

Derzeit sind keine bekannt. Wenn man sich an die Richtlinien von phpCMS, PAX und PHP hält, dürfte nichts schief gehen.


Tips&Tricks&FAQ zu PAX unter plugs.citroman.net - BBS
Viel Spass ... Wernhard