MyBB.de Forum

Normale Version: Php in Javascriptbereich / Komplexe Codebuttons
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

Ich habe ein Skript geschrieben, welches unter anderem eine Variable aus php in eine js Variable speichern muss(ist umständlich, aber einen anderen Weg mit dem inhalt dynamisch zu arbeiten hab ich nicht gefunden). Die Variable aus php wird aus der Datenbank ausgelesen. Nun hab ich versucht, das in den headerinclude zu schreiben, was allerdings nicht funktioniert. Dann hab ich einfach eine php-Datei geschrieben, mit dem Skript und diese dann als "javascript-Datei verlinkt". Hört sich seltsam an, ist wahrscheinlich auch bescheiden, aber auf einer Testseite hat es auch funktioniert.

Hier mal der wahrscheinlich problematische Teil, für den ich keinen richtigen Ort finde...

tooltip.php (ohne Datenbankgedöhns)
PHP-Code:
$dbrescontent mysql_query($dbsqlcontent) OR die(mysql_error());
    
    
$i 0;
    
    while (
$dbrowcontent mysql_fetch_assoc($dbrescontent))
    {
        echo 
"str_lexikon[".$i."] = '".$dbrowcontent['subject']."';\n";
        echo 
"str_lexikon[".($i+1)."] = '".nl2br(substr($dbrowcontent['content'],0,150))."...';\n";
        
$i += 2;
    } 

Das Array str_lexikon wird später von js verarbeitet, wie dürfte ja egal sein.
Jedenfalls hab ich keine Ahnung, wie ich diesen oberen Teil einbinden soll bzw. wo.
Wenn es im Template headerinclude ausgegeben werden soll, musst du den Code entweder in die Datei global.php schreiben oder als Plugin auslagern. Zweite Möglichkeit ist etwas aufwendiger, macht aber beim Updaten usw. weniger Arbeit. Grundsätzlich darfst du das Ganze dann nicht per echo() ausgeben, sondern musst es in eine Variable schreiben. Diese musst du dann ins Template headerinclude schreiben, wo sie der Parser dann durch den Inhalt ersetzt.
Das hab ich jetzt gemacht. Allerdings wollte ich das vermeiden, weil dann im Quelltext alle Deklarationen des Arrays zu sehen sind. Wenn das mal mehrere hundert Einträge enthalten muss, wird das unschön.
Das mit dem Plugin werd ich mir aber mal anschaun. Gibts dazu irgendwelche Tutorials oder einen Überblick? Hab bisher keine Plugins für das Forum gebraucht.
Danke für die Links. Habs mal durchgearbeitet, aber ich glaub dann bleib ich vorerst bei der Lösung.

Aber ne andere Frage. Ich hab nun einen Codebutton für den MyCode eingefügt, allerdings bekomme ich es nicht hin, dass eine Abfrage, wie z.B. beim email-button erscheint. In der editor.js habe ich im Stil von insertEmail: function() das gleiche für insertLexikon (als Beispiel) gemacht, jedoch finde ich nirgends die Möglichkeit, das mit dem Button zu verknüpfen. Gibts da ne Möglichkeit, bzw. wo steht das denn? Irgendwo muss ja gesagt werden, wann insertEmail aufgerufen wird...

Edit:
Ich bin so unheimlich dumm.
Folgendes schafft Abhilfe (für diejenigen, die vielleicht auch ein Prompt einfügen wollen und an der Stelle scheitern).

Alles in der editor.js
Das hier erzeugt den Button:
Code:
this.insertStandardButton(elements, "lexikon", "images/codebuttons/lexikon.gif", "lex", "", this.options.lang.title_lexikon);
Das Prozedere ist ja sehr schön in der Doku von mybboard.de beschrieben, deswegen lass ich das hier.

Nun einfach diese Funktion mit in den Bereich, in dem die anderen insert-Funktionen stehen einfügen:
Code:
insertLexikon: function()
    {
        selectedText = this.getSelectedText($(this.textarea));
        lexikon = prompt(this.options.lang.enter_lexikon, "");
        
        if(lexikon)
        {
            if(!selectedText)
            {
                title = prompt(this.options.lang.enter_lexikon_title, "");
            }
            else
            {
                title = selectedText;
            }
            
            if(title)
            {
                this.performInsert("[lex="+lexikon+"]"+title+"[/lex]", "", true, false);
            }
            else
            {
                this.performInsert("[lex="+lexikon+"]"+lexikon+"[/lex]", "", true, false);
            }
        }
    },
Die this.option.lang...-Teile müssen ebenfalls in den language-Dateien und der function.php hinzugefügt werden.

Nun noch die Verknüpfung mit dem Button(hier hats bei mir geklemmt):
Code:
insertMyCode: function(code, extra)
    {    
        switch(code)
        {
            ...
            case "email":
                this.insertEmail();
                break;
            case "lex":
                this.insertLexikon();
                break;
                         ...

Das "lex" im case-Bereich muss dem vierten Argument im im ersten Codeschnipsel entsprechen, weil dieser in der Funktion toolbarItemClick() an die Funktion insertMyCode(code,extra) übergeben wird, sprich das Codekürzel ist.
So ich hoffe das hilft auch anderen weiter!