Hallo zusammen,
ich habe mir im Editor einen zusätzlichen Button gebastelt, über dessen Eingabefenster ein Username eingegeben werden kann. Idealerweise hätte ich da jetzt gerne die Autocomplete-Funktion eingebaut, damit Schreibfehler weitestgehend ausgeschlossen werden können.
Mit PHP und einem Template habe ich das schon mal eingebaut aber wie und ob das mit Javscript auch geht, ist mir im Moment ein Rätsel.
Hat da jemand vielleicht einen Tipp für mich?
Wie sieht deine jetzige Lösung aus?
Ich denke man braucht ein Popup, in dem man das machen kann.
Hallo Stefan,
ich habe gerade leider keinen FTP-Zugang zu meinem Code aber im Grunde ist es nichts anderes, wie auch die Funktion insertIMG, die aus der editor.js aufgerufen wird.
Code:
insertIMG: function()
{
image = prompt(this.options.lang.enter_image, "http://");
if(image)
{
this.performInsert("[img]"+image+"[/img]", "", true);
}
},
Durch meinen Code wird ein Fenster geöffnet, in dem ich den Usernamen eingeben kann, der dann anschließend weiter verarbeitet wird. Das funktioniert soweit auch schon alles. Das i-Tüpfelchen wäre aber eben noch die Autocomplete-Funktion während der Eingabe des Usernamen.
Damit wird das nicht funktionieren. Du brauchst dann schon ein Popup-Fenstern mit HTML.
Hallo Jockl,
wie die Autocomplete-Funktion funktioniert, kannst du im Filter der memberlist sehen und für dich anpassen.
Mfg Garlant
Sorry, jetzt steh ich vermutlich ziemlich auf dem Schlauch...
Mit "Popup-Fenster mit HTML" verstehst Du aber nicht den Aufruf von z.B. MyBB.PopupMenu() oder?
In einem HTML-Popup könnte ich dann z.B. diese Funktion aufrufen?
Code:
<script type="text/javascript">
<!--
if(use_xmlhttprequest == "1")
{
new autoComplete("username", "xmlhttp.php?action=get_users", {valueSpan: "username"});
}
// -->
</script>
Die Übergabe des Wertes in den Editor erfolgt dann via $_GET()? Kann ich so einen Aufruf eines HTML-Popups auch in den Editor integrieren?
Wie gesagt, jetzt bin ich gerade komplett verwirrt. Muss mich erst von den Gedanken lösen,
die ich mir bislang zur Realisierung dieser Sache gemacht habe.
Das ganze ist komplizierter als einfach nur ein Javascript-Popup zu erzeugen. Du müsstest einen HTML-Layer o.ä. einbinden, wo du dann wiederum den Code für Autocomplete unterbringen kannst.
HTML-Layer sagt mir jetzt leider nicht ganz so viel...
Stefan hat mich auf sein Wiki-Plugin verwiesen, das mittels Popup-Fenster auch so etwas macht, was ich realisieren möchte. Stefan's Code ist allerdings um einiges umfangreicher und meine weiteren Versuche sind auch nicht so besonders erfolgreich.
Mein Stand ist bislang wie folgt:
Mit folgenden Zeilen in der editor.js
Code:
insertTagging: function()
{
var url = "usertagging.php"
usertagging = MyBB.popupWindow(url, 'username',300,50);
},
öffne ich ein Popup-Fenster. Die Datei usertagging.php enthält folgende Zeilen
PHP-Code:
<?php
define("IN_MYBB", 1);
define("NO_ONLINE", 1);
require("global.php");
global $mybb;
eval("\$usertagging = \"".$templates->get("usertagging")."\";");
output_page($usertagging);
?>
Das Template sieht folgendermaßen aus (zugegebenermaßen ein wenig von Stefans Code abgekupfert)
Code:
<script type="text/javascript">
<!--
function get_return()
if($('username').value != '')
{
return '@[' +$('username').value+ ']';
}
//-->
</script>
Gib bitte den Namen des Users ein:
<form>
<input type="text" class="textbox" name="username" id="username" style="width: 80%; margin-top: 10px;" value="" />
<input type="button" value="OK" onclick="opener.editor.performInsert(get_return(), "", true, false); window.close();" />
</form>
<script type="text/javascript" src="jscripts/autocomplete.js?ver=1400"></script>
<script type="text/javascript">
<!--
if(use_xmlhttprequest == "1")
{
new autoComplete("username", "xmlhttp.php?action=get_users", {valueSpan: "username"});
}
// -->
</script>
Das Fenster öffnet sich, aber weder funktioniert die Autovervollständigung noch nach dem Click auf "OK" der Übertrag des eingegebenen Usernamens in das Editor-Fenster. Über einen Tipp würde ich mich riesig freuen.
Im Prinzip sieht das richtig aus... Kommt ein Fehler in der Fehlerkonsole? Nicht, dass ein Tippfehler drin ist.
Bei dem Template würde ich noch <head> und <body>,... einfügen. Außerdem kannst du noch {$headerinclude} einbauen, damit alles zum Design passt.
PS: In der usertagging.php brauchst du kein global $mybb;.
{$headerinclude} war ein guter Tipp. Zumindest ein Teil davon ist nämlich Voraussetzung, damit autoComplete funktioniert.
Allerdings funktioniert der Übertrag in das Editor-Textfeld nicht. Das liegt an dem Aufruf "open.editor.performInsert()". Klar, "editor" ist ja auch nicht definiert, da es aus dem Wiki-Plugin kopiert wurde. Die Frage ist nur, wie kann ich den Übertrag in das Editor-Textfeld realisieren? Könnte es mit "opener.document.getElementById" klappen? Allerdings kenn ich die ID des Textfeldes nicht.... Ach, Fragen über Fragen.