Beiträge: 451
Themen: 25
Registriert seit: 14.02.2009
MyBB-Version: 1.4.4
11.07.2009, 19:51
(Dieser Beitrag wurde zuletzt bearbeitet: 11.07.2009, 19:52 von Megaleecher.)
Hi Leute...
Ich weis echt nicht mehr weiter.
In einen meiner neuesten Plugins benutze ich die myBB interne Funktion find_replace_templatesets().
Diese funktioniert auch sehr gut jedoch nicht immer...
Ich habe folgendes genommen, er entfernt mir aber den Text nicht.
PHP-Code: find_replace_templatesets("forumbit_depth1_cat", '#<div id=\"Tab_{\$forum[\'fid\']}\" class=\"singleTab\">(\r?)\n#i', "", 0);
Zum hinzufügen habe ich folgendes geschreiben:
PHP-Code: find_replace_templatesets("forumbit_depth1_cat", '#<table#si', "<div id=\"Tab_{\$forum['fid']}\" class=\"singleTab\">\n<table");
Das hinzufügen klappt prima jedoch bekomme ich das hinzugefügt einfach nicht mehr weg...
Sieht irgendwer, was ich da falsch mache??
Wäre über jede Hilfe dankbar
MfG Megaleecher
Höre nie auf besser zu werden, weil dann hast du aufgehört gut zu sein.
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
Wenn das ein regulärer Ausdruck ist, und du Zeichen mit Sonderbedeutung ($ Zeilenende, [] Zeichengruppe, {} Anzahl usw.) benutzen willst, musst du sie escapen. Am einfachsten mit preg_quote().
Also '#'.preg_quote('bla $ fasel []').'#i' oder so.
Den $ hattest du in deinem Beispiel schon escaped obwohl das in ' nicht nötig sein sollte. Für reguläre Ausdrücke dagegen schon nötig (solltest du dann aber \\ schreiben damit der \ auch im String und damit bei preg_replace ankommt).
Hilft das?
Beiträge: 451
Themen: 25
Registriert seit: 14.02.2009
MyBB-Version: 1.4.4
Danke für diese ausführliche Antwort.
Hat mir sehr geholfen
Die eckige Klammer war der Hund^^
Die geschwungene KIammer stört ihm nicht.
Das mit preg_quote werd ich mir mal ansehen, sihet ja sehr vielversprechend aus.
Was meinst du mit \\ damit der einfach ankommt??
Das versteh ich nciht...
Was ich auch komisch finde wieso brauche ich \\\\ um einen einfachen \ wegzubekommen??
Das haben wir zwar in der Schule gelernt, ich checks aber einfach nicht...
MfG Megaleecher
Höre nie auf besser zu werden, weil dann hast du aufgehört gut zu sein.
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
11.07.2009, 21:00
(Dieser Beitrag wurde zuletzt bearbeitet: 11.07.2009, 21:01 von frostschutz.)
Naja, das was du in die PHP Datei schreibst, das sieht erstmal der PHP-Parser. Der macht dann wenn er "blafasel" sieht einen String mit dem Wert blafasel daraus.
In der PHP Datei muss man Zeichen escapen können, um einen String mit dem Wert " schreiben zu können, dazu schreibst du "\"". Der \ wird vom Parser ausgewertet, ist nicht Teil des Strings, der String besteht aus nur einem Zeichen, ".
D.h. der Parser schluckt schon mal ein \. Um einen String mit dem Wert \ zu schreiben muss du "\\" schreiben.
Wenn du nun einen String einer Funktion übergibst, die ihrerseits Escapes sehen will, musst du halt auf einmal "\\\\" schreiben, um einen String mit dem Wert \\ zu erzeugen, der von der Funktion wiederum - weil sie selbst escapes auswertet - auf \ reduziert wird, sprich die Regexp matcht dann einen einzelnen \ in diesem Fall.
Das kann dann stellenweise ziemlich eklig werden, ich musste auch schon mal \\\\\\\\\\\\\\\\ schreiben.
Wobei man bei PCRE alternativ auch mit \Q und \E (geschrieben als \\Q \\E) arbeiten kann. Was die Regexp unleserlicher macht ist situationsabhängig.
Beiträge: 451
Themen: 25
Registriert seit: 14.02.2009
MyBB-Version: 1.4.4
19.07.2009, 15:02
(Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2009, 15:05 von Megaleecher.)
Oh mann...
Ich bin schon fast am verzweifeln...
Die Ausdrücke wollen einfach nicht hinhauen...
PHP-Code: find_replace_templatesets("index", '#{\$headerinclude}#si', "{\$headerinclude}\n{\$tabs_headerinclude}"); find_replace_templatesets("index", '#{\$footer}#si', "{\$footer}\n{\$tabs_body_onload}"); find_replace_templatesets("index", '#{\$forums}#si', "{\$tabs_prefix}\n{\$forums}\n{\$tabs_postfix}");
und dann noch diese:
PHP-Code: find_replace_templatesets("index", '#{\$tabs_headerinclude}(\r?)\n#si', "", 0); find_replace_templatesets("index", '#(\r?)\n{\$tabs_body_onload}#si', "", 0); find_replace_templatesets("index", '#{\$tabs_prefix}(\r?)\n#si', "", 0); find_replace_templatesets("index", '#(\r?)\n{\$tabs_postfix}#si', "", 0);
Was ich so merkwürdig finde ist, dass er das $tabsheaderinclude ohne Probleme hinzufügt und entfernt...
Nur die anderen wollen einfach nicht.
Ich weis einfach nicht mehr weiter bzw. was ich da falsch mache...
Hoffentlich findet sihc wer, der mir da helfen kann
MfG Megaleecher
Höre nie auf besser zu werden, weil dann hast du aufgehört gut zu sein.
Beiträge: 25.762
Themen: 269
Registriert seit: 20.09.2005
Probiere:
PHP-Code: find_replace_templatesets("index", '#'.preg_quote('{$headerinclude}').'#si', "{\$headerinclude}\n{\$tabs_headerinclude}"); find_replace_templatesets("index", '#'.preg_quote('{$footer}').'#si', "{\$footer}\n{\$tabs_body_onload}"); find_replace_templatesets("index", '#'.preg_quote('{$forums}').'#si', "{\$tabs_prefix}\n{\$forums}\n{\$tabs_postfix}");
Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Beiträge: 451
Themen: 25
Registriert seit: 14.02.2009
MyBB-Version: 1.4.4
Es funktioniert noch immer nicht...
Er ersetzt nur das $tabs_headerinclude...
Die anderen werden einfach nicht ersetzt...
Hier mal das Template index wo die Regulären Ausdrücke angewendet werden:
PHP-Code: <html> <head> <title>{$mybb->settings['bbname']}</title> {$headerinclude} {$overview_headerinclude} <script type="text/javascript"> <!-- lang.no_new_posts = "{$lang->no_new_posts}"; lang.click_mark_read = "{$lang->click_mark_read}"; // --> </script> </head> <body> {$header} {$overview} {$forums} {$boardstats}
<dl class="forum_legend smalltext"> <dt><img src="{$theme['imgdir']}/on.gif" alt="{$lang->new_posts}" title="{$lang->new_posts}" style="vertical-align: middle; padding-bottom: 4px;" /></dt> <dd>{$lang->new_posts}</dd>
<dt><img src="{$theme['imgdir']}/off.gif" alt="{$lang->no_new_posts}" title="{$lang->no_new_posts}" style="vertical-align: middle; padding-bottom: 4px;" /></dt> <dd>{$lang->no_new_posts}</dd>
<dt><img src="{$theme['imgdir']}/offlock.gif" alt="{$lang->forum_locked}" title="{$lang->forum_locked}" style="vertical-align: middle;" /></dt> <dd>{$lang->forum_locked}</dd> </dl> <br style="clear: both" /> {$footer} </body> </html>
MfG Megaleecher
Höre nie auf besser zu werden, weil dann hast du aufgehört gut zu sein.
|