Statistik |
Beiträge: 144.531 (Täglich: 19,19 )
Themen: 16.700
Mitglieder: 13.209
Neuestes Mitglied: zitronentee.
Ausl. d. letzten Minute: 141%
Ausl. d. letzten 5 Minuten: 163%
Ausl. d. letzten 15 Minuten: 203%
Aktulle Uhrzeit: 19:18
Freier Webspace: 4.04 TB
PHP-Version: 7.4.33
|
|
|
Thema: ToDo-> WoltLab Burning Board 2.3.6pl2: Update PHP-Version 8.x (Aktuell 8.3) |
|
Hallo,
In der PHP-Version 8.3.0 gab es ein paar Änderungen bezüglich der internen PHP-Funktion "highlight_string()".
Die Änderungen können falsche Darstellung im BBCode "php" zur Folge haben.
Um das Problem zu beheben, müssen ein paar Änderungen/Ergänzungen in der "acp/lib/class_parse.php" durchgeführt werden.
suche in "/acp/lib/class_parse.php" nach:
füge darüber ein:
php: |
1:
2:
3:
4:
|
if (version_compare($phpversion, "8.3.0") != -1) {
$code = str_replace(array("\r\n", "\n\r", "\r"), "\n", $code);
$code = str_replace("\n", " \n ", $code);
} |
|
suche:
php: |
1:
2:
|
$buffer = str_replace("<code>", "", $buffer);
$buffer = str_replace("</code>", "", $buffer); |
|
ersetze gegen:
php: |
1:
2:
|
//$buffer = str_replace("<code>", "", $buffer);
//$buffer = str_replace("</code>", "", $buffer); |
|
suche:
php: |
1:
2:
3:
4:
5:
6:
7:
|
if ($phptags == 1) {
if (version_compare($phpversion, "4.3.0") == -1 || version_compare($phpversion, "5.0.5") >= 0) $buffer = preg_replace("/([^\\2]*)(<\?php )(.*)( .*\?>)([^\\4]*)/si", "\\1\\3\\5", $buffer);
else if (version_compare($phpversion, "5.0.0RC1") == -1) $buffer = preg_replace("/([^\\2]*)(<\?php )(.*)( .*\?>)([^\\4]*)/si", "\\1\\3\\5", $buffer);
else {
$buffer = preg_replace("/([^\\2]*)(<\?php )(.*)(\?>)([^\\4]*)/si", "\\1\\3\\5", $buffer);
}
} |
|
oder suche:
php: |
1:
|
if ($phptags == 1) $buffer = preg_replace("/([^\\2]*)(<\?php )(.*)( .*\?>)([^\\4]*)/si", "\\1\\3\\5", $buffer); |
|
ersetze gegen:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
|
if ($phptags == 1) {
if (version_compare($phpversion, "8.3.0") != -1) {
$buffer = preg_replace("/([^\\2]*)(<\?php )(.*)( .*\?>)([^\\4]*)/si", "\\1\\3\\5", $buffer);
$buffer = str_replace(" \n ", "<br />", $buffer);
}
else $buffer = preg_replace("/([^\\2]*)(<\?php )(.*)( .*\?>)([^\\4]*)/si", "\\1\\3\\5", $buffer);
}
elseif (version_compare($phpversion, "8.3.0") != -1) $buffer = str_replace(" \n ", "<br />", $buffer); |
|
Achtung:
Der Code verwendet ein geschütztes Leerzeichen bei den Stellen mit " \n ", was jedoch in diesem Beitrag durch ein normales Leerzeichen ersetzt wurde.
Es wird empfohlen Diese selbst zu ändern oder eine der beiden Anleitungen im ersten Beitrag zu verwenden.
Als Alternative kann auch statt " \n " die Codefolge chr(160).chr(10).chr(160) verwendet werden.
|
|
Thema: WoltLab Burning Board Lite 1.0.2pl3 |
|
Hallo,
Ab der PHP Version 8.3.0 wurde die PHP interne Funktion "highlight_string" etwas verändert.
Dadurch kann es zu geringfügigen Darstellungsänderungen und/oder Problemen betreffend des BBCodes "php" kommen.
Dadurch muss/sollte die Funktion "codeformat" der "acp/lib/class_parse.php" bearbeitet werden.
Die Funktion sollte nun ungefähr so aussehen:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
|
function codeformat($code,$mode) {
global $tpl, $phpversion;
if($mode=="php") {
$phptags=0;
//$code = str_replace("\\\"","\"",$code);
if(!strpos($code,"<?") && substr($code,0,2)!="<?") {
$phptags=1;
$code = "<?php ".trim($code)." ?>";
}
/*
Ersetze "Zeilenumbrüche" mit "eindeutiger Zeichenfolge": chr(160)chr(10)chr(160) -> " \n ":
chr(10) = Zeilenvorschub (line feed)
chr(32) = Leerzeichen (space)
chr(160) = Geschütztes Leerzeichen (non-breaking space)
Dies ist ein kleiner Trick/Workaround, damit Zeilenumbrüche leichter von "highlight_string" eingefügten Zeilenumbrüchen unterscheidbar sind und später einfacher gegen "<br />" ersetzt werden können.
$code = str_replace(array("\r\n","\n\r","\r"),chr(10),$code);
$code = str_replace("\n",chr(160).chr(10).chr(160),$code);
*/
if(version_compare($phpversion, "8.3.0")!=-1) {
$code = str_replace(array("\r\n","\n\r","\r"),"\n",$code);
$code = str_replace("\n"," \n ",$code);
}
ob_start();
$oldlevel=error_reporting(0);
highlight_string($code);
error_reporting($oldlevel);
$buffer = ob_get_contents();
ob_end_clean();
//$buffer = str_replace("<code>", "", $buffer);
//$buffer = str_replace("</code>", "", $buffer);
if($phptags==1) {
if(version_compare($phpversion, "8.3.0")!=-1) {
$buffer = preg_replace("/([^\\2]*)(<\?php )(.*)( .*\?>)([^\\4]*)/si", "\\1\\3\\5", $buffer);
$buffer=str_replace(" \n ","<br />",$buffer);
}
else $buffer = preg_replace("/([^\\2]*)(<\?php )(.*)( .*\?>)([^\\4]*)/si","\\1\\3\\5", $buffer);
$buffer = preg_replace("/<span [^>]*><\/span>/si", "", $buffer);
}
elseif(version_compare($phpversion, "8.3.0")!=-1) $buffer=str_replace(" \n ","<br />",$buffer);
$buffer=str_replace("{","{",$buffer);
$buffer=str_replace("}","}",$buffer);
$buffer=str_replace(array("\r\n","\n\r","\r","\n"),"",$buffer); //Entferne von "highlight_string" eingefügte Zeilenumbrüche
eval ("\$code = \"".$tpl->get("codephptag")."\";");
}
else {
//$code=str_replace("\\\"","\"",$code);
$code=htmlspecialchars($code);
$code=str_replace(" "," ",$code);
$code=nl2br($code);
$code=str_replace("{","{",$code);
$code=str_replace("}","}",$code);
eval ("\$code = \"".$tpl->get("codetag")."\";");
}
return $code;
} |
|
Im Zuge dieser Änderung wird auch empfohlen die Templates "templates/codephptag.tpl" und "templates/faq_bbcode.tpl" zu bearbeiten.
suche in /templates/codephptag.tpl nach:
ersetze gegen:
suche in /templates/faq_bbcode.tpl nach:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
<p>Aus [-PHP-]Syntax[-/PHP-] wird z.B.<p>
<table align="center" width="90%">
<tr>
<td><font face="Tahoma,Helvetica" size=2><b>php:</b></font></td>
</tr>
<tr>
<td>
<table cellpadding=4 cellspacing=1 width="100%" bgcolor="#000000">
<tr>
<td bgcolor="#ffffff" id="inposttable">
<font face="Tahoma,Helvetica" size=1><font color="#000000">
<br /><br /><font color="#0000CC">< ? php
<br /><br /></font><font color="#006600">echo </font><font color="#CC0000">"Syntax"</font><font color="#006600">;
<br /><br /></font><font color="#0000CC">? >
</font>
<br /><br /></font>
</font>
</td>
</tr>
</table>
</td>
</tr>
</table> |
|
ersetze gegen:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
|
<p>Aus [-PHP-]echo Syntax;[-/PHP-] wird z.B.</p>
<table align="center" width="90%">
<tr>
<td><font face="Tahoma,Helvetica" size=2><b>php:</b></font></td>
</tr>
<tr>
<td>
<table cellpadding=4 cellspacing=1 width="100%" bgcolor="#000000">
<tr>
<td bgcolor="#ffffff" id="inposttable">
<font face="Tahoma,Helvetica" size=1>
<font color="#000000">
<font color="#006600">echo </font><font color="#CC0000">"Syntax"</font><font color="#006600">;</font>
</font>
</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p>Aus<br><br>[-PHP-]<?php<br> echo Syntax;<br>?>[-/PHP-]<br><br>wird z.B.</p>
<table align="center" width="90%">
<tr>
<td><font face="Tahoma,Helvetica" size=2><b>php:</b></font></td>
</tr>
<tr>
<td>
<table cellpadding=4 cellspacing=1 width="100%" bgcolor="#000000">
<tr>
<td bgcolor="#ffffff" id="inposttable">
<font face="Tahoma,Helvetica" size=1>
<font color="#000000">
<font color="#0000CC"><?php</font>
<br> <font color="#006600">echo </font><font color="#CC0000">"Syntax"</font><font color="#006600">;</font>
<br><font color="#0000CC">?></font>
</font>
</font>
</td>
</tr>
</table>
</td>
</tr>
</table> |
|
Achtung:
Aufgrund der Verwendung des BBCodes "php", in diesem Beitrag, wurde im Code des "templates/faq_bbcode.tpl" der Tag zu "[-PHP-]" beziehungsweise "[-/PHP-]" geändert.
Dies sollte vor dem Einfügen rückgängig gemacht werden.
Dateien, bei denen diese Änderungen schon durchgeführt wurden, befinden sich im Anhang des zweiten Beitrages.
|
|
Thema: Test php Code |
|
13.03.2024 23:10 |
Forum: Test |
Hallo,
|
Zitat: Original von Viktor
Hallo Stine,
jo das war immer ein Fehler im wBB.
Ich habe es jetzt mal getestet.
Bei allen PHP-Versionen muss die Datei "acp/lib/class_parse.php" angepasst werden.
...
..
.
|
|
|
Leider stimmt das nicht.
Wenn der Benutzer "<?php" und "?>" nicht im Code eingegeben hat, ist es auch gewollt, dass diese nicht angezeigt werden.
Das Hinzufügen dieser Teile dient nur dazu, damit "highlight_string" richtig funktioniert.
Darum wird beim Hinzufügen auch "$phptags" auf "1" gesetzt, damit in diesem Falle später mittels "preg_replace" die hinzugefügten Tags wieder entfernt werden können.
|
|
Thema: Modal als BBCode |
|
Hallo,
Ich schätze mal, dass es mit der "Vorschau"-Funktion bei der Beitragserstellung/Themenerstelllung zu tun hat?
Benutze einfach den korrigierten Code oben.
|
|
Thema: Modal als BBCode |
|
Hallo,
Das hatte ich mir am Anfang schon fast gedacht, dass sehr wahrscheinlich ein anderer "Identifier" gebraucht wird und der Hash eventuell nicht ausreicht. Hatte den Gedanken aber wieder verworfen und es auch nicht wirklich getestet.
Verwende diesen Code in der "/acp/lib/class_parse.php":
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
|
function replacemodal($post) {
global $posts, $tpl;
if(empty($posts['postid'])) $posts['postid'] = "preview";
$modal="";
reset($this->modal[0][0]);
foreach($this->modal[0][0] as $varnr => $val) {
$id="img#".$posts['postid']."_".$varnr;
$label="<img class=\"modallabelimg\" src=\"$val[0]\">";
$link=$val[0];
eval ("\$modal = \"".$tpl->get("modaltag")."\";");
$post=str_replace("{".$this->hash."_modalimg_".$varnr."}",$modal,$post);
}
reset($this->modal[1][0]);
foreach($this->modal[1][0] as $varnr => $val) {
$id="link#".$posts['postid']."_".$varnr;
$label=$val[1];
$link=$val[0];
eval ("\$modal = \"".$tpl->get("modaltag")."\";");
$post=str_replace("{".$this->hash."_modallink_".$varnr."}",$modal,$post);
}
return $post;
} |
|
|
|
Thema: Modal als BBCode |
|
Hallo,
Schön, dass soweit alles funktioniert.
Eventuell möchtest du der Klasse ".modallabelimg" noch ein "vertical-align: middle" hinzufügen.
Jedenfalls nur eine Spielerei...
|
|
Thema: Modal als BBCode |
|
Hallo,
|
Zitat: Original von Patty Halliwell
Etwas Kleines ist mir noch aufgefallen, was ich nicht gefunden habe: Nach dem Modal macht es einen Abstand, den ich nicht wegbekomme.
Zuerst habe ich gedacht, es käme vom "modaltag.tpl"
php: |
1:
|
<label for="checkbox$id" class="modallabel2"> </label> |
|
Das ist es aber nicht (da habe ich gesehen, dass der ist, wenn das Modal offen ist). Sonst habe ich aber nirgends Abstände irgendwo im Code gefunden. Wo könnte der sich verstecken? |
|
|
Das ist eine Nebenerscheinung von "inline"-Elementen.
Versuch es mal mit "display: inline-block;", dann sollte der Abstand verschwinden.
Mittels negativen "margin-right", kannst du den Abstand auch verschwinden lassen.
|
|
Thema: Modal als BBCode |
|
Hallo,
Wenn du die Größe selbst definieren möchtest, musst du nur den "JavaScript"-Code mit einem oder zwei zusätzlichen "prompt" erweitern, wenn der "Titel" leer ist, denn nur dann ist es wohl relevant.
Danach machst du nur noch eine Änderung hier:
php: |
1:
|
AddTxt = "[modal]"+modalurl+"[/modal]"; |
|
In etwa so:
php: |
1:
|
AddTxt = "[modal=max-width#max-height]"+modalurl+"[/modal]"; |
|
Eventuell möchtest du das gesamte Element dann auch aus dem "Textfluss" nehmen.
Dazu müsstet du nur die CSS-Klasse ".modaldiv" bearbeiten.
"display: block;" wäre dann eventuell die gewollte Variante.
Über die "regex" gilt es nur mehr ein/zwei Capturinggroups hinzuzfügen, damit der veränderte BBCode auch erkannt wird.
php: |
1:
|
$post=preg_replace_callback("/\[modal(=(['\"]?)([^\"']*)\\2)?\](.*)\[\/modal\]/siU",function($matches) {return $this->cachemodal($matches[3],$matches[4]);},$post); |
|
Dieser Code wäre zu bearbeiten (Wenn man weiß, was genau man nun möchte).
Ohne eine Änderung hätte "$matches[3]" als Inhalt: max-width#max-height
Dies würde dann auch so in "$link" von der Funktion "cachemodal" landen.
Wenn du den Regex also nicht bearbeiten möchtest, müsstet du einen Split über "#" durchführen, oder eben über den Separator den du auswählst.
Wichtig ist dabei auch, dass du einen Unterschied zum "Link" herstellst und dies auch erkannt wird.
Die so erhaltenen Werte noch als Variable speichern und über die Funktion "replacemodal" in den erzeugen Bildlink einfügen.
php: |
1:
|
$label="<img class=\"modallabelimg\" src=\"$val[0]\">"; |
|
Etwa so:
php: |
1:
|
$label="<img class=\"modallabelimg\" style="max-height:$val[a];max-width:$val[b]" src=\"$val[0]\">"; |
|
Wie genau es auszusehen hat, hängt halt von der konkreten Umsetzung ab.
Das sind jedoch nur Spielereien.
Das Grundgerüst hast du ja und sollte ohne große Probleme möglich sein etwas anzupassen.
|
|
Thema: Modal als BBCode |
|
Hallo,
Bei mir funktioniert das einwandfrei.
Browsercache leeren nicht vergessen.
|
|
Thema: Modal als BBCode |
|
|
Zitat: Original von Patty Halliwell
Hey,
auch so geht es leider immer noch nicht. |
|
|
Versuche den Code von oben erneut.
|
|
Thema: Modal als BBCode |
|
Hallo,
Deine "AddText" ist etwas anders.
Bei dir muss der Code wohl so lauten:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
|
function modal(theform) {
if (selectedText) var dtext=selectedText;
else var dtext="";
modallabel = prompt("Gebe einen Bildnamen ein (optional)",dtext);
modalurl = prompt("Gebe eine Bildadresse ein","");
if ((modalurl != null) && (modalurl != "")) {
if ((modallabel != null) && (modallabel != "")) {
AddTxt = "[modal="+modalurl+"]"+modallabel+"[/modal]";
AddText(AddTxt,"",false,theform);
}
else {
AddTxt = "[modal]"+modalurl+"[/modal]";
AddText(AddTxt,"",false,theform);
}
}
} |
|
|
|
Thema: Modal als BBCode |
|
Hallo,
Wie sieht denn deine "bbcode_buttons.tpl" und "bbcode.js" aus?
|
|
Thema: Modal als BBCode |
|
Hallo,
|
Zitat: Original von Patty Halliwell
Also wenn das Modal z.B. 5x in einem Post benutzt wird, dann wird es auch 5x geladen und macht so die entsprechende Seite langsamer, habe ich das richtig verstanden? Was wäre in dem Fall die bessere Lösung? |
|
|
Nicht zwangsläufig langsamer, da es auch einen Browsercache gibt, aber eben unnötig.
Die bessere Variante wäre mein Vorschlag über das "Admin Control Panel" in den Designpackeinstellungen.
|
Zitat: Original von Patty Halliwell
Den Browsercache habe ich nun gelöscht, habe es auch mit mehreren Browsern und Geräten versucht. Die Felder gehen nun auf, sodass ich Bildnamen und Bildadresse einfügen kann. Allerdings taucht danach nichts im Textfeld auf.
|
|
|
Funktioniert bei mir einwandfrei, kann ich also nicht nachvollziehen.
Funktionieren denn andere BBCodes wie "Link/Bild/E-Mail"?
|
|
Thema: Modal als BBCode |
|
Hallo,
Eine Änderung habe ich leider nicht mittgeteilt.
suche in /acp/lib/class_parse.php nach:
php: |
1:
2:
3:
|
function doparse($post,$allowsmilies,$allowhtml,$allowbbcode,$allowimages) {
if($allowbbcode==1) {
if($this->done['bbcode']!=1) $this->getbbcode(); |
|
ersetze gegen:
php: |
1:
2:
3:
4:
5:
6:
7:
|
function doparse($post,$allowsmilies,$allowhtml,$allowbbcode,$allowimages) {
if($allowbbcode==1) {
$this->modal[0][0] = array();
$this->modal[1][0] = array();
$this->modal[0][1] = -1;
$this->modal[1][1] = -1;
if($this->done['bbcode']!=1) $this->getbbcode(); |
|
Was die Verlinkung direkt im Template angeht:
Für nicht "Admin Control Panel"-Seiten würde ich die CSS-Datei nicht in "acp/css" geben.
Es empfiehlt sich eher einen weiteren "css"-Ordner zu erstellen, der sich außerhalb des "acp"-Ordners befindet.
Abgesehen davon, sollte die Verlinkung korrekt sein, außer dass du den Namen "modal2CC.css" eingetragen hast, die aber "modal2.css" heißen sollte?
Zu beachten ist hier nun jedoch auch, dass die CSS-Datei nun per Modal geladen wird.
Sprich: Hast du mehr als ein Modal, wird die Datei auch mehr als ein Mal geladen.
Bei "JavaScript"-Änderungen betreffend der "bbcode.js" empfiehlt es sich den Browsercache zu leeren, da solche Dateien/Daten lokal am eigenen Rechner ausgeführt werden.
Meist ist dies schon die Lösung des Problems, wenn etwas betreffend von "JavaScript" nicht funktioniert. Ausnahmen sind natürlich offensichtliche Codefehler.
|
|
Thema: Modal als BBCode |
|
Hallo,
Im Folgenden eine mögliche Variante des BBCodes.
Namensbezeichnungen, sowie Variablenwerte etc. dienen hier rein nur als Vorschlag und kann natürlich beliebig angepasst werden.
Auf die "<dialog>"-Tagvariante wurde bewusst verzichtet.
Die "modal.css" sieht bei mir wie folgt aus:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
|
.modalcheckbox {
display: none;
visibility: hidden;
}
.modalcheckbox:checked + .modaldivcontent {
display: block;
}
.modaldiv {
position: relative;
display: inline;
}
.modaldivcontent {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
height: 100%;
width: 100%;
overflow: auto;
background-color: rgb(0,0,0);
background-color: rgb(0,0,0,0.4);
-webkit-animation: fadeIn 1.5s;
-moz-animation: fadeIn 1.5s;
-o-animation: fadeIn 1.5s;
animation: fadeIn 1.5s;
}
@-webkit-keyframes fadeIn {
0% { opacity: 0; }
100% { opacity: 1; }
}
@-moz-keyframes fadeIn {
0% { opacity: 0; }
100% { opacity: 1; }
}
@-o-keyframes fadeIn {
0% { opacity: 0; }
100% { opacity: 1; }
}
@keyframes fadeIn {
0% { opacity: 0; }
100% { opacity: 1; }
}
.modalimg {
position: absolute;
bottom: 0;
right: 0;
left: 0;
top: 0;
max-height: 95%;
max-width: 95%;
margin: auto;
}
.modallabel1 {
color: #0074cc;
cursor: pointer;
}
.modallabel1:active {
color: #00457a;
}
.modallabel1:hover {
text-decoration: underline;
}
.modallabel2 {
display: block;
height: 100%;
width: 100%;
}
.modallabelimg {
max-height: 5em;
} |
|
Diese kannst du entweder im "Admin Control Panel" im "Designpack" unter "URL zu einer CSS Datei:" eintragen, oder aber du kopierst den gesamten Inhalt in das Textfeld.
Du kannst die "css"-Datei aber auch im Template selbst, oder wo du es auch immer machen möchtest, laden lassen.
Wichtig ist nur, dass die Klassen vorhanden sind, wenn das Template aufgerufen wird.
Das Template wurde "modaltag.tpl" genannt (Analog zu codetag.tpl und codephptag.tpl).
Der Inhalt sieht wie folgt aus:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
|
<div class="modaldiv">
<label class="modallabel1" for="checkbox$id">$label</label>
<input class="modalcheckbox" id="checkbox$id" name="checkbox$id" type="checkbox" role="button">
<div class="modaldivcontent">
<img class="modalimg" src="$link">
<label for="checkbox$id" class="modallabel2"> </label>
</div>
</div> |
|
Die "/acp/lib/class_parse.php" sollte wie folgt bearbeitet werden:
suche:
php: |
1:
|
var $tempsave = array(); |
|
füge darunter ein:
php: |
1:
|
var $modal = array(); |
|
suche:
php: |
1:
|
if($allowimages!=0) $post = preg_replace_callback($this->imgsearch, $this->imgreplace2, $post); |
|
füge darunter ein:
php: |
1:
|
$post=preg_replace_callback("/\[modal(=(['\"]?)([^\"']*)\\2)?\](.*)\[\/modal\]/siU",function($matches) {return $this->cachemodal($matches[3],$matches[4]);},$post); |
|
suche:
php: |
1:
|
$post = preg_replace($this->search, $this->replace, $post); |
|
füge darunter ein:
php: |
1:
|
if($this->modal[0][1]!=-1 || $this->modal[1][1]!=-1) $post=$this->replacemodal($post); |
|
suche:
php: |
1:
|
function cachecode($code,$mode) { |
|
füge darüber ein:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
|
function cachemodal($link,$label) {
if($link!="") {
$this->modal[1][1]++;
$this->modal[1][0][$this->modal[1][1]][0]=$link;
$this->modal[1][0][$this->modal[1][1]][1]=$label;
return "{".$this->hash."_modallink_".$this->modal[1][1]."}";
}
else {
$this->modal[0][1]++;
$this->modal[0][0][$this->modal[0][1]][0]=$label;
return "{".$this->hash."_modalimg_".$this->modal[0][1]."}";
}
}
function replacemodal($post) {
global $tpl;
$modal="";
reset($this->modal[0][0]);
foreach($this->modal[0][0] as $varnr => $val) {
$id="img#".$this->hash.$varnr;
$label="<img class=\"modallabelimg\" src=\"$val[0]\">";
$link=$val[0];
eval ("\$modal = \"".$tpl->get("modaltag")."\";");
$post=str_replace("{".$this->hash."_modalimg_".$varnr."}",$modal,$post);
}
reset($this->modal[1][0]);
foreach($this->modal[1][0] as $varnr => $val) {
$id="link".$this->hash.$varnr;
$label=$val[1];
$link=$val[0];
eval ("\$modal = \"".$tpl->get("modaltag")."\";");
$post=str_replace("{".$this->hash."_modallink_".$varnr."}",$modal,$post);
}
return $post;
} |
|
In das Template "/templates/bbcode_buttons.tpl" wurde folgender Code eingefügt:
php: |
1:
|
<img src="{imagefolder}/bbcode_modal.gif" alt="Modal einfügen" border="0" onclick="modal(document.bbform)" class="clsCursor"> |
|
Eine "bbcode_modal.gif" musst du dir natürlich erstellen, oder aber du machst den Aufruf komplett an einer anderen Stelle.
Im letzten Schritt ist noch eine Änderung in der "/bbcode.js" durchzuführen.
suche:
php: |
1:
|
function namedlink(theform,thetype) { |
|
füge darüber ein:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
function modal(theform) {
if (selectedText) var dtext=selectedText;
else var dtext="";
modallabel = prompt("Gebe einen Bildnamen ein (optional)",dtext);
modalurl = prompt("Gebe eine Bildadresse ein","");
if ((modalurl != null) && (modalurl != "")) {
if ((modallabel != null) && (modallabel != "")) {
AddTxt = "[modal="+modalurl+"]"+modallabel+"[/modal]";
AddText(AddTxt,theform);
}
else {
AddTxt = "[modal]"+modalurl+"[/modal]";
AddText(AddTxt,theform);
}
}
}
// ******************************************************* |
|
Auf die Angabe der "max-width" über den BBCode wurde bewusst verzichtet.
Stattdessen wurde in die CSS-Datei die "max-height" "hardgecoded", dessen aktueller Wert bei "5em" liegt.
Das erzeugte Objekt des Modal-BBCodes bleibt hier im Textfluss.
Ein extra Button zum Schließen des Modals wurde nicht eingefügt und stattdessen wurde die maximale Größe des Bildes auf "95%" limitiert.
Dadurch kann einfach irgendwo außerhalb des Bildes geklickt werden und das Modal verschwindet wieder.
Dies ist zwar nicht gerade benutzerfreundlich, da es nicht offensichtlich ist, aber einen Button hinzuzufügen ist hier eigentlich trivial.
Die "Size"-Funktion im Falle eines "Linkes", sollte auch ohne Probleme funktionieren.
Ich habe das Ganze nur einem Schnelltest unterzogen und dadurch können selbstverständlich Fehler auftreten, aber die Grundfunktion sollte durch die Codes bereits vorhanden sein.
|
|
Thema: WoltLab Burning Board Lite 1.0.2pl3 |
|
Hallo,
Beim "WoltLab Burning Board Lite 1.0.2pl3" kann es vorkommen, dass unter dem Firefox-Browser das automatische Befüllen des BBCode-Textfeldes mittels vorselektierten Text nicht funktioniert.
Das Problem kann behoben werden, wenn man in der "/bbcode.js" die Funktion "getActiveText" bearbeitet.
Eine "/bbcode.js", bei der dieses Problem mittels einer Lösungsvariante behoben sein sollte, befindet sich im Anhang des zweiten Beitrages.
|
|
Thema: WoltLab Burning Board Lite 1.0.2pl3 |
|
Hallo,
Beim heutigen "Update" wurde eine Ergänzung bezüglich des Beitrages durchgeführt:
WoltLab Burning Board Lite 1.0.2pl3
Betroffene Datei: "/acp/lib/class_parse.php"
Hierbei muss folgende Zeile verschoben werden:
php: |
1:
|
$post = $this->textwrap($post,$this->wrapwidth,1); |
|
Diese Zeile befindet sich direkt über dieser Zeile:
php: |
1:
|
if($this->usecode==1) { |
|
Die Zeile sollte oberhalb folgender Zeile sein (Befindet sich in der Regel direkt unterhalb des oben genannten if-Blocks):
php: |
1:
2:
|
// remove tab
$post = str_replace("\t", " ", $post); |
|
Ist dies nicht der Fall, kann es unter Umständen vorkommen, dass die BBCodes "php" und/oder "code" aufgrund eines Zeilenumbruches nicht funktionieren.
|
|
Thema: Modal als BBCode |
|
Hallo,
In einer "flex"-Box werden Elemente standardmäßig mit "align-self: stretch" eingefügt, was die horizontale Verzerrung deines Bildes verursacht.
Beim "Link-Modal mit Bild grösser als Maximum" fehlt die Klasse, die bei "Image-Modal mit Bilder grösser als Maximum" vorhanden ist, dessen Einstellungen von "align-self: stretch" berücksichtigt werden.
Als Alternative würde sich wohl empfehlen "stretch" zu deaktivieren und eine anderen Wert für das Bild zu setzen, wobei sich hier die Frage stellt, ob eine Flexbox überhaupt die richtige Wahl für dein Vorhaben ist.
Wenn dein Modal über die gesamte Anzeige-Fläche geht, wirst du sehr wahrscheinlich über einen extra Button nicht herumkommen.
Eine JavaScript - Lösung wäre aber auch, mit einigen Anpassungen, möglich, mit welcher du in etwa den fokussierten Bereich erkennst und somit den Modal wieder schließt.
In die Tabelle "bbX_bbcodes" der Datenbank muss zwangsläufig nichts, es sei denn, du möchtest dein gesamtes Template in die Datenbank schreiben (Wie es beispielsweise der BBCode "quote" tut).
Als Alternative könntest du dich aber auch an den BBCode "php" oder "code" orientieren (codephptag.tpl beziehungsweise codetag.tpl).
Der dazugehörige Code befindet sich dann in der "acp/lib/class_parse.php".
Der CSS-Teil kann in beiden Fällen entweder global eingespeist/geladen werden oder eben direkt in das Template gegeben werden (Natürlich mit eventuellen Anpassungen).
Anmerkung: Seit HTML5 gibt es übrigends den Tag "<dialog>", der genau für ein solches Vorhaben gedacht ist.
|
|
Thema: Support-> WoltLab Burning Board 2.3.pl2 - Update PHP-Version 8.x |
Schrimm
Antworten: |
254 |
Hits: |
54.674 |
|
|
Hallo,
Beim Beispiel ist es egal, ob ein Leerzeichen vorhanden ist oder nicht.
Das sollte in diesem Falle keine Rolle spielen, sofern es darum geht eine Variable (Typischerweise beginnend mit $), einzufügen.
Sollten aber Leerzeichen direkt im Regex-Teil selbst vorhanden sein, wenn es um die Quantifier geht, dann kann dies durchaus ein Problem darstellen.
Dennoch ist es fragwürdig, woher diese Leerzeichen überhaupt kommen.
|
|
Thema: Support-> WoltLab Burning Board 2.3.pl2 - Update PHP-Version 8.x |
Schrimm
Antworten: |
254 |
Hits: |
54.674 |
|
|
Hallo,
Das Problem liegt an einem Regex und nicht an diesen Zeilen.
Sprich: Das was am Ende wirklich als "$this->search" eingefügt wird.
Die Meldung sagt im Grunde nichts anderes, dass einer davon nicht korrekt ist und daher müsste man herausfinden, welcher Regex hier Probleme bereitet.
|
|
|
|