Forum

Moderiert von:
Forum Index
Entwicklerforum
     Entwicklungs Support
     Sidebox + Ajax-Technik
Hilfe anzeigen
Hilfe anzeigen

Seite 1 2 3 vorherige Seite 


Autor Druckerfreundliche DarstellungSidebox + Ajax-Technik
stefan
Beiträge: 2435
Wohnort: Münster


Sende eine Private Nachricht an stefan
ICQ
Geschrieben: 13.01.2007 07:55

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


Zitieren Druckerfreundliche Darstellung nach oben
Freespacer

Registriert: 03.10.2006
Beiträge: 205
Wohnort: Essen


Sende eine Private Nachricht an Freespacer
Geschrieben: 13.01.2007 09:26

stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:

jein


*guck_schief*

stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:

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


Zuviel?

stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:

2 wege sind möglich


Hm...

stefan schrieb am 13.01.2007 um 07:55:19 Uhr folgendes:

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


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:

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.


ö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:

>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.


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:

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


Ä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:

          function SetDisplayVar ($key, $var, $mode = false) {

               global $opnConfig;

...
               if ($key !== false) {
                    $this->_SetDisplayVar[$key] = $var;
               }
...


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


Zitieren Druckerfreundliche Darstellung nach oben
stefan
Beiträge: 2435
Wohnort: Münster


Sende eine Private Nachricht an stefan
ICQ
Geschrieben: 13.01.2007 11:17

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



Zitieren Druckerfreundliche Darstellung nach oben
Freespacer

Registriert: 03.10.2006
Beiträge: 205
Wohnort: Essen


Sende eine Private Nachricht an Freespacer
Geschrieben: 13.01.2007 13:04

stefan schrieb am 13.01.2007 um 11:17:43 Uhr folgendes:

ich kann mit js die elemente der seite auslesen und entsprechend eragieren.


Jepp, genau.

stefan schrieb am 13.01.2007 um 11:17:43 Uhr folgendes:

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


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:

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


Hä? *versteh_nur_Bahnhof*

stefan schrieb am 13.01.2007 um 11:17:43 Uhr folgendes:

aber mach mal das wird hier viel zu theorethisch


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


Zitieren Druckerfreundliche Darstellung nach oben
stefan
Beiträge: 2435
Wohnort: Münster


Sende eine Private Nachricht an stefan
ICQ
Geschrieben: 13.01.2007 14:19

Freespacer schrieb am 13.01.2007 um 13:04:33 Uhr folgendes:


Übrigens: Gibt es irgendeinen Grund, warum Experimental Rev. 70 + 73 nicht in den Trunk gefloßen sind? Es ging um den Bug #980.



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


Zitieren Druckerfreundliche Darstellung nach oben
hombergs
Registriert: 05.09.2001
Beiträge: 256
Wohnort: Frankfurt (Main)


Sende eine Private Nachricht an hombergs Besuche die Homepage von hombergs
ICQ AIM YIM MSNM
Geschrieben: 13.01.2007 18:25

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.

Zitieren Druckerfreundliche Darstellung nach oben
Freespacer

Registriert: 03.10.2006
Beiträge: 205
Wohnort: Essen


Sende eine Private Nachricht an Freespacer
Geschrieben: 14.01.2007 09:39

Hallo Heinz!

hombergs schrieb am 13.01.2007 um 18:25:33 Uhr folgendes:

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.


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:

Oder man kann auch in JS via document.forms['FormName'].elements.length mittels einer for Schleife auf alle Formularelement zugreifen.


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:

Wie immer führen viele Wege nach Rom.


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


Zitieren Druckerfreundliche Darstellung nach oben
Freespacer

Registriert: 03.10.2006
Beiträge: 205
Wohnort: Essen


Sende eine Private Nachricht an Freespacer
Geschrieben: 14.01.2007 18:37

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


Zitieren Druckerfreundliche Darstellung nach oben
sortieren nach
Seite 1 2 3 vorherige Seite 

Hilfe anzeigen
Hilfe anzeigen
Vorheriges Thema:  Abhängigkeit der Module
Nächstes Thema:  Developer-Doku

Gehe zu:

Benutzername:
 
Sicherheits-Code
Sicherheits-Code
Neu laden