Contenido "AJAX-API"
Verfasst: Mo 20. Aug 2007, 12:23
HIER GIBT ES DIE AKTUELLE VERSION
Hallo zusammen,
derzeit setzte ich eine WebSite mit Contenido um, bei der ich allein auf Grund des Seitenaufbaus nicht um eine AJAX-Schnittstelle zu Contenido herumkomme. Im Netzt bin ich schon auf eine geeignete AJAX-liberay gestoßen (http://crossbrowserajax.com/). Als Basis-Funktionsparameter übergibt man einfach die Id des HTML-Elementes (z.B. DIV) dessen Inhalt ersetzt werden soll und die URL des Scriptes, welches den (neuen) Inhalt liefert. Um darauf aufbauend aber eine vernünftige Schnittstelle zu Contenido zu schaffen, müsste man meiner Meinung nach noch ein paar Dinge modifizieren und ergänzen. Letztendlich möchte ich über die AJAX-Schnittstelle spezifische Contenido-Container bzw. die zugewiesenden Module ausführen können und den generierten Code der Container/Module dann wie oben beschrieben zurückgeben. Die AJAX-Komponente arbeitet auch einwandtfrei, nur blicke ich bei der Codegenerierung der Module nicht ganz durch. Habe dafür die Datei "functions.con2.php" ins Auge gefasst, deren FUnktion "conGenerateCode" ja meines Erachtens die Codegenerierung der ganzen Seite (Layout, Template, Module) bewerkstelligt, aber darauf komm ich später zurück. Hier erstmal meine Grundgedanken für das Funktionsprinzip der "AJAX-API":
1. Blankes Layout mit einem Container erstellen
2. Modul "AJAX-API" (Details weiter unten)
3. Template "AJAX-API" erstellen, "blankes" Layout zuweisen und das "AJAX-API"-Modul dem Container zuordnen
4. "System"-Artikel erstellen und das entsprechende Layout zuweisen
5. CBA-Javascript-Libary in die "normalen" Layouts einnbinden
6. Javascript-Funktion erstellen, die CBA-Aufruf steuert (Details weiter unten)
Zu 2, "AJAX-API"-Modul":
Gehen wir mal davon aus, der erstellte Artikel mit dem AJAX-API-Template hat die idcat=2 und die idart=5, dann müsste die Javascriptfunktion der CBA-Komponente die URL "front_content.php?idcat=2&idart=5" aufrufen. Damit die AJAX-API auch weiß, von welchem Artikel sie Content zurückgeben soll, ergänzen wir folgende Variablen im URL-Aufruf "ajaxidcat" und "ajaxidart". Zusätzlich kann noch eine weitere optionale Variable "ajaxidcnt" übergeben werden, die den Container spezifiziert, dessen Modul ausgeführt werden soll. Wird dieser Parameter ausgelassen, würde/müsste sich die AJAX-API die Containerid des "Hauptinhaltes" (z.B. Container/Modul mit "CMS_HTML[x]") über eine zuvor erstellte Mandanteneinstellung holen. Das Modul müsste nun den Outputcode des Moduls aus der Datenbank holen und sowohl die entsprechende Container-Configuration, als auch evenutell im Modul vorhandene CMS-Content-Typen (CMS_HTML[x] usw.) laden und im Modulcode ersetzten. Anschließend müsste der erzeugte Code nur noch CBA konform ausgeben werden, was aber werniger problematisch ist.
Zu 6, "Javascript-Funktion":
function setContent ( id, idcat, idart ) {
var idcnt = (arguments[3]) ? arguments[3] : "false";
cbaUpdateElement ( id, "front_content.php?idcat=2&idart=5&ajaxidcat="+idcat+"&ajaxidart="+idart+"&ajaxidcnt="+idcnt )
}
PARAMETER "setContent":
id = ID des HTML-Elements dessen Inhalt ersetzt werden soll
idcat = IDCAT des Artikel dessen Inhalt dargestellt werden soll
idart = IDART des Artikel dessen Inhalt dargestellt werden soll
idcnt (optional) = ID des Containers dessen Modul ausgführt werden soll.
Desweiteren bietet die Funktion "cbaUpdateElement" weitere Parameter, mit denen sich das Cacheverhalten steuern lässt, "loading"-Texte eingebaut werden können, was an dieser Stelle aber für die Funktiontüchtigkeit der AJAX-API erstmal als nebensächlich erschien.
Um den Suchmaschinen die vollständige Indexierung der Seite zu ermöglichen habe ich auf der gesamten Seite eine Funktion zur URL-Erstellung verwendet. Diese erkennt zum einen ob die Seite im Contenido-Backend, das Frontend über einen Browser oder ob das Frontend von einem Suchmaschinenbot aufgerufen wurde und erzeugt entsprechend URLs mit oder ohne AJAX.
Im Prinzip habe ich meine Idee soweit auch schon realisiert, nur komm ich mich der Codegenerierung nicht weiter. Wäre also eine große Hilfe, könnte mir jemand Code zur Verfügung stellen, mit dem ich oben beschriebenes bewerkstelligen kann (Anhand der idcat, idart und idcnt, den Code des entsprechend zugewiesen Moduls ausführen und zurückgeben). Die dann feriggestellte "AJAX-API" stelle ich im Anschluss natürlich auch gerne allen zur Verfügung.
Wäre super jemand könnte mir rasch helfen oder zumindest einen brauchbaren Hinweis geben
und verbleibe mit besten Grüßen,
Schwarzesocke
HIER GIBT ES DIE AKTUELLE VERSION
Hallo zusammen,
derzeit setzte ich eine WebSite mit Contenido um, bei der ich allein auf Grund des Seitenaufbaus nicht um eine AJAX-Schnittstelle zu Contenido herumkomme. Im Netzt bin ich schon auf eine geeignete AJAX-liberay gestoßen (http://crossbrowserajax.com/). Als Basis-Funktionsparameter übergibt man einfach die Id des HTML-Elementes (z.B. DIV) dessen Inhalt ersetzt werden soll und die URL des Scriptes, welches den (neuen) Inhalt liefert. Um darauf aufbauend aber eine vernünftige Schnittstelle zu Contenido zu schaffen, müsste man meiner Meinung nach noch ein paar Dinge modifizieren und ergänzen. Letztendlich möchte ich über die AJAX-Schnittstelle spezifische Contenido-Container bzw. die zugewiesenden Module ausführen können und den generierten Code der Container/Module dann wie oben beschrieben zurückgeben. Die AJAX-Komponente arbeitet auch einwandtfrei, nur blicke ich bei der Codegenerierung der Module nicht ganz durch. Habe dafür die Datei "functions.con2.php" ins Auge gefasst, deren FUnktion "conGenerateCode" ja meines Erachtens die Codegenerierung der ganzen Seite (Layout, Template, Module) bewerkstelligt, aber darauf komm ich später zurück. Hier erstmal meine Grundgedanken für das Funktionsprinzip der "AJAX-API":
1. Blankes Layout mit einem Container erstellen
2. Modul "AJAX-API" (Details weiter unten)
3. Template "AJAX-API" erstellen, "blankes" Layout zuweisen und das "AJAX-API"-Modul dem Container zuordnen
4. "System"-Artikel erstellen und das entsprechende Layout zuweisen
5. CBA-Javascript-Libary in die "normalen" Layouts einnbinden
6. Javascript-Funktion erstellen, die CBA-Aufruf steuert (Details weiter unten)
Zu 2, "AJAX-API"-Modul":
Gehen wir mal davon aus, der erstellte Artikel mit dem AJAX-API-Template hat die idcat=2 und die idart=5, dann müsste die Javascriptfunktion der CBA-Komponente die URL "front_content.php?idcat=2&idart=5" aufrufen. Damit die AJAX-API auch weiß, von welchem Artikel sie Content zurückgeben soll, ergänzen wir folgende Variablen im URL-Aufruf "ajaxidcat" und "ajaxidart". Zusätzlich kann noch eine weitere optionale Variable "ajaxidcnt" übergeben werden, die den Container spezifiziert, dessen Modul ausgeführt werden soll. Wird dieser Parameter ausgelassen, würde/müsste sich die AJAX-API die Containerid des "Hauptinhaltes" (z.B. Container/Modul mit "CMS_HTML[x]") über eine zuvor erstellte Mandanteneinstellung holen. Das Modul müsste nun den Outputcode des Moduls aus der Datenbank holen und sowohl die entsprechende Container-Configuration, als auch evenutell im Modul vorhandene CMS-Content-Typen (CMS_HTML[x] usw.) laden und im Modulcode ersetzten. Anschließend müsste der erzeugte Code nur noch CBA konform ausgeben werden, was aber werniger problematisch ist.
Zu 6, "Javascript-Funktion":
function setContent ( id, idcat, idart ) {
var idcnt = (arguments[3]) ? arguments[3] : "false";
cbaUpdateElement ( id, "front_content.php?idcat=2&idart=5&ajaxidcat="+idcat+"&ajaxidart="+idart+"&ajaxidcnt="+idcnt )
}
PARAMETER "setContent":
id = ID des HTML-Elements dessen Inhalt ersetzt werden soll
idcat = IDCAT des Artikel dessen Inhalt dargestellt werden soll
idart = IDART des Artikel dessen Inhalt dargestellt werden soll
idcnt (optional) = ID des Containers dessen Modul ausgführt werden soll.
Desweiteren bietet die Funktion "cbaUpdateElement" weitere Parameter, mit denen sich das Cacheverhalten steuern lässt, "loading"-Texte eingebaut werden können, was an dieser Stelle aber für die Funktiontüchtigkeit der AJAX-API erstmal als nebensächlich erschien.
Um den Suchmaschinen die vollständige Indexierung der Seite zu ermöglichen habe ich auf der gesamten Seite eine Funktion zur URL-Erstellung verwendet. Diese erkennt zum einen ob die Seite im Contenido-Backend, das Frontend über einen Browser oder ob das Frontend von einem Suchmaschinenbot aufgerufen wurde und erzeugt entsprechend URLs mit oder ohne AJAX.
Im Prinzip habe ich meine Idee soweit auch schon realisiert, nur komm ich mich der Codegenerierung nicht weiter. Wäre also eine große Hilfe, könnte mir jemand Code zur Verfügung stellen, mit dem ich oben beschriebenes bewerkstelligen kann (Anhand der idcat, idart und idcnt, den Code des entsprechend zugewiesen Moduls ausführen und zurückgeben). Die dann feriggestellte "AJAX-API" stelle ich im Anschluss natürlich auch gerne allen zur Verfügung.
Wäre super jemand könnte mir rasch helfen oder zumindest einen brauchbaren Hinweis geben
und verbleibe mit besten Grüßen,
Schwarzesocke
HIER GIBT ES DIE AKTUELLE VERSION