Autor | Freespacer |
Datum | 08.12.2006 05:27 |
Beiträge: | Hallo,
es geht in erster Linie, um den Feature Wunsch von Boby im BT #974, aber auch prinzipiell die AJAX-Technik. Wir wissen ja alle, dass jedes große Content-Management-System lange Ladezeiten mit sich bringt. Ich habe vor, die Ajax-Technik in OPN zu integrieren, um die Aktualisierung der gesamten Webseite zu unterbinden und gleichzeitig die Effektivität zu erhöhen. Die AJAX-Technik habe ich bereits fertig und das Nachladen von Daten per POST- und GET-Methode ohne Aktualisierung der gesamten Seite funktioniert in allen modernen Browsern (FF/IE/Opera) soweit. Jetzt zu meinem Problem. Gibt es in OPN eine Funktion, die nur den Inhalt der Sitebox/Centerbox neu baut und die geänderten Parametern an das jeweilige Modul übertragt? Für dieses Vorhaben brauche ich für die Sitebox und Centerbox ein "Ajax"-Zugang oder soll ich sagen ein "ONLY-Content"-Zugang in OPN. Gibt es da eine Möglichkeit oder muss man sich da was zusammen basteln? Gruß Sebastian |
Autor | stefan |
Datum | 08.12.2006 05:57 |
Beiträge: | nun das ist ein grösseres unterfangen. ich habe mir hier auch schon mal eine AJAX class genaut die auch entsprechend geht, allerdings bin ich dann ebenso auf einproblem gestossen das dann in die struktur einzubetten von opn
du hast da mehere probleme sideboxen diese kannst du per class abruf dir holen das ist unkritisch centerbox eingeschränkt möglich s. dazu inline box da mach ich das ja aber was ist mit dem modul selbst also der index seite eines modules da has du ein problem ebenso was nützt dir nur der ccontent es soll sich ja was verändern und auch nicht wieder alles übertragen werden. beispiel umschalten eines schalters da willst dan doch ned die ganze side/centerbox übertragen also brauchst dazu auch noch art interface aber vielleicht ist deine classe ja anderes aufgebaut zeigt doch mal. |
Autor | Freespacer |
Datum | 08.12.2006 06:52 |
Beiträge: | stefan schrieb am 08.12.2006 um 05:57:55 Uhr folgendes:
Na, dann bin ich ja auch nicht alleine. stefan schrieb am 08.12.2006 um 05:57:55 Uhr folgendes:
Das habe ich mir schon fast gedacht. stefan schrieb am 08.12.2006 um 05:57:55 Uhr folgendes:
Tolle Idee, und wie mache ich das in einem Standalone-Script? Da fangen doch erst die Probleme an. stefan schrieb am 08.12.2006 um 05:57:55 Uhr folgendes:
Inlinebox??? Also, mir wäre ein vollständiger Neuaufbau wie auch teilweiser Aufbau der jeweiligen Centerbox lieber. Ganz ehrlich. In der Centerbox kann man noch viele andere Container einbetten und diese zum Aktualisieren zwingen, so ist das nicht. stefan schrieb am 08.12.2006 um 05:57:55 Uhr folgendes:
Schön wäre es, wenn es kein Problem ist. stefan schrieb am 08.12.2006 um 05:57:55 Uhr folgendes:
STOP!!! Wirf bitte nicht alles durcheinander. Ich zähle mal hier auf, wo man Ajax in OPN verwenden kann und wie OPN darauf reagieren soll. 1. Einstellungen wie Admin-Menü, Benutzer-Daten, werden per Ajax aktualisiert. Die OPN-Seite wird dabei nicht komplett geladen, sondern nur die Einstellungen werden transferiert und entsprechend wie die WAITING-BOX eine Info an den User übermittelt, dass die Einstellung gespeichert wurde. 2. Centerbox/Sidebox: Manchmal muss der komplette Content der Centerbox/Sidebox aktualisiert werden (Siehe Kalender). Man kann auch für alle anderen Centerbox/Sidebox einzelne Container aktualisieren bzw. nachladen. Betrifft Content: OPN muss die Daten und den Content aufbereiten, dass kann man mit JavaScript alleine nicht machen, da jeder Browser auf JavaScript anders reagiert. Bei den Eingabefeldern, etc. sieht es anders aus. Der Aufbau eines kompletten Contents will ich nicht alleine auf JavaScript stützen, dann lieber der Tranfer von XHTML+Daten per PHP bzw. OPN. Dieser macht nur zu einem kleinen Teil aus. stefan schrieb am 08.12.2006 um 05:57:55 Uhr folgendes:
PHP-Klasse ist gut, ich bin noch im Anfangsstadium. Ich konnte höchsten mit einem kleinem JavaScript, in OPN eingebunden, einen Teil des Contents nachladen oder auch entsprechend ersetzen. Dieses JavaScript wird später noch sehr stark erweitert. Dafür habe ich den SPAN-Tag mit einer ID genommen (unsichtbarer Container) und innerhalb der Sidebox/Centerbox gelegt und innerhalb des SPAN-Tags habe ich den eigentlichen Inhalt vom Modul geladen. Nur beim Nachladen des Content mit dem Aufbau des OPN-Moduls bin ich auf ein Hinternis gestoßen. Aber so wie ich die Sache jetzt sehe, müssen noch einige Funktionen in OPN integriert werden, damit dieser den Content (ob alles oder auch nur ein kleiner Teil) mit Parameterübergabe des jeweiligen Moduls ein neuen Content baut. Jetzt bin ich am Überlegen, wie man das am Besten ohne größeren Aufwand hinbekommt. Gruß Sebastian |
Autor | stefan |
Datum | 08.12.2006 07:35 |
Beiträge: | ok ich bin ein etwas anderen weg gegangen. die class dient mir dazu das ich php funktionen per ajax aufrufe. somit kann ich den 2ten teil (das verändern von daten) einfach realisieren nur ist da die struktur in opn noch nicht für ausgelegt. |
Autor | Freespacer |
Datum | 08.12.2006 08:32 |
Beiträge: | stefan schrieb am 08.12.2006 um 07:35:18 Uhr folgendes:
Äh, kannst du mir die Klasse mal zeigen, irgendwie werde ich aus deiner Antwort nicht wirklich schlau. Hier ist zur Zeit mein kleines Ajax-Script:
Dieses Script ist zwar klein und wird vom Browser in der Regel nur 1x geladen. Ein PHP-Script ohne Ajax müsste für jede Änderung komplett angestossen werden. Das o.g. Script ist nur die Struktur, laßt sich aber noch viel weiter ausbauen und verfeinern. Mit diesem Script kannst du kleine wie auch große Sachen verändern. Da brauchst du für das Aktualisieren und/oder das Austauschen des Contents/Settings auch keine großartige PHP-Klasse. Gesendet wird ja grundsätzlich mit POST. Das o.g. Script läßt auch GET-Methode zu. Im Modul brauchst du nur folgenden Code einfügen:
Beim Draufklicken wird das Request an OPN abgesetzt. Leider ist OPN noch nicht in der Lage die Daten zu verarbeiten und ein neues Content zurück zu schicken, um das vorhandene Content zu ersetzen bzw. zu aktualisieren. Hört sich eigentlich sehr simple an. Was schlägst du für die Änderungen an OPN vor? Gruß Sebastian |
Autor | stefan |
Datum | 09.12.2006 11:37 |
Beiträge: | wo man das an setzt ist eine gute frage da ja wenn du z.b. sideboxen senden wilst diese mit einer id versehen werden müssen damit du mit
document.getElementById("sideboxid1").innerHTML = val; entsprechedn die die daten auch setzen kannst also den inhalt, im theme das einzubauen wäre da dann recht einfach, da das aber aus opn kommen soll ist das im theme nicht zu machen. bliebe nur ein div um jede box mit der id der box zu setzen. dann ändert sich aber die verschachtelungs tiefe auch nicht wirklich schön, nur wenn das sein soll das sehe ich da nicht wirklich einen anderen weg |
Autor | stefan |
Datum | 09.12.2006 17:14 |
Beiträge: | if(methode == 'GET') { requestpath = requestpath + "?" + getpostdata; }
was machst du bei codierten urls ? |
Autor | Freespacer |
Datum | 09.12.2006 18:33 |
Beiträge: | stefan schrieb am 09.12.2006 um 11:37:23 Uhr folgendes:
Die Sidebox selbst, will ich keine ID legen. Denn es kann ja auch sein, dass in der Sidebox nur ein bestimmter Inhalt ausgetauscht werden sollte und nicht gleich alles. Das heißt, diese SPAN-Tag (es können auch mehrere sein) kann beliebig in der Sidebox festgelegt werden. DIV-Tags würde ich hier nicht verwenden, diese Container werden auch noch als Platzhalter verwendet, das heißt CSS-mäßig müsste man auch noch formatieren. Bei den SPAN-Tags sind es eben unsichtbare Container bzw. Container die auf die Formatierung der Webseite nicht auswirkt. Probiere mal folgendes ohne CSS aus:
Du siehst, dass bei DIV-Container ohne CSS umgebrochen wird. Daher bevorzuge ich lieber SPAN-Container und läßt sich auch innerhalb eines Textes einbetten ohne die Struktur des Textes zu zerstören. Auszug aus de.selfhtml.org im Bezug auf DIV-Tags:
Auszug aus de.selfhtml.org im Bezug auf SPAN-Tags:
Mein Kopf raucht schon und sucht fieberhaft nach einer Lösung für unser Problem. Aber ich habe bereits an einer Lösung für Centerbox/Sidebox gedacht: - das Ajax-Script greift auf das Hauptscript INDEX.PHP zu. Dort wird per POST neben den anderen Variablen noch die Variable ajax=true und z.B. module=/modules/calendar übertragen. Somit weiß OPN eigentlich schon, was gefordert wird. Denn Rest muss eine Ajax-Funktion in den Modulen den gewünschten Inhalt zurück geben. Somit wird nur der teilweise oder auch komplette Inhalt zurückgegeben. Einen anderen Weg kenne ich noch nicht. Aber wenigstens ist es ein Ansatz und wir müssen OPN nicht komplett umbauen, sondern nur ergänzen. stefan schrieb am 09.12.2006 um 17:14:20 Uhr folgendes:
Die Inhalte der Variabeln werden vorher von PHP urlencode() geparst und entsprechend in den HTML-Code eingebaut. Bei Formularen wird eben JavaScript mit diesem Befehl encodeURL() helfen müssen. Ich habe schon bereits weitere Funktionen in die Ajax.js eingebaut. Er kann jetzt auch mit HTTP-Codes umgehen. Das Ansprechen einer Statusbox wie "Daten werden geladen" bzw. "Daten nicht gefunden!" oder auch "Fehler in der Übertragung" wird angezeigt. Ähnlich wie jetzt die Wartebox, jedoch wird diese Box in Zukunft auch umgebaut. Gruß Sebastian |
Autor | stefan |
Datum | 09.12.2006 19:04 |
Beiträge: | du ich hab da auch schon was, ich habe entsprechende routien hinzugefügt bis auf die url codierung würde das gehen
und mit codierten urls rede ich nicht von HTML von der von durch opn codierten |
Autor | stefan |
Datum | 09.12.2006 19:10 |
Beiträge: | unter develop-demos hab ich mal ne demo dazu gebaut |
Autor | stefan |
Datum | 10.12.2006 09:55 |
Beiträge: | ich denke das beste wäre jetzt das mal praktisch in ein modul einzubauen allerdings stellt sich da auch die frage in welches also bei welcher function so wie was ist wenn man kein js an hat? das sollte man berücksichtigen. sinvoll wäre sowas ja z.b. in den admin einstellungen wie sidebox |
Autor | bdragon |
Datum | 10.12.2006 14:48 |
Beiträge: | Wie wäre es mit der Suche?
|
Autor | bdragon |
Datum | 13.12.2006 15:07 |
Beiträge: | Zu dem Thema auch ganz aktuell:
Google Web Toolkit http://code.google.com/webtoolkit/ gruß B.D.R.A.G.O.N.: Biomechanical Digital Replicant Assembled for Galactic Observation and Nullification Offiziell infiziert! |
Autor | Freespacer |
Datum | 31.12.2006 00:30 |
Beiträge: | Hallo!
Wollte mich nochmal wegen Ajax melden. @Stefan: Das Ajax-Construct-Driver, dass von dir geschrieben wurde, lässt sich das nicht als eigenständige Klasse "class.ajax.php" z.B. in $opnConfig['Ajax'] implementieren? Und dann jeweils in den Modulen wie folgt: $opnConfig['Ajax']->Enable_Ajax = true;
und in der Klasse class.opn_output.php würde ich folgenden Schalter einfügen, was eigentlich auch schon geschehen ist: if($opnConfig['Ajax']->is_Enabled) {
Eine nachträgliche Anpassung des driver_construct_ajax.php, um verschiedene URI der Klasse zu übergeben scheitert leider, weil die Werte nicht öffentlich (z.B. in $opnConfig) zugänglich ist. Daher wäre es mir lieb, wenn die Klasse in $opnConfig geladen wird. Nur weiß ich die Script-Reihenfolge in OPN nicht genau, was zu erst geladen wird und welches zum Schluß. Und nicht über Umwege wie z.B. im Search-Modul:
Gruß Sebastian |
Autor | Freespacer |
Datum | 05.01.2007 22:25 |
Beiträge: | So, habe den Ajax-Construct-Driver komplett herausgerissen und eine neue Klasse darauf aufgebaut. In der master.php wurde diese Klasse öffentlich in $opnConfig zugänglich gemacht. Die class.opn_output.php wurde diesbezüglich auch umgebaut.
Werde es aber erst nächste Woche im SVN veröffentlichen. Da muss ich noch eine Menge herumfeilen. Was zum Beispiel funktioniert ist: - Unter $opnConfig['opnajax'] wurde eine neue Klasse eingefügt class.ajax.php - Es wird von der Klasse auf Ajax-Elemente zugegriffen. - Verschiedene Module können auf die Ajax-Elemente zugreifen, ohne das sich die URIs überschneiden. Noch geplant: - Das "Search"-Modul wird komplett mit der AJAX-Klasse zusammen funktionieren. - Die Klasse, die für das Formular zuständig ist, wird für AJAX vorbereitet. - Fallback-Lösung, falls Ajax bzw. Javascript nicht aktiv ist. Das driver_construct_ajax.php wird nicht mehr benötigt. Man kann also gespannt sein. Gruß Sebastian |
Autor | Freespacer |
Datum | 07.01.2007 21:09 |
Beiträge: | Mit Experimental Rev. 111 wurde die Ajax-Technik besser ausgefeilt.
Die Klasse class.ajax.php wurde in $opnConfig['opnajax'] integriert, um die Unterstützung von Ajax im ganzen OPN-System zu gewährleisten. Das Modul "Search" bzw. "Suchen" unterstützt nun auch Ajax. Was noch fehlt ist eine Überprüfung, ob der Browser Ajax unterstützt. Idee ist, das OPN einmalig einen Ajax-Test-JavaScript lädt und einen Cookie im Browser ablegt, ob JS und Ajax funktionieren. Eine Abfrage, ob Ajax aktiviert ist, wurde bereits im "Search"-Modul integriert. Zum Deaktivieren von Ajax einfach in der Datei index.php folgendes am Anfang einfügen: $opnConfig['opnajax']->DisableAjax(); . Schon läuft es auf dem gewohntem Wege. Es können x-beliebige Funktionen für verschiedene Formulare und Module eingefügt werden. Die kommen sich nicht in die Quere. Jetzt muss noch die Klasse class.opn_pagebar.php auch mit Ajax funktionieren, da muss das Zusammenspiel noch funktionieren. Eine Idee habe ich dazu auch schon. Gruß Sebastian |
Autor | stefan |
Datum | 08.01.2007 14:48 |
Beiträge: | Mal 2 Anmerkungen
1) Stand Rev. 111 hast du die classe in der master.php geholt. Das ist nicht ganz so gut. Wenn jemand kein ajax hat / nutz wird dieses trotzdem geladen und braucht Speicher usw... Du Weisst das OPN auch von der shell z.b. geht und da brauch ich kein ajax 2) Wie ist das mit den Form Daten wie willst du die über geben? Also ich habe ein Formular mit jedemenge vari. diese müsten automatisch mit ajax auch zurückgegeben werden. Da fehlt ne Routine die die daten holt und mit ins senden setzt. Erst nachlesen, dann nachdenken, dann nachfragen... http://www.catb.org/~esr/faqs/smart-questions.html openPHPnuke Developer |
Autor | Freespacer |
Datum | 08.01.2007 20:34 |
Beiträge: | stefan schrieb am 08.01.2007 um 14:48:27 Uhr folgendes:
Nur her mit den Anmerkungen stefan schrieb am 08.01.2007 um 14:48:27 Uhr folgendes:
Da müsste man noch einen Schalter einbauen, der abfragt, ob Ajax zugelassen werden soll. (Fallback-Lösung ist schon integriert -> Siehe api/main.php in Search). Habe ich aus Zeitgründen noch nicht implementiert. stefan schrieb am 08.01.2007 um 14:48:27 Uhr folgendes:
mit der Shell? Du meinst die Programme links oder lynx? stefan schrieb am 08.01.2007 um 14:48:27 Uhr folgendes:
Das funktioniert hier mit JS. Da AJAX ja auch auf JS aufbaut. Alle verfügbaren Daten im Formular werden in $opnConfig['opnajax']->add_formdata_js oder so ähnlich als JS-Code zur Abfrage der Daten als Request gebaut. Gruß Sebastian |
Autor | stefan |
Datum | 08.01.2007 21:21 |
Beiträge: | Freespacer schrieb am 08.01.2007 um 20:34:10 Uhr folgendes:
Ich würde das nicht in der master.php inializieren Freespacer schrieb am 08.01.2007 um 20:34:10 Uhr folgendes:
Nö; linux shell - da wo man mit Buchstaben statt Maus spielt z.b. opn-bin/errorlog.php -delete oder über die perl schnittstelle opn_engine.pl wie auch immer opn ist in der lage ein framework auf shell ebene abzubilden und da brauch ich kein ajax im speicher Freespacer schrieb am 08.01.2007 um 20:34:10 Uhr folgendes:
ja nur ist das nicht ganz so geschickt. weil man im code dann jeden einzeln (oder als array) über geben muss. geschickter wäre wenn er "automatisch" alle elemente holt und über gibt ne "krücke" wäre denkbar durch die form class aber auch das wäre nur ne krücke |
Autor | Freespacer |
Datum | 13.01.2007 05:57 |
Beiträge: | stefan schrieb am 08.01.2007 um 21:21:56 Uhr folgendes:
Da du mir ja die Möglichkeit OPN von der Shell zu starten gezeigt hast, so habe ich mir überlegt, ob man die Ajax-Klasse nicht manuell in jeweiligen Modulen nachladen sollte. Und die class.opn_output.php sollte eben prüfen, ob die Ajax-Klasse geladen wurde und entsprechend handeln. Bevor dann die Ajax-Klasse eingebunden wird, wird zuerst geprüft, ob in der Grundeinstellung (Schalter) Ajax eingebunden werden soll oder nicht und ob der Browser dazu in der Lage ist. stefan schrieb am 08.01.2007 um 21:21:56 Uhr folgendes:
Automatisch holen?! Hmmm. Das bedeutet, auch die class.formular.table.php musste wegen der Integration von Ajax daran glauben und dort alle Namen wie auch Input/Textarea/Select-Elemente pro Form pro Modul sich merken. Obwohl dieses Array bereits schon in der Ajax-Klasse gebaut wird, kann man diese in das Formular auslagern, um die Übergabe der Element und deren Namen zu automatisieren. Stimmt schon, sollte man machen. (Sehe mir gerade die Ajax-Klasse an und da fällt es mir auf, dass man das Array weiter optimieren kann, aber da es ja sowieso nach class.formular.table.php ausgelagert werden soll, werde ich die Optimierung dort vornehmen.) Dann müsste z.B. wie folgt eingebunden werden: $this->_forms['modul']['formname']['element']['name'] = $value; Dann könnte die Ajax-Klasse damit auch "arbeiten", wenn man dieses Array von der Form-Klasse sich holt. z.B.: $form = & new opn_FormularClass ('default');
Dann muss aber die Klasse class.formular.table.php auch wissen, ob Ajax aktiv ist, dann kann er auch gleich den JS-Aufruf der Ajax-Klasse $opnConfig['opnajax']->ajax_get_function_javascript(true) bzw. $opnConfig['opnajax']->ajax_get_function_javascript() einfügen. Wird eigentlich auch der Name des Modules wie z.B. "search" irgendwo in $opnConfig gespeichert? Dann kann man den Namen des Modules auch automatisch an die Ajax-Klasse abtreten lassen. (z.b. function search_mainsearch oder function search_mainsearch2) für den Direkt-Aufruf per AJAX in PHP. Gruß Sebastian |
Autor | stefan |
Datum | 13.01.2007 07:55 |
Beiträge: | jein
also das automatisch würde ich mir noch mehr automatisch wünschen. ein $this->_forms['modul']['formname']['element']['name'] = $value; wäre schon zu viel 2 wege sind möglich 1 weg komplett in der ajax classe eine function einbauen die alle elemente ausliest und entsprechend setzt. würde gehen hätte vorteile weil dann nix mehr manuell gemacht werden müsste ausserdem gehts bei laufzeit aber auch nachteile relativ viel js zu nötig 2 weg ne billig lösung die formular class merkt sich halt die entsprechenden daten. im array oder sonst wie. wobei auch dann das erzeugen des js umfangreich wird weil du ja das array so nicht einfach in js einfügen kannst. >Wird eigentlich auch der Name des Modules ja aber das nützt dir nichts es steht zwar das aktive "haupt" modul zurverfügung das heisst aber noch lange nicht das es nicht ausnahemn gibt beispiel mach eine centerbox search die nur aktiv sein soll wenn forum sichtbar dann würde trotzdem das die box sichtbar wäre natürlich als aktives modul forum gesetzt sein. somit hilft dir das nicht. ob ajax geladen werden soll oder nicht würde ich bei der lösung $opnConfig['opnOutput']->SetDisplayVar ($var, $wert); bleiben. damit kann das modul recht flexibel daten setzen die sich auf die jeweilige box beziehen |
Autor | Freespacer |
Datum | 13.01.2007 09:26 |
Beiträge: | stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:
*guck_schief* stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:
Zuviel? stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:
Hm... stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:
Wie stellst du dir eine Funktion vor, wenn diese noch nicht mal die Elemente in einem Formular kennt? stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:
öhm, eigentlich geht es mit JS sogar ganz gut. Nur habe ich dato bis heute noch nicht umgesetzt. Obwohl mit einem Array, lässt sich eine JS-Funktion basteln, die aus dem Array die Elemente und dessen Name daraus die Werte im Formular ausliest. Und dementsprechend ein Request zusammenbaut. Daher könnte ich mir die Lösung auch ganz gut vorstellen, da wenig JS-Code an den Browser gesendet werden. Hier so ein kleiner Ansatz mit Array und For-in-Schleife: http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays http://de.selfhtml.org/javascript/sprache/schleifen.htm#for_in stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:
Sowas ähnliches habe ich mir auch schon gedacht, dass es so nicht einfach ist. stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:
Äh, und was nutzt mir im Endeffekt dieser Funktionsaufruf, wenn doch die Klasse class.opn_output.php auch prüfen kann, ob die Klasse $opnConfig['opnajax'] (manuell im Modul) initiert worden ist. Sorry, ich verstehe es nicht so ganz. Denn die Klasse $opnConfig['opnajax'] muss von der ersten Initierung bis zum Ende des Scripts (Ausgabe zum Browser) existieren. Damit die Ajax-Klasse weiß, welchen JS-Code im Header gebaut werden soll, die letztendlich von class.opn_output.php aufgerufen wird und leider muss es in einem Rutsch geschehen. Und was mit der Funktion $opnConfig['opnOutput']->SetDisplayVar ($var, $wert); angeht: Einmal definiert (inkl. Formularelemente), wird diese einfach vom nachfolgenden Modul überschrieben, oder sehe ich das verkehrt? Hier ein Auschnitt aus class.opn_output.php:
In meinen Augen ist der Vorschlag leider nicht gerade flexibel. Stell dir mal 3 Sideboxen und 1 Centerbox vor, die zusammen Ajax verwenden. Und nun? Gruß Sebastian |
Autor | stefan |
Datum | 13.01.2007 11:17 |
Beiträge: | ich kann mit js die elemente der seite auslesen und entsprechend eragieren.
zum array... du hast ne php array wie über gibts du das in js? ich meine nicht nur reines js. die output würde dir ne php array liefern ja die function SetDisplayVar bezieht sich boxen weit was aber nicht schlimm wäre. du hast eine "init haut" js und jede box liefert eben das was für die box ist als sub js aber mach mal das wird hier viel zu theorethisch |
Autor | Freespacer |
Datum | 13.01.2007 13:04 |
Beiträge: | stefan schrieb am 13.01.2007 um 11:17:43 Uhr folgendes:
Jepp, genau. stefan schrieb am 13.01.2007 um 11:17:43 Uhr folgendes:
Ich dachte eher an die Formulare und deren Elemente und Name. PHP bzw. OPN bereitet eine PHP-Array der Form-Elemente in eine JS-Array auf. Und eine JS-Funktion verwendet die JS-Arrays, um entsprechende Werte in den Elementen abzurufen und baut diese dann in ein Request ein. (Soviel zur Theorie) stefan schrieb am 13.01.2007 um 11:17:43 Uhr folgendes:
Hä? *versteh_nur_Bahnhof* stefan schrieb am 13.01.2007 um 11:17:43 Uhr folgendes:
Wat nu? Von der Wiege bis zur Barre: Formulare, Formulare Also echt. Werde jetzt mal ein bißle an OPN und Ajax programmieren und nochmal umbauen, um es doch noch etwas zu vereinfachen bzw. wie du es so schön nennst, dass alles automatisch funktioniert. Übrigens: Gibt es irgendeinen Grund, warum Experimental Rev. 70 + 73 nicht in den Trunk gefloßen sind? Es ging um den Bug #980. Gruß Sebastian |
Autor | stefan |
Datum | 13.01.2007 14:19 |
Beiträge: | Freespacer schrieb am 13.01.2007 um 13:04:33 Uhr folgendes:
ist ; zugegebenener massen mit einem falschen text rev. 300 Da wir a) ne neues Jahr schreiben und b) uns auf eine Release zu bewegen ist das z.Zt. recht identisch ausser ajax halt |
Autor | hombergs |
Datum | 13.01.2007 18:25 |
Beiträge: | So dann auch mal meinen Senf dazu geben tun.
Wegen der Übergabe eines PHP Arrays an JS kann ich evtl. etwas weiterhelfen. Da wir in Aurora sowas machen mittels der SAJAX Lib. Das JS ruft per Request die PHP Funktion auf. Diese baut das PHP Array auf und macht nen return implode('|',$array); In der JS Callbackfnktion wird ein var jsWert = retarray.split('|'); gemacht. Und schon hat man sein PHP Array als JS Array. Oder man kann auch in JS via document.forms['FormName'].elements.length mittels einer for Schleife auf alle Formularelement zugreifen. Wie immer führen viele Wege nach Rom. H.O.M.B.E.R.G.S.: Hydraulic Obedient Machine Built for Efficient Repair and Galactic Sabotage Es gibt keine Probleme, nur Herausforderungen. Stoppt Softwarepatente, sonst wird Softwareentwicklung in Europa für die meisten illegal! Infos: Der Patentierte Europäische Online-Shop Utopia 1: Die Welt wo alle Browser valides HTML und valides CSS 2 verstehen und alle es gleich anzeigen. Utopia 2: Die Welt wo alle SQL Server den ANSI SQL Standardsyntax einwandfrei beherschen und ausführen. |
Autor | Freespacer |
Datum | 14.01.2007 09:39 |
Beiträge: | Hallo Heinz!
hombergs schrieb am 13.01.2007 um 18:25:33 Uhr folgendes:
Ja, so ähnlich habe ich es mir auch schon gedacht. Leider hat dein Beispiel einen Hacken. Es unterstützt kein assoziatives Array. Dazu habe ich schon eine Lösung gefunden und werde von PHP die Funktion "Serialize()" bzw. "Unserialize()" in JS übernehmen. Dann haben nämlich PHP und JS dieselbe Arraystruktur. Dazu gibt es auch schon Lektüren: http://www.phpguru.org/static/PHP_Unserialize.html http://aspn.activestate.com/ASPN/Cookbook/PHP/Recipe/414334 http://kkaefer.com/blog/category/javascript Davon könnte man sich was abkupfern. hombergs schrieb am 13.01.2007 um 18:25:33 Uhr folgendes:
Tja, jetzt kann man sich darüber streiten, ob man jetzt mit assoziativen Array arbeiten möchte ... oder ... nur mit dem Namen der Form und mittels einer Schleife alle Elemente abgrasen. Was meint ihr, welchen Weg man einschlagen sollte? hombergs schrieb am 13.01.2007 um 18:25:33 Uhr folgendes:
Klar. Einige Browser haben ja auch andere Ziele wie z.B. nach Redmond und nicht Rom. Dann leiste mal Überzeugungsarbeit, dass Redmond nich das Ziel ist, sondern Rom. Gruß Sebastian |
Autor | Freespacer |
Datum | 14.01.2007 18:37 |
Beiträge: | So, ich glaube, ich habe mich mal wieder selbst übertroffen.
Die Ajax-Klasse habe ich einer Diät-Kur unterzogen. @Stefan: Du wolltest es ja vollkommen automatisch haben. Ich denke, dass ist mir mit diesem Release gelungen. Du musst nur noch im Modul den Namen der Form angeben, gleichzeitig ist es auch der Name der Rückgabefunktion für Ajax. $opnConfig['opnajax']->add_form_ajax('search_mainsearch'); Lediglich im Formular muss man noch folgendes Hiddenfeld einfügen, damit Ajax weiß welcher Inhalt zu ersetzen ist: $form->AddHidden ('ajaxid', 'searchresult', true); Fertig, ist das kleine Kind. Habe da bestimmt 3 Stunden daran rumgeschraubt. Aktualisiert in Experimental Rev. 130 Gruß Sebastian |
Diese Seite drucken Diese Seite schließen |
Dieser Artikel kommt von: OpenPHPNuke - das Open Source CMS |
http://www.openphpnuke.info/ |