De:DocumentParser
From MODx Wiki
| Dieser Artikel ist noch nicht ganz vollständig. Wenn du Ahnung von diesem Thema hast schau einfach mal wo du noch was erweitern kannst. |
| Dieser Artikel kann noch eine Rechtschreibprüfung vertragen. Wenn du gut Deutsch kannst, schau mal drüber. |
Die DocumentParser-Klasse ist sozusagen der Kern von MODx. Die meiste Zeit ist sie unter der Variable $modx anzutreffen. Diese Dokumentation befasst sich nur mit den API-Funktionen der Klasse.
Get the Parent Ids
Befehl
Diese Funktion gibt die Ids der übergeordneten Dokumente zurück.
getParentIds(int startId [, int hoehe [, array eltern]]);
startId gibt die Id des Dokuments an, dessen Eltern gesucht werden sollen. Der optionale Parameter hoehe gibt an, wie viele Ebenen zurück gesucht werden soll. Der letzte optionale Parameter wird für eine interne Rekursion verwendet.
Get the Child Ids
Befehl
Zeigt die Ids der Kindelemente des aktuellen Dokuments
getChildIds(int startId[,int tiefe[,array kinder]]);
Alert Message
Befehl
Zeigt eine Javascript-Warnmeldung im Browser
webAlert(string nachricht[,string url]);
Add Log Event
Befehl
Diese Funktion fügt einen neuen Log-Eintrag in die Datenbank ein.
logEvent(int ereignisId,int ereignisTyp,string Nachricht[,string Quelle]);
Die ereignisId kann resourcenspezifisch sein. ereignisTyp muss einer der folgenden Werte sein:
| 1 | Information |
| 2 | Warnung |
| 3 | Fehler |
Quelle sollte den Namen der Resource enthalten.
Beispiel
Ich habe ein Gästebuch-Snippet und möchte gerne einen Logeintrag bei neuen Einträgen
$modx->logEvent(1,1,'Neue Nachricht im Gästebuch: ' . $gbNew['msg'],'Gästebuch);
Backend or Frontend?
Befehle
Diese beiden Funktionen helfen einer Resource herauszufinden ob sie im Backend oder Frontend aufgerufen wird. Nützlich z.B. um den Aufruf im Backend abzubrechen.
isBackend(); isFrontend();
Beide antworten auf die Frage entsprechend mit TRUE oder FALSE
Alte Methode
Die alte Methode ist
insideManager();
Der Rückgabewert kann hier aber auch noch zusätzlich interact oder install sein.
Beispiel
Ich habe ein ultrageheimes Snippet um meine Benutzer auszuspionieren. Mich selber soll es natürlich nicht ausspionieren
if(isBackend()) {
return "Hier fühl ich mich nicht wohl!";
}
Get all Children
Befehl
Dieser Befehl gibt die einen multidimensionalen Array mit allen Kindern des angegeben Dokuments und deren Eigenschaften zurück
getAllChildren([int startId[,string spalteNachDerSortiertWird[,string sortierRichtung[,string spalten]]]]);
startId ist das Dokument dessen Kinder gesucht werden sollen. Die spalteNachDerSortiertWird sollte der Name einer Spalte in der Tabelle site_content sein.Die sortierRichtung ist entweder ASC (aufsteigend) oder DESC (absteigend). spalten gibt an welche Spalten der Tabelle schließlich im Array gespeichert werden sollten. Diese Funktion ist nicht rekursiv, gibt also nur die Kindelemente auf dem Level 1 unter startId zurück.
Get active Children
Befehl
Dieser Befehl verhält sich wie getAllChildren, außer dass er nur veröffentlichte und nicht gelöschte Dokumente, auf die der aktuelle Benutzer zugriff hat anzeigt.
getActiveChildren([int startId[,string spalteNachDerSortiertWird[,string sortierRichtung[,string spalten]]]]);
Get Snippet Id
Befehl
Gibt die Id des aktuelle ausgeführten Snippets unter der es in der Datenbank ableget ist zurück.
getSnippetId();
Get Snippet Name
Befehl
Gibt den Namen des aktuellen Snippets zurück
getSnippetName();
Clear Cache
Befehl
Löscht den Dokumentcache.
clearCache();
Make Url
Befehl
Dieser Befehl erzeugt eine URL
makeUrl(int dokumentId[,string dokumentAlias[,string argumente[,string schema]]]);
Beispiele
Hier ein paar Beispiele, um die Verwendung zu verdeutlichen.
Ich möchte in meinem Gästebuch gerne eine Aufteilung auf mehrere Seite einbauen.
$id = $modx->documentIdentifier; $nextPageUrl = $modx->makeUrl($id,,'nextPage=' . ($page + 1));
Das Ergebnis kann je nach Einstellung ganz unterschiedlich sein:
Mit freundlichen URLs
/gaestebuch.html?nextPage=2
Ich habe hier $alias nicht mit angegeben obwohl ich freundliche URLs benutze. In diesem Fall versucht MODx den passenden Alias selber zu finden.
Ohne freundliche URLs
/index.php?id=126&nextPage=2
Durch die Angabe von schema kann ich MODx dazu bringen eine URI zu erzeugen.
Gehen wir davon aus, dass ich bei schema https eingegeben habe:
https://example.com/gaestebuch.html?nextPage=2
Get Configuration Variable
Befehl
Dieser Befehl gibt den Wert der angegeben Konfigurationsvariablen zurück.
getConfig(string variablenName);
Beispiel
Um auf möglichst komplizierten Wege an die base_url zu kommen könnte ich folgendes schreiben
$baseUrl = $modx->getConfig('base_url');
Get Version Information
Befehl
Mit dieser Funktion erhalte ich detailierte Informationen zur aktuellen MODx Version als assoziativen Array
getVersionData();
Rückgabewerte
Ein Array mit folgenden Schlüsseln
| code_name | z.B. rev 1785 |
| version | z.B. 0.9.5 beta 5 |
| small_version | z.B. 0 |
| patch_level | z.B. 0 |
| full_appname | MODx |
Make Lists
Befehl
Diese Funktion ist dabei behilflich, Listen zu bauen:
makeList(array werte[,string cssKlasse[,string cssUnterKlassenPrefix[,string cssListStyleType[,bool geordnet[,int einrueckung]]]]]);
Die Funktion kann auch mit multidimensionalen Arrays umgehen. einrueckung wird intern verwendet und sollte nicht belegt werden. geordnet auf TRUE zu setzen würde eine geordnete (ol) statt ungeordnete (ul) Liste erzeugen.
Beispiel
Als Ausgangswert nehme ich folgenden Array
Array
(
[a] => Startseite
[b] => Aktuelles
[c] => Ausflüge
(
[0] => Köln
[1] => Xanden
[2] => Trier
[3] => Rom
)
[d] => Impressum
)
und folgenden Aufruf
$modx->makeList($array,'navileiste','sub_','none',false);
und erhalte folgendes Resultat
<ul class="navileiste" style="list-style-type: none">
<li>Starseite</li>
<li>Aktuelles</li>
<li>Ausflüge</li>
<ul class="sub_navileiste" style="list-style-type: none">
<li>Köln</li>
<li>Xanden</li>
<li>Trier</li>
<li>Rom</li>
</ul>
</li>
<li>Impressum</li>
</ul>
User details
Befehl
Dieser Befehl gibt einige Details zum aktuellen Benutzer aus.
userLoggedIn();
Rückgabewerte
Wenn der Benutzer nicht angemeldet ist wird FALSE zurückgegeben. Entscheidend ist ob die Funktion im Backend oder im Frontend aufgerufen wird.
| loggedIn | TRUE |
| id | Die Benutzer-Id |
| username | Der Benutzername |
| usertype | Im Frontend: web Im Backend: manager |
Get Keywords
Befehl
getKeywords([int dokumentId]); Der Rückgabewert ist ein Array
Get Metatags
Befehl
getMETATags([int dokumentId]);
Rückgabewert
Der Rückgabewert ist ein multidimensionaler assoziativer Array, wobei die Schlüssel des obersten Arrays dem im Manager eingegeben Name entsprechen. Die Schlüssel der inneren Array haben folgende Werte
| tag |
| tagvalue |
| http_equiv |
Run Snippet
Befehl
Dieser Befehl führt ein Snippet aus. Der Rückgabewert entspricht dem return des ausgeführten Snippets
runSnippet(string snippetName[,array paramter]);
Die optionalen Parameter werden als assoziativer Array übergeben.
Get Chunk
Befehl
Dieser Befehl holt einen Template Chunk aus der Datenbank und gibt ihn zurück.
getChunk(string chunkName);
Alte Methode
In älteren Snippets ist evtl. noch der aufruf
putChunk(string chunkName);
zu finden, der ein Alias für getChunk ist.
Beispiel
Bei meinem Gästebuch habe ich einen Einführungstext als Chunk verfasst.
$gbIntroString = $modx->getChunk('gbIntroText');
// ...
return $gbIntroString . $guestbook;
Parse Chunk
Befehl
Diese Funktion ist nützlich um alle Platzhalter eines Chunks mit den entsprechenden Werten zu ersetzen und den Chunk zurückzugeben
parseChunk(string chunkName,array chunkAttribute[,string prefix[,string suffix]]);
prefix entspricht normalerweise { und suffix }
Beispiel
Für die einzelnen Einträge in meinem Gästebuch habe ich einen Template Chunk erstellt:
<div class="gb_entry">
<div class="gb_entry_info">{gb.poster} {gb.posttime} <a href="mailto:{gb.mailaddress}">{gb.mailaddress}</div>
{gb.entry}
</div>
Außerdem habe ich folgenden assoziativen Array
Array ( [gb.poster] => "Hans Müller" [gb.posttime] => "25.10.2006 04:01" [gb.mailaddress] => "hans-mueller@example.com" [gb.entry] => "Hey, Super Seite hast du da. Wie kann ich auch sowas machen?" )
Daraus folgt dieser Aufruf
$entry = $modx->parseChunk('gbEntry',$gbEntryValues);
Mit diesem Ergebnis
<div class="gb_entry"> <div class="gb_entry_info">Hans Müller 25.10.2006 04:01 <a href="mailto:hans-mueller@example.com">hans-mueller@example.com</div> Hey, Super Seite hast du da. Wie kann ich auch sowas machen? </div>
Get User Data
Befehl
Dieser Befehl gibt einen assoziativen Array mit verschiedenen Daten zum aktuellen Benutzer zurück. Dabei handelt es sich um seine Browserkonfiguration nicht MODx Einstellungen.
getUserData();
Rückgabewerte
| ip | IP-Adresse des Benutzers |
| ua | |
| browser | |
| long_name | |
| version | |
| maj_ver | |
| min_ver | |
| letter_ver | |
| javascript | |
| platform | |
| os | |
| language | |
| gecko | |
| gecko_ver | |
| html | |
| images | |
| frames | |
| tables | |
| java | |
| plugins | |
| css2 | |
| css1 | |
| iframes | |
| xml | |
| dom | |
| hdml | |
| wml | |
| must_cache_forms | |
| avoid_popup_windows | |
| cache_ssl_downloads | |
| break_disposition_header | |
| empty_file_input_value | |
| scrollbar_in_way |
Get Full Table Name
Befehl
Gibt den Namen einer Tabelle mit Prefix aus.
getFullTableName(string tabellenName);
Beispiel
Damit mein Gästebuch auch auf anderen MODx Installationen läuft verwende ich folgenden Code
$tabelle = $modx->getFullTableName('gb_entries');
$query = $modx->db->select('*',$tabelle);
...
Map Path
Befehl
Gibt den physikalischen Pfad einer Datei an
mapPath([string virtuellerPfad[,string dateiname]]);
Wird kein virutellerPfad angegeben wird das aktuelle Verzeichnis verwendet.
Beispiel
$echterPfad = $modx->mapPath('/assets/images/','herkules.jpg');
Gibt zurück (z.B.)
/var/www/vhosts/example.com/htdocs/assets/images/herkules.jpg
Get Placeholder
Befehl
Gibt den Wert eines Platzhalters zurück
getPlaceholder(string name);
Beispiel
$gbHintergrund = $modx->getPlaceholder('gb.Hintergrundfarbe');
Set Placeholder
Befehl
Legt einen Platzhalter mit einem Wert fest
setPlaceholder(string name,string wert);
Beispiel
$modx->setPlaceholder('gb.Hintergrundfarbe','rot');
Get Manager Path
Befehl
Gibt den virtuellen absoluten Pfad zum Manager aus
getManagerPath();
Beispiel
Wenn ich MODx im DOCUMENT_ROOT meines Webservers installiert haben ist der Rückgabewert in der Regel
/manager/
Get Cache Path
Befehl
Gibt den virtuellen Pfad zum Cache Ordner aus
getCachePath();
Beispiel
Wenn ich MODx im DOCUMENT_ROOT meines Webservers installiert haben ist der Rückgabewert in der Regel
/assets/cache/
Send Alert
Befehl
Sendet eine Nachricht an einen Benutzer
sendAlert(int typ,int empfaengerBenutzerId,int senderBenutzerId,string Betreff,string Nachricht[,int privat]);
Anstatt die Id des empfaengerBenutzer und des senderBenutzer anzugeben kann man auch deren Namen angeben. MODx versucht dann automatisch die entsprechende Id zu finden.
Get User Id
Befehl
Gibt die Id des aktuellen Benutzers zurück. Die Funktion unterscheidet automatisch Backend und Frontend.
getLoginUserID();
Get User Name
Befehl
Gibt den Name des aktuellen Benutzers zurück. Die Funktion unterscheidet automatisch Backend und Frontend.
getLoginUserName();
Get User Type
Befehl
Gibt entweder web, manager oder LEEREN_STRING zurück. Die Funktion unterscheidet automatisch Backend und Frontend.
getLoginUserType();
Get Manager User Info
Befehl
Dieser Befehl gibt alle Information zu einer Benutzer-Id als assoziativen Array zurück. Funktioniert nur mit Manager-Benutzern
getUserInfo(int benutzerId);
Get Web User Info
Befehl
Dieser Befehl gibt alle Information zu einer Benutzer-Id als assoziativen Array zurück. Funktioniert nur mit Web-Benutzern
getWebUserInfo(int benutzerId);
Change Web User Password
Befehl
Ändert das Passwort eines Web-Benutzers.
changeWebUserPassword(string altesPasswort,string neuesPasswort);
Alte Methode
changePasswort(string altesPasswort,string neuesPasswort);
Is Member of Web Group ?
Befehl
Gibt TRUE zurück wenn der aktuelle Web-Benutzer in mind. einer der angegeben Web-Gruppen ist
isMemberOfWebGroup(array 'webGruppen);
Register Clientside CSS
Befehl
Dieser Befehl fügt einen Verweis auf eine CSS-Datei in den <head> ein.
regClientCSS(string pfadDerCSSDatei);
Wenn ein Snippet, dass diesen Befehl verwendet mehrmals auf einer Seite aufgerufen wird, wird der Wert trotzdem nur einmal eingefügt.
Beispiel
Mein kleines Gästebuch hat einige exta CSS-Attribute, die ich nicht in meine Haupt-CSS-Datei mit reinschreiben möchte.
$modx->regClientCSS('assets/snippets/guestbook/style.css');
Dadurch wird folgender Code vor </head> eingefügt
<link rel="stylesheet" href="assets/snippets/guestbook/style.css" />
Auch wenn ich das Gästebuch-Snippet mehrmals auf der Seite aufrufe wird nur ein Aufruf der CSS-Datei in den HTML-Kopf geschrieben.
Register Clientside Startup Script
Befehl
Dieser Befehl verhält sich wie regClientCSS, außer dass man hiermit Javascripts in den Header einbinden kann.
regClientStartupScript(string pfadZumScript[,bool nurText]);
nurText ist normalerweise auf FALSE gesetzt.
Rückgabewerte
Ein Aufruf fügt folgenden Code vor </head> ein
<script type="text/javascript" src="pfadZumScript"></script>
Register Clientside Script
Befehl
Entsprcith regClientStartupScript, außer dass hier der Code vor </body> eingefügt wird.
regClientScript(string pfadZumScript[,bool nurText]);
Register Clientsie Startup HTML Block
Befehl
Fügt den angegeben HTML-Block vor </head> ein
regClientStartupHTMLBlock(string htmlCode);
Register Clientside HTML Block
Befehl
Fügt den angegeben HTML-Block vor </body> ein
regClientHTMLBlock(string htmlCode);
Strip Tags
Befehl
Diese Funktion ist ein Wrapper für strip_tags. Zusätzlich werden auch noch alle MODx-Tags entfernt.
stripTags(string eingabe[,string erlaubteHTMLTags]);
