Entwicklerhandbuch Stand 09.04.06 Entwicklerhandbuch Inhaltsverzeichnis 1. Die Einführung..................................................................................................................5 1.1. Impressum................................................................................................................5 1.2. Über EGOTEC®.......................................................................................................5 1.3. Über das Handbuch..................................................................................................5 2. Überblick..........................................................................................................................6 2.1. Grundstruktur............................................................................................................6 2.2. Schnittstellen.............................................................................................................6 3. Das Basisskript.................................................................................................................7 4. Erstellen eines neuen Seitentyps.....................................................................................9 4.1. Bekanntgabe des neuen Typs an das System..........................................................9 4.2. Die Ansicht..............................................................................................................10 4.2.1. Ansichts-Template............................................................................................10 4.2.2. Ansichts-Skript.................................................................................................10 4.3. Der Adminbereich....................................................................................................10 4.3.1. Allgemeines Verhalten.....................................................................................10 4.3.2. Reiter................................................................................................................11 4.3.2.1. Den Informationsreiter erweitern...............................................................11 4.3.2.2. Eigene Reiter erstellen.............................................................................12 4.3.2.3. Globale Reiter erstellen............................................................................13 4.3.2.4. Beispiel : Ein zusätzlicher WYSIWYG-Editor...........................................13 4.3.3. Einbindung auf dem Desktop...........................................................................13 4.3.4. Änderungen im Menü......................................................................................14 5. Weiterführende Möglichkeiten........................................................................................16 5.1. Temporäre Änderungen im Menü............................................................................16 6. Konfigurationen..............................................................................................................18 6.1. Systemweite Konfigurationen..................................................................................18 6.1.1. Eigene Konfigurationen ermöglichen...............................................................18 6.1.2. Das Konfigurations-Template...........................................................................18 6.1.3. Das Konfigurations-Skript................................................................................20 7. API..................................................................................................................................21 7.1. Page........................................................................................................................21 7.1.1. Ausführliche Beschreibung..............................................................................21 7.1.2. Öffentliche Methoden.......................................................................................21 7.1.2.1. getChildren...............................................................................................21 7.1.2.2. getDescendants........................................................................................21 7.1.2.3. getParents................................................................................................22 7.1.2.4. getAncestors.............................................................................................22 7.1.2.5. getSiblings................................................................................................23 7.1.2.6. getUrl........................................................................................................23 7.1.2.7. hasRights..................................................................................................23 7.1.3. Methoden zur Bearbeitung...............................................................................24 7.1.3.1. update.......................................................................................................24 7.1.3.2. newChild...................................................................................................24 7.1.3.3. addChild...................................................................................................25 7.1.3.4. linkTo........................................................................................................25 7.1.3.5. unlinkFrom................................................................................................25 7.1.3.6. move.........................................................................................................25 7.1.3.7. delete........................................................................................................25 2 EGOTEC® 4 7.1.4. Öffentliche Attribute.........................................................................................26 7.1.4.1. field...........................................................................................................26 7.1.4.2. extra..........................................................................................................26 7.1.4.3. a_user.......................................................................................................26 7.1.4.4. c_user.......................................................................................................26 7.2. Page_Iterator..........................................................................................................27 7.2.1. Ausführliche Beschreibung..............................................................................27 7.2.2. Öffentliche Methoden.......................................................................................27 7.2.2.1. numRecords.............................................................................................27 7.2.2.2. nextPage..................................................................................................27 7.2.3. Methoden für das Interface Iterator.................................................................27 7.2.3.1. current......................................................................................................27 7.2.3.2. key............................................................................................................27 7.2.3.3. next...........................................................................................................27 7.2.3.4. rewind.......................................................................................................28 7.2.3.5. valid..........................................................................................................28 7.2.4. Öffentliche Attribute.........................................................................................28 7.2.4.1. page..........................................................................................................28 7.3. Site..........................................................................................................................29 7.3.1. Ausführliche Beschreibung..............................................................................29 7.3.2. Öffentliche Methoden.......................................................................................29 7.3.2.1. getRoot.....................................................................................................29 7.3.2.2. getPage....................................................................................................29 7.3.2.3. getPageId.................................................................................................30 7.3.2.4. getPages..................................................................................................30 7.3.2.5. getErrorPage............................................................................................30 7.3.2.6. getPageUrl................................................................................................31 7.3.2.7. getUrl........................................................................................................31 7.3.2.8. getMediaSite.............................................................................................31 7.3.2.9. getMediaUrl..............................................................................................31 7.3.2.10. getLanguages.........................................................................................31 7.3.2.11. setLanguage...........................................................................................32 7.3.2.12. getSkins..................................................................................................32 7.3.3. Öffentliche Attribute.........................................................................................32 7.3.3.1. name.........................................................................................................32 7.3.3.2. site............................................................................................................32 7.3.3.3. skin...........................................................................................................32 7.3.3.4. language...................................................................................................32 7.4. Smarty.....................................................................................................................33 7.4.1. Ausführliche Beschreibung..............................................................................33 7.4.2. Öffentliche Methoden.......................................................................................33 7.4.2.1. assign.......................................................................................................33 7.4.2.2. fetch..........................................................................................................33 7.5. Ego_Sql...................................................................................................................34 7.5.1. Ausführliche Beschreibung..............................................................................34 7.5.2. Öffentliche Methoden.......................................................................................34 7.5.2.1. Konstruktor...............................................................................................34 7.5.2.2. select........................................................................................................34 7.5.2.3. nextRecord...............................................................................................35 3 Entwicklerhandbuch 7.5.2.4. numRecords.............................................................................................35 7.5.2.5. insert.........................................................................................................35 7.5.2.6. replace......................................................................................................36 7.5.2.7. update.......................................................................................................36 7.5.2.8. delete........................................................................................................36 7.5.3. Methoden für das Interface Iterator.................................................................37 7.5.3.1. current......................................................................................................37 7.5.3.2. key............................................................................................................37 7.5.3.3. next...........................................................................................................37 7.5.3.4. rewind.......................................................................................................37 7.5.3.5. valid..........................................................................................................37 7.6. Auth.........................................................................................................................38 7.6.1. Ausführliche Beschreibung..............................................................................38 7.6.2. Öffentliche Methoden.......................................................................................38 7.6.2.1. hasPermission..........................................................................................38 7.6.2.2. checkPermission......................................................................................38 7.6.2.3. reset..........................................................................................................38 7.6.2.4. translate....................................................................................................39 7.6.2.5. validate.....................................................................................................39 4 EGOTEC® 4 1. Die Einführung 1.1. Impressum EGOTEC GmbH 1999-2006. Alle Rechte vorbehalten. Alle Angaben zum Handbuch wurden sorgfältig erarbeitet, erfolgen jedoch ohne Gewähr. Handbuch Auflage April 2006 Kein Teil des Handbuchs oder Programms darf in irgendeiner Form (Druck, Fotokopie, Mikrofilm oder in einem anderen Verfahren) ohne unsere vorherige schriftliche Genehmigung reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. Wir weisen darauf hin, dass die im Buch verwendeten Bezeichnungen und Markennamen der jeweiligen Firmen im allgemeinen Warenzeichen-, Marken- oder Patentschutz unterliegen. 1.2. Über EGOTEC® EGOTEC® ist ein Programm mit neuester Softwaretechnik, für dessen Entwicklung wir keinen Aufwand und keine Zeit gescheut haben. Ganz besondere Aufmerksamkeit wurde auf die einfache und komfortable Bedienung gelegt. Umfassende Kenntnisse in der Internettechnologie setzt das Programm nicht voraus. Die Bedienoberfläche ist an gängige Standardsoftware angelehnt, wodurch eine geringe Einarbeitungszeit garantiert ist. Sie werden während der Arbeit durch die kontextsensitive Hilfe unterstützt. Wir wünschen Ihnen nun viel Spaß mit dem Programm. Sollten Sie Fragen, Anregungen oder Wünsche haben, teilen Sie uns diese mit. 1.3. Über das Handbuch Tastatureingaben werden wie folgt dargestellt: <Return> = Einfaches Betätigen der Eingabe- oder Enter-Taste <Strg>+<R> = Drücken und Halten der Taste „Steuerung“ (evtl. auch „Control“ oder „Ctrl“) und gleichzeitiges Drücken der Taste „R“ In diesem Handbuch werden folgende Symbole verwendet, um Sie auf wichtige Dinge hinzuweisen: Für den Benutzer wichtige Hinweise sind in einem grauen Kasten geschrieben. Mit einem Dreieck mit Ausrufzeichen gekennzeichnete Hinweise sollten unbedingt beachtet werden. 5 Entwicklerhandbuch 2. Überblick 2.1. Grundstruktur EGOTEC Content, Multimedia, Download, Design, Skripts, Schnittstellen PHP 5 Schnittstellen zu XML, FTP, PDF, IMAP, POP, LDAP, Flash, ActiveX Server Sprachen PHP, Java, Servlets, ASP, uvm. Web-Server Apache, MS IIS, iPlanet uvm. Datenbanken MySQL, Oracle, DB2, Sybase, PostgreSQL, MSSQL, dBase, Informix, SQLite, ODBC Betriebsystem Linux, Solaris, AIX, andere Unixe, Win95, WinNT, WinXP, NetWare Abbildung 1: Informationsmanagement 2.2. Schnittstellen Durch Verwendung der Skriptsprache PHP5 ist EGOTEC® sehr flexibel. Es existieren so Schnittstellen zu vielen Skriptsprachen, Datenbanken und allen Internet Standards. EGOTEC® ist Komponenten basiert aufgebaut und lässt sich beliebig erweitern. Es können so Schnittstellen zu beliebigen Systemen erstellt werden. Die einfachste Version einer Schnittstelle wird mit Hilfe eines FTP Uploads und einer Textdatei realisiert, die dann von einer eigens dafür erstellten Komponente verarbeitet wird. Durch die Verwendung von PHP sind aber auch höhere Schnittstellen z.B. zu Datenbanken (MySQL, MS SQL, Oracle, DB2, Sybase, PostgreSQL, dBase, Informix, InterBase, Ingres II, mSQL, ODBC, SESAM, ...) und anderen Systemen möglich (Cybercash, XML, XSLT, FTP, PDF, Verisign, Hyperwave, ICAP, IMAP, POP3, NNTP, SMTP, LDAP, Flash, Shockwave, mnoGoSearch, SSL, Corba, YAZ, YP/NIS, ...). Auch können SOAP und XML-RPC Schnittstellen angesprochen werden. Weiterhin ist eine Schnittstelle zu Java/JavaBeans/JavaServlets möglich. Auf Windows Systemen kann zusätzlich noch COM/DCOM/ActiveX als Schnittstelle fungieren. Über einen eigens entwickelten COM/DLL Wrapper können auch beliebige DLLs eingebunden werden. Die Einbindung können Sie selbst übernehmen. Die Schnittstellenprogrammierung ist dokumentiert und das komplette EGOTEC® liegt Ihnen bei Lizenzerwerb im Quellcode vor. Wir übernehmen gerne die Erstellung Ihrer Schnittstellen an Hand eines Pflichtenhefts.Es wurde unter anderem eine Schnittstelle zu einer Hotelverwaltungssoftware realisiert, so dass online Buchungen vorgenommen werden. Ein weiteres Beispiel ist ein AuftragsTracking System mit dem der Kunde Passwort geschützt den aktuellen Stand seiner Aufträge verfolgen kann. 6 EGOTEC® 4 3. Das Basisskript Das Hauptskript einer Site ist die index.php im Verzeichnis site/SiteName. Die meisten grundlegenden Funktionen einer Seite lassen sich allerdings auch schon über die entsprechenden Templates steuern, so dass Sie unter Umständen komplett auf eine index.php verzichten können. Müssen Sie aber bestimmte Aktionen für alle Seiten des Auftritts realisieren, ist die index.php die beste Stelle, um solche Skripte einzubinden. Die index.php unserer Demo-Site sorgt z.B. dafür, dass bei Seiten mit leerem Inhalt direkt der Inhalt der ersten untergeordneten Seite angezeigt wird: 1. <?php 2. if ( 3. (strlen($page->field['content'])<14) && 4. ($page->field['type']=='page') 5. ) Zunächst wird geprüft. ob der Inhalt der aktuellen Seite weniger als 14 Zeichen enthält, und die Seite vom Typ page ist. 6. { 7. $child = $page->getChildren(); Wenn dies zutrifft werden die Kinder der Seite ausgelesen. 8. 9. 10. 11. 12.} if ($child->nextPage()) { $page = $child->page; } Falls ein Kind existiert, wird die aktuelle Seite mit der Kind-Seite überschrieben. Außerdem können in der index.php auch weitere allgemein gültige Skripte eingebunden werden. 13.require('emotion.php'); // Skript für Emotionbilder. Der Pfad der Datei ist dabei relativ zum aktuellen Site-Verzeichnis zu sehen. In der Demosite bieten wir außerdem noch die Möglichkeit, einen zweiten Inhaltsbereich einzubinden. je nach Seitentyp können hier unterschiedliche Templates zum Einsatz kommen. Auch dieser Skriptteil wird in die index.php integriert. 14.$template_file = 15. $GLOBALS['egotec_conf']['skin_dir'] 16. .$site->skin.'/' 17. .$page->field['type'].'/body_2.html'; In Abhängigkeit des Seitentyps wird zusätzlich eine Template-Datei für einen zweiten Inhaltsbereich gewählt. 18.if (!file_exists($template_file)) 19.{ 20. $template_file = 21. $GLOBALS['egotec_conf']['skin_dir'] 22. .$site->skin.'/body_2.html'; 23.} Falls für den aktuellen Typ keine Template-Datei für einen zweiten Inhaltsbereich existiert, wird auf ein Standard-Template zurückgegriffen. 24.if (file_exists($template_file)) 25.{ 26. $smarty->assign('typeTemplate2', $template_file); 27.} 28.?> 7 Entwicklerhandbuch Wenn entweder das Typenspezifische- oder das Standardtemplate existiert, wird dieses dem Haupttemplate zugewiesen und kann dann vom Designer entsprechend eingebunden werden. 8 EGOTEC® 4 4. Erstellen eines neuen Seitentyps Der Seitentyp legt fest, welches Design eine Seite hat und wie diese auf der Homepage angezeigt wird. Die Seitentypen, die innerhalb einer Site zur Verfügung stehen, ergeben sich aus den Typverzeichnissen im jeweiligen Siteverzeichnis. Je Seitentyp werden dann unter Umständen noch weitere Dateien benötigt: ● Ansichts-Template (siehe 4.2.1/ Seite 10) ● Ansichts-Skript (siehe 4.2.2/ Seite 10) ● Admin-Templates ● Admin-Skripte 4.1. Bekanntgabe des neuen Typs an das System Durch das Anlegen eines neuen Verzeichnisses im jeweiligen Siteverzeichnis steht dem System ein neuer Seitentyp zur Verfügung. In dem Typenverzeichnis müssen Sie eine Datei mit Namen type.ini anlegen. Diese legt fest, mit welchem Namen dieser Seitentyp in der Drop-Down-Liste im Admin-Bereich angezeigt wird.: 1. title = Startseite Der title ist dabei die Bezeichnung des Seitentyps in der Drop-Down-Liste. Einige Module (wie z.B. das News-Modul) bestehen aus mehreren Seitentypen. Diese werden in einem gemeinsamen Unterverzeichnis verwaltet. Jeder News-Seitentyp entspricht hierbei wieder einem untergeordneten Verzeichnis. Falls die Kategorie nur der Strukturierung dient, aber keine Seite mit einem solchen Seitentyp erzeugt werden soll, so setzt man in der Seitentypdatei den Wert inactive auf true. Die Kategorie erscheint dann in der Auswahlliste für den Seitentyp einer Seite, kann aber nicht ausgewählt werden. /news/type.ini 1. title = Nachrichten 2. inactive = true /news/list/type.ini 1. title = Übersicht /news/entry/type.ini 1. title = Eintrag Eine solche Verzeichnisstruktur mit entsprechenden type.ini-Dateien führt im Adminbereich zu folgender Drop-Down-Liste Nachrichten Nachrichten/Übersicht Nachrichten/Eintrag Nachrichten ist dabei nicht auswählbar. 9 Entwicklerhandbuch 4.2. Die Ansicht Der Ansichtsbereich spiegelt den Teil des Auftritts wieder, den ein normaler Besucher bei Eingabe der URL zu Gesicht bekommt. Zunächst wird für jede Seite die aufgerufen wird, das Basisskript eingebunden und abgehandelt (siehe 3/ Seite 7) 4.2.1. Ansichts-Template Das jeweilige Ansichts-Template ergibt sich aus dem internen Typennamen. Das Template zu einer Seite vom Typ page heißt z.B. skin/SkinNam e/page/body.htm l. Dementsprechend heißt das Template für Seiten vom Typ news/entry skin/SkinNam e/news/entry/body.htm l. Einzelheiten zum Erstellen von Templates entnehmen Sie bitte dem Designerhandbuch. 4.2.2. Ansichts-Skript Bei den meisten Seitentypen ist es möglich, den Großteil der Funktionalität bzw. die gesamte Funktionalität über Smarty-Plugins zu realisieren. Falls diese Möglichkeiten nicht ausreichen sollten, können Sie je Seitentyp weitere Skripte einbinden, die z.B. neue Platzhalter zur Verfügung stellen, oder Aktionen realisieren. Ausgangspunkt hierzu ist die index.php im jeweiligen Typen-Verzeichnis. Bei Seiten vom Typ news/list ist dies z.B. die site/SiteNam e/news/list/index.php. (siehe / Seite ) 4.3. Der Adminbereich Bei den meisten Seitentypen werden Sie zusätzliche Eingabefelder oder Optionen im Adminbereich benötigen. Um diese zu realisieren, müssen Sie die Admin-Skripte des jeweiligen Seitentyps bearbeiten / erstellen 4.3.1. Allgemeines Verhalten Das allgemeine Verhalten eines Seitentyps legen Sie in der index.php im Adminverzeichnis des jeweiligen Typs fest. Hier bestimmen Sie z.B. von welchem Typ Seiten sein sollen, die unterhalb dieser Seite erstellt werden, ob Seiten von diesem Typ in den Cache mit aufgenommen werden sollen, usw. 1. <?php 2. $page->field['children_order'] = 'desc'; Über das $page-Objekt haben Sie direkten Zugriff auf die aktuelle Seite (siehe / Seite ). Werte, die Sie hier setzen, werden beim Speichern der Seite in die DB übernommen. 3. $new_child['type'] = 'events/entry'; 4. $new_child['nav_hide'] = 1; 5. ?> Mit dem $new_child-Array können Sie alle Werte einer potentiellen Unterseite mit Standardwerten vorbelegen. 10 EGOTEC® 4 4.3.2. Reiter Zur besseren Übersicht sind die einzelnen Eingabemöglichkeiten der Seiten auf verschiedene Reiter verteilt (Information, Inhalt, usw.). Je Seitentyp können Sie bestimmen, welche Reiter angezeigt werden sollen und wie diese beschriftet sind. Einige Reiter (Meta, Navigation, usw.) werden unabhängig von den Angaben in der navigation.ini eingebunden. Diese können Site-Spezifisch in der Datei site/SiteNam e/adm in/navigation.ini angepasst werden. Dazu benötigen Sie im jeweiligen Admin-Verzeichnis des Seitentyps die Datei navigation.ini : 1. 2. 3. 4. 5. 6. 7. [information] url = info.php title = Information [content] url = edit.php title = Inhalt Die navigation.ini besteht dabei aus mehreren Sektionen, die jeweils einen Reiter darstellen. Zu jedem Reiter müssen die Werte url und title gesetzt werden. 1. [information] 2. url = info.php 3. title = Information Jeder Seitentyp sollte zumindest über diesen Eintrag verfügen, damit Name, Titel und Kurzbeschreibung bearbeitet werden können. Um nun eigene Eingabefelder zu definieren, können Sie zum einen den Reiter „Information“ erweitern (siehe 4.3.2.1/ Seite 11) oder eigene Reiter erstellen (siehe 4.3.2.2/ Seite 12). 4.3.2.1. Den Informationsreiter erweitern Wenn nur wenige zusätzliche Eingabefelder benötigt werden ist es ratsam, auf einen eigenen Reiter zu verzichten, und statt dessen einfach den Informationsreiter entsprechend zu erweitern. Dazu genügt es, im Admin-Verzeichnis des entsprechenden Typs die navigation.ini zu erweitern: 1. [information] 2. url = “info.php?tpl_name=information.html“ 3. title = Information Dem Standardinformationsreiter wird mit dem Parameter tpl_nam e mitgeteilt welches Template zusätzlich zum Informationsreiter angezeigt werden soll. Das entsprechende Template muss dann im Admin-Verzeichnis des Seitentyps bereit gestellt werden: 1. <form name="extra"> 2. <div align="center"> 3. <table class="table"> 4. <tr> 5. <td colspan="2" class="cell"> 6. <table border="0" cellspacing="1" cellpadding="4" class="table"> 7. <tr> 8. <td>Mein eigenes Eingabefeld</td> 9. <td><input type=“text“ name=“extra[myField]“></td> 10. </tr> 11. </table> 12. </td> 11 Entwicklerhandbuch 13. </tr> 14.</table> 15.</div> 16.<form> Innerhalb des <form ></form >-Bereichs können nun beliebig viele weitere Eingabefelder definiert werden. Im abschließenden Javascript-Bereich muss dann die Kommunikation zwischen den einzelnen Frames im Admin-Bereich definiert werden: 17.{literal} Der Block zwischen {literal} ... {/litearl} wird von Smarty nicht interpretiert, d.h. es können keine Smartyfunktionen aufgerufen werden. Er wird bei Javascriptabschnitten eingesetzt, um geschweifte Klammern verwenden zu können. Ohne den {literal}-Block versucht Smarty bei einer geschweiften Klammer eine Smartyfunktion aufzurufen, was zu einer Fehlermeldung führt. Wenn Sie also Javascript innerhalb eines Smarty-Templates benutzen denken Sie bitte immer daran {literal} einzusetzen. 18.<script language="javascript"> 19.<!-20.function do_load_extra() 21.{ 22. f = document.forms["extra"]; 23. f.elements["extra[myField]"].value = window.parent.get_extra("myField"); 24.} Die Funktion do_load_extra() wird automatisch beim Aufruf des Informationsreiters gestartet. Mit der Zuweisung in Zeile 23 wird der Wert des neuen Eingabefelds in Zeile 9 mit dem entsprechenden Wert aus der Datenbank ersetzt. Die Datenbankstruktur wird hierbei nicht geändert. EGOTEC legt bei Bedarf entsprechende „Felder“ an. Über die Methoden get_extra und set_extra greifen Sie per Javascript auf diese Einträge zu. Die Speicherung dieser Daten erfolgt in einem objektorientierten Ansatz in der relationalen Datenbank. 25. 26.function do_unload_extra() 27.{ 28. f = document.forms["extra"]; 29. window.parent.set_extra("myField", f.elements["extra[myField]"].value); 30.} 31.//--> do_unload_extra() wird automatisch beim Verlassen des Reiter ausgeführt. Die Zuweisung in Zeile 29 stellt sicher, dass der Wert des Eingabefelds wieder zurück an den übergeordneten Frame übergeben wird, von dem aus er dann beim Speichern in die DB geschrieben wird. 32.</script> 33.{/literal} 4.3.2.2. Eigene Reiter erstellen Bei größeren Mengen von Eingabefeldern oder Zugriff auf externe Daten, für die weitere Skripte benötigt werden, können Sie auch eigene Reiter erstellen. Dazu genügt es, die navigation.ini um einen entsprechenden Eintrag zu erweiten. 1. [meinReiter] 2. url = extra.php?tpl_name=meinTyp/admin/meinReiter.html&script_name=meinTyp/admin/meinReiter.php 3. title = Mein Reiter 12 EGOTEC® 4 Als url rufen Sie dabei immer extra.php auf und übergeben mit den Parametern tpl_nam e und script_nam e das zu verwendende Template bzw. Skript ausgehend vom Verzeichnis site/SiteNam e/. Die Übergabe des Templates ist dabei zwingend erforderlich, ein Skript muss nicht unbedingt übergeben werden. Die Templatedateien werden dabei nach dem gleichen Prinzip wie der erweitere Informationsreiter erstellt (siehe 4.3.2.1/ Seite 11), allerdings müssen die Javascript-Funktionen zur Kommunikation do_load() bzw. do_unload() benannt werden. 4.3.2.3. Globale Reiter erstellen Sie haben auch die Möglichkeit Reiter für jeden Seitentyp anzubieten. Dazu steht Ihnen eine separate navigation.ini im Verzeichnis site/SiteNam e/adm in zur Verfügung. Diese ist im gleichen Stil wie die typenspezifischen Navigations-Dateien zu behandeln. 4.3.2.4. Beispiel : Ein zusätzlicher WYSIWYG-Editor Einen Reiter mit einem zusätzlichen WYSIWYG-Editor erstellen Sie z.B. indem Sie in der entsprechenden navigation.ini folgende Zeilen einfügen : 1. [content_2] 2. url = "edit.php?content=content_2" 3. title = Inhalt 2 Der mit content übergebene Wert entsprocht dabei dem Platzhalter, über den der eingegebene Inhalt später im Template ausgegeben werden kann. 4.3.3. Einbindung auf dem Desktop Unter Umständen kann es sinnvoll sein, bestimmte Seitentypen mit dem Desktop zu verknüpfen. Dafür stehen auf dem Desktop beliebig viele Zellen zur Verfügung, die typenspezifisch gefüllt werden können. Um einen neuen Typen mit dem Desktop zu verknüpfen benötigen Sie zunächst ein Template, dass den Inhalt der Desktop-Zelle darstellt. Das Template erstellen Sie in der desktop.htm l im Admin-Verzeichnis des entsprechenden Typs. Für Seiten vom Typ news/list heißt das entsprechende Template also site/SiteNam e/news/list/adm in/desktop.htm l heißen. Das entsprechende Template für Nachrichten-Übersichten könnte folgendermaßen aussehen: 1. <h2>{$news_page->field.name}</h2> Entsprechend benötigen Sie dann noch ein passendes Skript, dass die Desktop-Zellen füllt. Dieses erstellen Sie in der Datei desktop.php im Adminverzeichnis des Typs: 1. <?php 2. $news = $site->getPages(array('where' => "type='news/list'")); Zunächst werden alle Seiten vom Typ news/list ausgelesen. 3. foreach ($news as $news_page) 4. { In einer foreach-Schleife werden die gefundenen Seiten einzeln abgehandelt. 5. $smarty->assign('news_page', $news_page); Die gefundenen Seiten werden an das Template (desktop.htm l) übergeben, und dort weiter verarbeitet. 6. $GLOBALS['cells'][] = $smarty->fetch( 13 Entwicklerhandbuch 7. 8. $GLOBALS['egotec_conf']['site_dir'] .$GLOBALS['site']->name.'/news/list/admin/desktop.html'); Die Ausgabe des Templates wird dann dem globalen Array $GLOBALS['cells'] hinzugefügt. 9. } 10.?> Die Ausgabe des Arrays $GLOBALS['cells'] auf dem Desktop übernimmt dann wieder das System. Mit diesem einfachen Beispiel erzeugen Sie für jeden News-Bereich eine Zelle, die den Namen des Bereich beinhaltet. 4.3.4. Änderungen im Menü Die hier beschriebene Möglichkeit bezieht sich auf Menü-Änderungen, die über die komplette Site hinweg gelten. Über die typenspezifische Adminskripte haben Sie auch die Möglichkeit das Menü zu ändern, wenn Sei einen bestimmten Typ zum Editieren öffnen, bzw. verlassen (siehe 5.1 / Seite 16). Für einzelne Seitentypen haben Sie auch die Möglichkeit das oben liegende Menü von EGOTEC an zu passen. Dafür benötigen Sie die Datei m enu.php im Adminverzeichnis des jeweiligen Typs. Um Beispielsweise den Menüpunkt Datei->Neu so zu erweitern, dass für jede Seite vom Typ news/list ein eigener Menüpunkt eingebunden wird erstellen Sie die Datei site/SiteNam e/news/list/adm in/m enu.php. 11.<?php 12.$news = $site->getPages(array('where' => "type='news/list'")); Zunächst werden wieder alle Seiten vom Typ news/list ausgelesen. Durch den Aufruf über $site->getPages() wird bereist eine Rechteprüfung des aktuellen benutzers durchgeführt. 13.if ($news->numRecords()) 14.{ // Falls es mindestens einen Newsbereich gibt, so wird dieser in das Menü Datei->Neu eingetragen. 15. $GLOBALS['mainMenu']->enableItem("fileNew"); Der Menüpunkt Datei->Neu wird aktiviert. 16. 17. 18. 19. 20. 21. 22. 23. 24.} $GLOBALS['mainMenu']->addItem("fileNew", array( "id" => "fileNew-News", "text" => "News", "url" => "javascript:void(0)", "target" => "_self", "alt" => "News", "active" => 1 )); Unterhalb von Datei->Neu (fileNew) wird einer neuer Menüpunkt mit einer eindeutigen ID erzeugt. 25.foreach ($news as $news_page) 26.{ // Ein Untermenüpunkt pro Newsbereich in das Dateimenü einfügen. 27. $GLOBALS['mainMenu']->addItem("fileNew-News", array( 28. 'id' => 'fileNew-'.$news_page->field['id'], 29. 'text' => $news_page->field['name'], 30. 'url' => get_url($GLOBALS['global_conf']['url_dir']. 31. 'bin/page/action.php', array( 32. 'site' => $site->name, 33. 'lang' => $site->language, 34. 'field[id]' => $news_page->field['id'], 35. 'new_child[type]' => 'news/entry', 36. 'new_child[nav_hide]' => 1, 37. 'action' => 'new_child' 38. )), 14 EGOTEC® 4 39. 40. 41. 42. 43. 44.} 45.?> 'target' 'alt' 'Neuen 'active' => 'dlg', => $GLOBALS['auth']->translate( Eintrag erstellen'), => 1 )); Für jeden Newsbereich wird ein neuer Menüpunkt mit dem Namen des Bereichs erstellt. 15 Entwicklerhandbuch 5. Weiterführende Möglichkeiten 5.1. Temporäre Änderungen im Menü Wenn Sie in den MM-Bereich wechseln werden Sie feststellen, dass Ihnen hier abweichende Buttons in der Symbolleiste zur Verfügung stehen (z.B. Hochladen). Solche Änderungen können Sie für jeden Seitentyp selbst vornehmen. indem Sie die index.php im Adminverzeichnis des entsprechenden Typs anpassen. 1. <?php 2. /* Multimedia-Buttons */ 3. $toolbarMenu->addMainRuler('media_ruler'); Zunächst wird ein Trenner angehängt, der die typspezifischen Buttons von den Standardbuttons trennt. 4. $toolbarMenu->addMainItem(array( 5. "id" => "buttonMediaUpload", 6. "text" => "<center> 7. <img src='".$GLOBALS['egotec_conf']['url_dir']. 8. "bin/admin_skin/egotec/img/upload_page.gif' border=0 9. style='width: 24px; height: 24px'/><br/>". 10. $GLOBALS['auth']->translate("Hochladen")."</center>", 11. "url" => "javascript:void(0)", 12. "target" => "", 13. "alt" => $GLOBALS['auth']->translate("Hochladen"), 14. "active" => 1 15.)); Dann wird ein neuer Menüpunkt/Button erzeugt. 16. 17.$toolbarMenu->addItem("buttonMediaUpload",array( 18. "id" => "buttonMediaUpload_file", 19. "text" => $GLOBALS['auth']->translate("Einzelne Media-Datei hochladen"), 20. "url" => "javascript:window.dlg.multimedia_upload()", 21. "target" => "", 22. "alt" => $GLOBALS['auth']->translate("Einzelne Media-Datei hochladen"), 23. "active" => 1 24.)); 25. 26.$toolbarMenu->addItem("buttonMediaUpload",array( 27. "id" => "buttonMediaUpload_webget", 28. "text" => $GLOBALS['auth']->translate("Media-Datei via Webget hochladen"), 29. "url" => "javascript:window.dlg.multimedia_webget()", 30. "target" => "", 31. "alt" => $GLOBALS['auth']->translate("Webget"), 32. "active" => 1 33.)); 34. 35.$toolbarMenu->addItem("buttonMediaUpload",array( 36. "id" => "buttonMediaUpload_Zip", 37. "text" => $GLOBALS['auth']->translate("ZIP-Archiv hochladen"), 38. "url" => "javascript:window.dlg.multimedia_zip()", 39. "target" => "", 40. "alt" => $GLOBALS['auth']->translate("ZIP Hochladen"), 41. "active" => 1 42.)); Anschließend werden dem neuen Button beliebige Untermenüpunkte zugeordnet 43.$toolbarMenu->removeMainItemFrom("media_ruler"); 44.?> Als letztes sorgt der Aufruf von rem oveMainItem From dafür, dass alle Einträge die dem Trenner folgen beim Verlassen des Seite wieder aus dem Menü entfernt werden. 16 EGOTEC® 4 Man könnte sich auch vorstellen, dass bei einzelne Seitentypen der Button Neu bearbeitet werden soll, falls z.B. bei Seiten vom Typ news/list über diesen Button immer Seiten vom Typ news/entry erzeugt werden sollen. In einem solchen Fall würde man in die site/SiteNam e/news/list/adm in/index.php folgenden Codeabschnitt mit aufnehmen: 1. $toolbarMenu->editMainItem(array( 2. "id" => "buttonNew", 3. "text" => "<center> 4. <img src='".$GLOBALS['egotec_conf']['url_dir']. 5. "bin/admin_skin/egotec/img/new_page.gif' 6. border=0 style='width: 24px; height: 24px'/><br/>". 7. $GLOBALS["auth"]->translate("Neue Nachricht")."</center>", 8. "url" => get_url($GLOBALS['global_conf']['url_dir']. 9. 'bin/page/action.php', array( 10. 'site' => $site->name, 11. 'lang' => $site->language, 12. 'field[id]' => $page->field['id'], 13. 'new_child[type]' => 'news/entry', 14. 'new_child[nav_hide]' => 1, 15. 'action' => 'new_child' 16. )), 17. "target" => "alive", 18. "alt" => $GLOBALS["auth"]->translate("Neue Nachricht"), 19. "active" => 1 20. )); 21.} Über die Parameter new_child (Zeile 13,14) können Vorgaben für die neue Seite übergeben werden. 17 Entwicklerhandbuch 6. Konfigurationen Über verschiedene Konfigurations-Dateien und Eingabemasken ist es möglich EGOTEC für bestimmte Anforderungen anzupassen. Wir unterscheiden hierbei zwischen systemweiten Konfigurationen, die im kompletten System zur Verfügung stehen, und sitespezifischen Konfigurationen, die lediglich für den aktuellen Mandanten gültig sind. 6.1. Systemweite Konfigurationen Systemweite Konfigurationen werden zentral in der Datei /var/conf/conf.ini hinterlegt. Änderungen der Konfiguration können direkt in dieser Datei, oder über die verschiedenen Reiter im Adminbereich unter Verwaltung->Konfiguration vorgenommen werden. Die eingestellten Konfigurationen stehen systemweit als globale Variablen zur Verfügung : $GLOBALS['egotec_conf']['...'] 6.1.1. Eigene Konfigurationen ermöglichen Um eigene Eingabefelder für systemweite Konfigurationen bereit zu stellen benötigen Sie zunächst ein eigenes Verzeichnis im lib-Pfad von EGOTEC. Der Name dieses Verzeichnisses kann dabei frei gewählt werden. Um sicher zugehen, dass es zu keinen Konflikten mit zukünftigen EGOTEC-Modulen kommt, empfiehlt es sich aber ein eindeutiges Prefix zu wählen. In diesem Verzeichnis muss nun eine Datei mit Namen conf.ini erstellt werden : 1. 2. 3. 4. 5. [admin_image] name = Bildbearbeitung title = Bildbearbeitung template = admin/t/conf_image.html script = admin/conf_image.php Die erste Zeile sorgt dafür, dass im Konfigurationsmenü ein neuer Reiter erzeugt wird. Möchten Sie ihre Konfigurationen auf mehrere Reiter verteilen können Sie mehrere Abschnitte in der conf.ini definieren, indem Sie die Zeilen 1 bis 5 entsprechend oft wiederholen. nam e bestimmt die Beshriftung des Konfigurationsreiters. title legt den title-Tag des Reiters fest. tem plate gibt an welches Template für die Einagbe verwendet werden soll. Der Pfad geht dabei vom libVerzeichnis aus. script legt fest welches zusätzliche Skript zur Ausgabe benötigt wird. Der Pfad geht dabei vom bin-Verzeichnis aus. Wird kein zusätzliches Skript benötigt kann man auf die Zeile mit der script-Zuweisung verzichten. 6.1.2. Das Konfigurations-Template Eine einfaches Konfigurationstemplate könnte wie folgt aussehen 1. <form name="extra"> 2. <div align="center"> 3. <table class="table"> 4. <tr> 18 EGOTEC® 4 5. <td colspan="2" class="cell"> 6. <table border="0" cellspacing="1" cellpadding="4" class="table"> 7. <tr> 8. <td> 9. {t}Indizierung aktivieren{/t} 10. </td> 11. <td> 12. <input type="checkbox" name="active"> 13. </td> 14. </tr> 15. <tr> 16. <td> 17. {t}OpenOffice verwenden{/t} 18. </td> 19. <td> 20. <input type="checkbox" name="use_oo"> 21. </td> 22. </tr> 23.</table> 24.</div> 25.</form> Innerhalb eines Formulars werden verschiedene Eingabefelder für die Konfigurationen bereit gestellt. 26.{literal} 27.<script language="javascript"> 28.<!-29.var f= document.forms['extra']; 30.function do_load_extra() 31.{ 32. active = window.parent.get_conf('openoffice','active'); 33. if (active == 1) 34. { 35. f.elements['active'].checked = "checked"; 36. } else { 37. f.elements['active'].checked = ""; 38. } 39. 40. use_oo = window.parent.get_conf('openoffice','use_oo'); 41. if (use_oo == 1) 42. { 43. f.elements['use_oo'].checked = "checked"; 44. } else { 45. f.elements['use_oo'].checked = ""; 46. } 47. 48. f.elements['server'] = window.parent.get_conf('openoffice','server'); 49. f.elements['server_path'] = window.parent.get_conf('openoffice','server_path'); 50.} Die Javascript-Funktion do_load_extra() wird automatisch bei Aufruf des Reiters gestartet und muss vorhanden sein. Innerhalb der Funktion werden die einzelnen Formularfelder mit den aktuellen Werten aus der var/conf/conf.ini gefüllt. Dazu können Sie auf die Funktion window.parent.get_conf() zurück greifen. In Zeile 40 wird z.B. der Wert von $GLOBALS['egotec_conf']['openoffice']['use_oo'] ausgelesen. 51.function do_unload_extra() 52.{ 53. if (f.elements['active'].checked) 54. { 55. window.parent.set_conf('openoffice','active',1); 56. } else { 57. window.parent.set_conf('openoffice','active',0); 19 Entwicklerhandbuch 58. } 59. 60. if (f.elements['use_oo'].checked) 61. { 62. window.parent.set_conf('openoffice','use_oo',1); 63. } else { 64. window.parent.set_conf('openoffice','use_oo',0); 65. } 66. 67. window.parent.set_conf('openoffice','server',f.elements['server']); 68. window.parent.set_conf('openoffice','server_path',f.elements['server_path']); 69.} 70.//--> 71.</script> 72.{/literal} do_unload_extra() wird automatisch beim Verlassen des Reiters aufgerufen und stellt die Änderungen zum Speichern bereit. Auch do_unload_extra() muss existieren. Mit window.parent.set_conf() setzen Sie dabei bestimmte Werte. 6.1.3. Das Konfigurations-Skript Optional können Sie auch ein Skript mit angeben, dass mit dem Template aufgerufen wird. Im Skript können Sie z.B. mit Hilfe der Smarty-Engine zusätzliche Werte an das Template übergeben. 20 EGOTEC® 4 7. API 7.1. Page 7.1.1. Ausführliche Beschreibung Diese Klasse kapselt die Seiteneinträge der Datenbank und stellt unterstützende Methoden zur Verfügung. 7.1.2. Öffentliche Methoden 7.1.2.1. getChildren Page::getChildren ( $ query = array(), $ param = array() ) Gibt alle Kinder zurück. Gibt unter Benutzung von getPages alle Kinder der Seite als Page_Iterator-Objekt zurück. Parameter: $query array zusätzliche Abfrage Parameter $param aray zusätzliche Parameter Siehe auch: Site::getPages • reverse true für eine Umkehr der Ergebnisliste Rückgabe: Page_Iterator 7.1.2.2. getDescendants Page::getDescendants ( $ query = array(), $ param = array() ) Gibt alle Nachkommen zurück. Parameter: $query array zusätzliche Abfrage Optionen $param aray zusätzliche Parameter Siehe auch: Site::getPages Rückgabe: Page_Iterator 21 Entwicklerhandbuch 7.1.2.3. getParents Page::getParents ( $ query = array(), $ param = array() ) Gibt alle Eltern zurück. Gibt unter Benutzung von getPages alle Eltern der Seite als Page_Iterator-Objekt zurück. Parameter: $query array zusätzliche Abfrage Optionen $param aray zusätzliche Parameter Siehe auch: Site::getPages Rückgabe: object Page_Iterator Objekt 7.1.2.4. getAncestors Page::getAncestors ( $ query = array(), $ param = array() ) Gibt alle Vorfahren zurück. Parameter: $query array zusätzliche Abfrage Optionen $param aray zusätzliche Parameter Siehe auch: Site::getPages • boolean topdown umgekehrte Reihenfolge der Rückgabe Rückgabe: PageIterator Seiten 22 EGOTEC® 4 7.1.2.5. getSiblings Page::getSiblings ( $ query = array(), $ param = array() ) Gibt alle Geschwister zurück. Gibt unter Benutzung von getPages alle Geschwister der Seite als Page_Iterator-Objekt zurück. Parameter: $query array zusätzliche Abfrage Parameter $param aray zusätzliche Parameter • • next Von der aktuellen Seite aus gesehen nur die "rechten" Geschwister anzeigen. reverse Die Richtung ändern, also z.B. bei next=true die "linken" Geschwister anzeigen. Siehe auch: Site::getPages Rückgabe: Page_Iterator 7.1.2.6. getUrl Page::getUrl ( $ param = array() ) Eine Url auf diese Seite erzeugen. Parameter: $param array Die Parameter $key=>$value. in der Form 7.1.2.7. hasRights Page::hasRights ( $ rights ) Prüft, ob der aktuelle Benutzer bestimmte Rechte auf dieser Seite hat. Parameter: $rights array Die zu prüfende Berechtigungen, z.B.: ● edit – Bearbeitung ● child – Neuen Untermenüpunkt erstellen ● view – Ansicht ● release - Freigabe 23 Entwicklerhandbuch 7.1.3. Methoden zur Bearbeitung 7.1.3.1. update Page::update ( $ param ) Schreibt Änderungen in die DB und setzt eine Bestätigungsnachricht in $this->message. Parameter: $param array Ein assoziatives Feld mit den Inhalten der Seite. Es müssen nicht alle Inhalte gesetzt sein. field array extra array • rights array Weitere Update Methoden: • • Page::updateExtra ( $ extra ) Schreibt Änderungen im Bereich extra in die DB. Achtung: Der Parameter muss immer ALLE extra-Werte enthalten, nicht nur die neuen. Andernfalls werden nicht angegebene extra-Felder gelöscht Parameter: $extra array Page::updateField ( $ field ) Inhalte ändern. Parameter: $field array Page::updateRights ( $ rights ) Rechte ändern. Parameter: $rights array Ein assoziatives Feld mit zwei Einträgen • rights • • edit => group_id,role_id;group_id,role_id users 7.1.3.2. newChild Page::newChild ( $ field = array(), $ extra = array() ) 24 EGOTEC® 4 Erstellt einen neuen Eintrag als Kind der aktuellen Seite. Gibt den neuen Eintrag als Page_Iterator-Objekt zurück Parameter: $field array Vorbelegungen für die Tabellenfelder $extra array Vorbelegungen für die extra-Felder Rückgabe: $new_page Object 7.1.3.3. addChild Page::addChild ( $ page_id = "", $ child_id ) 7.1.3.4. linkTo Page::linkTo ( $ id ) Verlinkt eine Seite an eine bestimmte Stelle. $id ID der neuen übergeordneten Seite Rückgabe: null 7.1.3.5. unlinkFrom Page::unlinkFrom ( $ rem ove_from ) Entfernt eine Seite aus einem Ast. Parameter: $rem ove_from string ID des Parent aus dem entfernt werden soll 7.1.3.6. move Page::move ( $ from , $ to ) Verschiebt eine Seite an eine bestimmte Stelle. Parameter: $from integer ID der Seite bei der diese Seite entfernt werden soll $to integer ID der Seite bei der diese Seite eingehängt werden soll Rückgabe: null 7.1.3.7. delete Page::delete ( ) Löscht eine Seite und deren Unterseiten. Die Seite bleibt in der DB erhalten. Es wird lediglich ein Löschen-Flag gesetzt 25 Entwicklerhandbuch 7.1.4. Öffentliche Attribute 7.1.4.1. field array Page::$field Die Seitenihalte. 7.1.4.2. extra array Page::$extra Seitentypspezifische Zusatzfelder. 7.1.4.3. a_user string Page::$a_user Name des Benutzers, der diese Seite erstellt hat. 7.1.4.4. c_user string Page::$c_user Name des Benutzers, der die letzten Änderungen vorgenommen hat. 26 EGOTEC® 4 7.2. Page_Iterator 7.2.1. Ausführliche Beschreibung Diese Klasse stellt für getPages, getChildren, ... einen Iterator zur Verfügung. Die Rückgabewerte dieser Methoden sind vom Typ Page_Iterator. Mit Hilfe eines foreach können die Ergebnisse dann sowohl in PHP als auch in Smarty durchlaufen werden. Beispiel: 1. 2. 3. 4. 5. $kinder = $page->getChildren(); while($kinder->nextPage()) { // Die Kinder abarbeiten echo( "ID: " . $kinder->page->Record["id"]); } 7.2.2. Öffentliche Methoden 7.2.2.1. numRecords Page_Iterator::numRecords ( ) Liefert die Anzahl der Ergebnisse zurueck. Diese Funktion liefert die Anzahl der Ergebnisse einer SQL Abfrage durch Site::getPages() zurueck. Rueckgabe von 0 oder (void) bedeutet, dass keine Ergebnisse vorliegen. 1. 2. 3. 4. $kinder = $page->getChildren(); if($kinder->numRecords()) { // Es sind Kinder vorhanden } Rückgabe: int Anzahl der Ergebnisse 7.2.2.2. nextPage Alias zu next. 7.2.3. Methoden für das Interface Iterator 7.2.3.1. current Page_Iterator::current ( ) Iterator: Aktuelles Element zurückgeben. 7.2.3.2. key Page_Iterator::key ( ) Iterator: Aktuellen Schlüssel, hier Index der Ergbenisse, zurückgeben. 7.2.3.3. next Page_Iterator::next ( ) Iterator: Zum nächsten Element springen. Rückgabe: Object::Page Die angefragte Page oder false 27 Entwicklerhandbuch 7.2.3.4. rewind Page_Iterator::rewind ( ) Iterator: Zurücksetzen. 7.2.3.5. valid Page_Iterator::valid ( ) Iterator: Ist in $page ein Ergebnis enthalten? 7.2.4. Öffentliche Attribute 7.2.4.1. page Page Page_Iterator::$page Das Page Objekt. 28 EGOTEC® 4 7.3. Site 7.3.1. Ausführliche Beschreibung Diese Klasse kapselt die Site-Einträge. Die Site Informationen werden in der Datei site im site Verzeichnis in der Datei conf.ini gespeichert. Beispiel bei der Site demo: site/dem o/conf.ini 7.3.2. Öffentliche Methoden 7.3.2.1. getRoot Site::getRoot ( $ param = array() ) Gibt die Startseite als Objekt zurück. Diese Methode erzeugt ein Page Objekt der Startseite. Parameter: $param array Zusätzliche Parameter: • • • Rückgabe: Page Startseite string language Sprache boolean deleted true, wenn gelöschte Seiten ausgegeben werden sollen, sonst false array rights Auflistung der bnötigten Rechte. 7.3.2.2. getPage Site::getPage ( $ id, $ param = array() ) Erwartet einen Seitennamen oder eine Seitenurl und gibt das zugehörige Page Objekt aus. Parameter: $id string Id, Name oder Url der Seite. $param array Zusätzliche Parameter: • • • string language Sprache boolean deleted true, wenn gelöschte Seiten ausgegeben werden sollen, sonst false array rights Auflistung der bnötigten Rechte. Rückgabe: Page Page 29 Entwicklerhandbuch 7.3.2.3. getPageId Site::getPageId ( $ nam e ) Erwartet einen Seitennamen oder eine Seitenurl und gibt die zugehörige ID aus. Parameter: $nam e string Name bzw. Url der Seite, Rückgabe: integer Seiten-ID 7.3.2.4. getPages Site::getPages ( $ query = array(), $ param = array() ) Gibt eine Liste von Seiten zurück. Diese Methode erzeugt ein Page_Iterator Objekt, das mit jedem Aufruf von next_page den Eintrag einer Seite der Liste zurückliefert. Parameter: $query array zusätzliche Abfrage-Parameter (where), auch fields kann gesetzt werden $param array Zusätzliche Parameter: • • • • • • string language Sprache boolean deleted 1 - nur gelöschte Seiten, 0 - nur nicht gelöschte Seiten, -1 - alle Seiten, ob gelöscht oder nicht array rights Auflistung der bnötigten Rechte. string auth_or Die Bedingungen, die eine Seite erfüllen muss, damit sie trotz fehlender Rechte ausgegeben wird. string deleted_or Die Bedingungen, die eine Seite erfüllen muss, damit sie ausgegeben wird, obwohl sie gelöscht bzw. nicht gelöscht ist. string c_date Die Seiteninhalte zum festgesetzten Datum aus dem Archiv holen. 7.3.2.5. getErrorPage Site::getErrorPage ( ) Gibt die Startseite als Objekt zurück. Diese Methode erzeugt ein Page Objekt der Fehlerseite. Falls keine Id für eine Fehlerseite in der Konfigurationsdatei eingetragen ist, wird die Startseite zurückgegeben. Rückgabe: Page Fehlerseite. 30 EGOTEC® 4 7.3.2.6. getPageUrl Site::getPageUrl ( $ page_id, $ param s = array() ) Eine Url auf eine Seite erzeugen. Parameter: $page_id integer Die ID der Seite, auf die verlinkt werden soll. $param s array Die Parameter in der Form $key=>$value. 7.3.2.7. getUrl Site::getUrl ( $ param ) Eine Url erzeugen. Parameter: $param array Die Parameter $key=>$value. in der Form 7.3.2.8. getMediaSite Site::getMediaSite ( ) Gibt die zugehörige Mediasite zurück. Falls die Site selbst eine Multimedia Site ist, dann gibt sie sich selbst zurück. Rückgabe: object Die zugehörige Multimedia Site. 7.3.2.9. getMediaUrl Site::getMediaUrl ( $ id, $ param = array() ) Eine Url auf eine Multimediadatei erzeugen. Parameter: $id integer Die ID der Datei, auf die verlinkt werden soll. $param array Die Parameter in der Form $key=>$value. 7.3.2.10. getLanguages Site::getLanguages ( ) Alle von dieser Site unterstützte Sprachen als Array zurückgeben. return array Alle Kürzel der unterstützten Sprachen. 31 Entwicklerhandbuch 7.3.2.11. setLanguage Site::setLanguage ( $ language = '' ) Setzt die Sprache. Parameter: $language string Die Sprache wird für die Ausgabe der Seiten benötigt. Sie kann jederzeit geändert werden. Wird keine Sprache übergeben, dann wird die Standardsprache benutzt. 7.3.2.12. getSkins Site::getSkins ( ) Alle von dieser Site unterstützte Designs als Array zurückgeben. return array Alle Namen der unterstützten Designs. 7.3.3. Öffentliche Attribute 7.3.3.1. name string Site::$name Name der Site. 7.3.3.2. site array Site::$site Die Daten der Site. 7.3.3.3. skin string Site::$skin = '' Das aktuelle Design. 7.3.3.4. language string Site::$language Die aktuelle Sprache. 32 EGOTEC® 4 7.4. Smarty 7.4.1. Ausführliche Beschreibung Die Template-Engine, die in EGOTEC eingesetzt wird, heißt Smarty (http://smarty.php.net). Speziell für EGOTEC haben wir einige Plugins definiert, mit denen man aus Smarty heraus auf die Funktionalität von EGOTEC zugreifen kann. Näheres hierzu finden Sie im Designerhandbuch. Hier wird beschrieben, wie Sie von PHP aus auf Smarty zugreifen. 7.4.2. Öffentliche Methoden 7.4.2.1. assign Smarty::assign ( $ tpl_var, $ value = null ) assigns values to template variables Parameter: $tpl_var array|string the template name(s) $value mixed the value to assign variable 7.4.2.2. fetch Smarty::fetch ( $ $ $ $ ) resource_nam e, cache_id = null, com pile_id = null, display = false executes & returns or displays the template results Parameter: $resource_nam e string $cache_id string $com pile_id string $display boolean 33 Entwicklerhandbuch 7.5. Ego_Sql 7.5.1. Ausführliche Beschreibung Bildet eine Abstraktionsschicht zu verschiedenen SQL Datenbanken. SQL Anfragen werden über Query-Arrays übergeben. Die Datenbanken werden über adodb angesprochen. Diese Klasse fungiert auch als Iterator und kann daher auch mit foreach verwendet werden. 7.5.2. Öffentliche Methoden 7.5.2.1. Konstruktor Ego_Sql::__construct ( $ query = array() ) Die Datenbankverbindung herstellen. Als optionaler Parameter kann gleich eine Datenbankabfrage in Form eines selects mitgegeben werden. Parameter: $query array eine Datenbankabfrage (siehe select) 7.5.2.2. select Ego_Sql::select ( $ query ) Ein SQL select Statement absetzen. • • • • • • • • • fields [string] => was from/table [string] => Tabellen where [string] => Bedingungen • select fields from from where where • select * from base_de where id=1 group [string] => Gruppierung • select fields from from left join join group by group • select * from egotec_user left join egotec_user_group using(user_id) group by egotec_user.user_id order [string] => Sortierung • select fields from from where where order by order • select * from base_de where title like '%test%' order by title asc limit [string] => from/until • select fields from from where where limit lim it • select * from base_de where type='news_entry' limit 0,5 join [array] => weitere Tabellen in Abfrage aufnehmen • select fields from from left join join[0] left join join[1] ... • select * from base_de left join egotec_user order_by_set [string] => Kommaseparierte Liste von Werten order_by_set_field [string]=> Feldname, der über diese Liste sortiert wird <br/>Die Abfrage sortiert nach der Position des Wertes von order_by_set_field in order_by_set. 34 EGOTEC® 4 select fields,find_in_set(order_by_set_field, order_by_set) as order_id from from order by order_id union => Ein Feld bestehend aus weiteren $query Feldern. Mehrere selects können so zu einer Abfrage zusammengefasst werden. • • Parameter: $query Array Ein assoziatives Feld, das die Selektion beschreibt. Rückgabe: Integer Zeiger auf die Abfrage 7.5.2.3. nextRecord Ego_Sql::nextRecord ( ) Die nächste Ergebniszeile holen. Diese Funktion gibt true zurück, wenn eine weitere Zeile von der Datenbank geholt werden konnte. Falls schon alle Ergebnisse abgefragt wurden, wird false zurückgegeben. Die Ergebniszeile steht in dem assoziativen Feld Siehe auch: $Record. Die Feldnamen werden als Schlüssel verwendet. Rückgabe: Boolean true, wenn noch eine Zeile von der Datenbank geholt werden konnte 7.5.2.4. numRecords Ego_Sql::numRecords ( ) Anzahl der Ergebniszeilen. Rückgabe: integer Anzahl der Zeilen der letzten Datenbankabfrage. Falls noch keine Abfrage durchgeführt wurde, wird 0 zurückgegeben. 7.5.2.5. insert Ego_Sql::insert ( $ query ) Einen Eintrag hinzufügen. • • • • • replace [bool] => replace Flag table [string] => Tabelle set [array] => assoziatives key/val array key [array] => keys (Feldnamen) val [array] => Werte Parameter: $query Array assoziatives Feld, das den neuen Eintrag bestimmt Rückgabe: Integer Zeiger auf die Abfrage 35 Entwicklerhandbuch 7.5.2.6. replace Ego_Sql::replace ( $ query ) Einen Eintrag ersetzen. Wie insert, aber mit gesetztem replace Flag. Parameter: $query Array assoziatives Feld, das den Eintrag bestimmt Rückgabe: Integer Zeiger auf die Abfrage 7.5.2.7. update Ego_Sql::update ( $ query ) Einen Eintrag aktualisieren. • • • • • • table [string] => Tabelle set [array] => assoziatives key/val array set_f [array] => assoziatives key/val array mit Funktionsaufrufen key [array] => keys (Feldnamen) val [array] => Werte where [string] => Bedingungen • update table set key[0]="val[0]", <i>key[1]</i>="val[1]", ... where where • update base_de set name="Home", title="Homepage" where id=1* Parameter: $query Array assoziatives Feld, in dem angegeben wird, was wie aktualisiert wird Rückgabe: Integer Zeiger auf die Abfrage 7.5.2.8. delete Ego_Sql::delete ( $ query ) Einträge aus einer Tabelle löschen. • • from/table [string] => Tabelle where [string] => Bedingungen • delete from from where where Parameter: $query Array assoziatives Feld, in dem angegeben wird, was gelöscht werden soll Rückgabe: Integer Zeiger auf die Abfrage 36 EGOTEC® 4 7.5.3. Methoden für das Interface Iterator 7.5.3.1. current Ego_Sql::current ( ) Iterator: Aktuelles Element zurückgeben. Rückgabe: array 7.5.3.2. key Ego_Sql::key ( ) Iterator: Aktuellen Schlüssel, hier Index der Ergbenisse, zurückgeben. Rückgabe: integer 7.5.3.3. next Ego_Sql::next ( ) Iterator: Zum nächsten Element springen. Rückgabe: 7.5.3.4. rewind Ego_Sql::rewind ( ) Iterator: Zurücksetzen. 7.5.3.5. valid Ego_Sql::valid ( ) Iterator: Ist in $Record ein Ergebnis enthalten? 37 Entwicklerhandbuch 7.6. Auth 7.6.1. Ausführliche Beschreibung Benutzerauthentifizierung und Rechtevergabe. 7.6.2. Öffentliche Methoden 7.6.2.1. hasPermission Auth::hasPermission ( $ group, $ role = '', $ flag = false ) Prüft, ob ein Benutzer Mitglied der Gruppe/Rolle ist. Parameter: $group string Gruppen ID / array(group=>, role=>, flag=>) $role string Rollen ID $flag boolean Mit Untergruppen prüfen. Rückgabe: boolean true, wenn der Benutzer die Berechtigung besitzt. 7.6.2.2. checkPermission Auth::checkPermission ( $ group, $ role = '', $ flag = false ) Es wird geprüft, ob ein Benutzer Mitglied der Gruppe/Rolle ist. Ist das nicht der Fall, dann wird die Ausnahme Auth::PERMISSION_DENIED erzeugt. Ausnahmebehandlung: Auth::PERMISSION_DENIED Parameter: $group string Gruppen ID / array(group=>, role=>, flag=>) $role string Rollen ID $flag boolean Mit Untergruppen prüfen. Rückgabe: boolean true, wenn der Benutzer die Berechtigung besitzt. 7.6.2.3. reset Auth::reset ( ) Authentifizierung zurücksetzen. 38 EGOTEC® 4 7.6.2.4. translate Auth::translate ( $ string ) Übersetzt einen String in die Sprache des Benutzers. Es wird auf das entsprechende Smarty-Plugin zurückgegriffen. Parameter: $string string Der Originaltext. Rückgabe: string Die Übersetzung. 7.6.2.5. validate Auth::validate ( $ usernam e, $ password ) Hier werden zusätzliche Bedingungen überprüft. Die Überprüfung des Benutzernamens und Passworts erfolgt in abgeleiteten Klassen. Hier wird getestet, ob der Benutzer sich auf einem Liveserver anmelden darf, falls das aktuelle System ein Liveserver ist. Ausnahmebehandlung: Auth_Exception Parameter: $usernam e string Benutzername. $password string Passwort. Rückgabe: string Die Benutzer ID. 39