Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.21 veröffentlicht (11.06.19)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Hilfe bzgl. Plugin-Ausführung
#1
Guten Tag zusammen,

ich habe bereits einige PHP Projekte hinter mir gelassen (kleinere) und widme mich momentan Stück für Stück MyBB. Ich blicke bei dem Plugin-Schema aber noch nicht so ganz durch.

Ich versuche mein Problem mal grob zu beschreiben:

Ich habe ein Plugin gefunden für MyBB, welches Gästen nicht erlaubt Links zu sehen - sondern nur Registrierten Benutzern. Dies nehme ich derzeit als Referenz für den Aufbau (unter anderem!). Dazu folgender Code unten im PlugIn:

PHP-Code:
// Run plugin
function hidelinks_hide(&$message)
{
global 
$settings$mybb;

if (
$mybb->settings['hidelinks_enabled'] == "1")
{
if(
$mybb->user['usergroup'] == "1")
{
$message preg_replace("!<a[^>]*(http|www)(.*)</a>!siU""{$mybb->settings['hidelinks_message']}"$message);
}
}


Ich denke folgender Abschnitt ist für jeden klar:

PHP-Code:
if ($mybb->settings['hidelinks_enabled'] == "1")
{
if(
$mybb->user['usergroup'] == "1"

Nur verstehe ich nicht, was danach kommt - zumindest von der Logik nicht. Die Variable $message - wo wird diese denn definiert bzw. woher weiß das Plugin, dass es sich um Beiträge handelt? Wir schreiben in $message rein wenn die if-Bedingung zutrifft und ersetzen Links durch reguläre Ausdrücke - ok! Aber was ist $message in dem Fall? Woher kommt diese Variable und vorallem: Woher weiß das Script, dass es sich um Beiträge handelt? Ich finde den Zusammenhang einfach nicht.

Ich hoffe ich konnte es irgendwie verständlich erklären und mir kann das erklärt werden.

Grüße,
JAY

Ach im Anhang ist das Plugin von welchem ich schrieb. Habe ich irgendwo im MyBB Archiv gefunden.


Angehängte Dateien
.php   hidelinks.php (Größe: 3,28 KB / Downloads: 3)
My  PHP-Version: 7.3.1 | MySQL-Version: 5.7.21
My  Plugins: See all
------
Es gibt nur 10 Arten von Menschen. Die, die binär verstehen - und die, die es nicht tun
Zitieren
#2
Am leichtesten kann man das sehen, wenn man nachschaut, welchen Hook das Plugin verwendet, in diesem Fall ist es parse_message (Zeile 15 im Plugin)
Dann kann man zB. in der Doku nachsehen und entdeckt, dass dieser Hook sich in der Datei inc/class_parser.php in der Funktion parse_message() befindet, die für die Verarbeitung von BBCodes usw. zuständig ist. Die Variable $message enthält den zu verarbeitenden Inhalt, das können Posts sein, aber auch Signaturen oder PN's usw.

In diesem Inhalt $message ersetzt das Plugin für Gäste alles, was sich zwischen den <a> Tags befindet, also die Links durch einen Text.
Zitieren
#3
(13.02.2019, 18:07)doylecc schrieb: Am leichtesten kann man das sehen, wenn man nachschaut, welchen Hook das Plugin verwendet, in diesem Fall ist es parse_message (Zeile 15 im Plugin)
Dann kann man zB. in der Doku nachsehen und entdeckt, dass dieser Hook sich in der Datei inc/class_parser.php in der Funktion parse_message() befindet, die für die Verarbeitung von BBCodes usw. zuständig ist. Die Variable $message enthält den zu verarbeitenden Inhalt, das können Posts sein, aber auch Signaturen oder PN's usw.

In diesem Inhalt $message ersetzt das Plugin für Gäste alles, was sich zwischen den <a> Tags befindet, also die Links durch einen Text.

Danke. Sehr verständlich erklärt. Kurz und schmerzfrei. Eine Frage bleibt noch, weshalb steht in

PHP-Code:
// Run plugin

function hidelinks_hide(&$message

ein &-Zeichen vor $message?

Liebe Grüße
My  PHP-Version: 7.3.1 | MySQL-Version: 5.7.21
My  Plugins: See all
------
Es gibt nur 10 Arten von Menschen. Die, die binär verstehen - und die, die es nicht tun
Zitieren
#4
Okay. Das mit dem & hat sich geklärt. Ich habe das ganze Plugin nochmal neu für 1.8 geschrieben mit paar zusätzlichen Feldern in den Einstellungen. Kriege es nur nicht hochgeladen hier. Steht immer wieder, dass ein internet Fehler auftritt. War ein kleines gutes Plugin zum Verständnis. Danke nochmal für die Hilfe.
My  PHP-Version: 7.3.1 | MySQL-Version: 5.7.21
My  Plugins: See all
------
Es gibt nur 10 Arten von Menschen. Die, die binär verstehen - und die, die es nicht tun
Zitieren
#5
Bei technischen Problemen mit der Website wende dich bitte direkt an mich. Lange herumprobieren bringt nichts.
Den Thread kann ich dann wohl löschen? https://www.mybb.de/forum/thread-36252.html
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#6
Hi

ja - klar, gerne. Ich lade es später nochmal neu hoch.

Grüsse
jay
My  PHP-Version: 7.3.1 | MySQL-Version: 5.7.21
My  Plugins: See all
------
Es gibt nur 10 Arten von Menschen. Die, die binär verstehen - und die, die es nicht tun
Zitieren
#7
Was stimmt mit diesem hier nicht? https://www.mybb.de/erweiterungen/18x/pl...-hide-url/
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#8
Hi,

ist das richtige - kann natürlich drin bleiben. Ich hatte das normal hochgeladen, es wurde mir ständig ein "interner Fehler" angezeigt - ich dachte dadurch wäre die Datei nie am Server angekommen. Aber dann passt es ja.

Grüße
My  PHP-Version: 7.3.1 | MySQL-Version: 5.7.21
My  Plugins: See all
------
Es gibt nur 10 Arten von Menschen. Die, die binär verstehen - und die, die es nicht tun
Zitieren
#9
(13.02.2019, 18:07)doylecc schrieb: Die Variable $message enthält den zu verarbeitenden Inhalt, das können Posts sein, aber auch Signaturen oder PN's usw.

Was genau mache ich denn, wenn ich nur Beiträge bearbeiten will und keine Signaturen. Ist das möglich? Scheint die gleiche Klasse zu sein?

Grüsse
My  PHP-Version: 7.3.1 | MySQL-Version: 5.7.21
My  Plugins: See all
------
Es gibt nur 10 Arten von Menschen. Die, die binär verstehen - und die, die es nicht tun
Zitieren
#10
(14.02.2019, 16:47)itsmeJAY schrieb:
(13.02.2019, 18:07)doylecc schrieb: Die Variable $message enthält den zu verarbeitenden Inhalt, das können Posts sein, aber auch Signaturen oder PN's usw.

Was genau mache ich denn, wenn ich nur Beiträge bearbeiten will und keine Signaturen. Ist das möglich? Scheint die gleiche Klasse zu sein?

Grüsse

Dann würde ich stattdessen wahrscheinlich eher den Hook "postbit" verwenden und den Inhalt von $post['message'] ersetzen anstatt von $message. Das betrifft dann nur die Posts.
Zitieren