Mini Ostereier-Such-Mod

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Maxe
Mitglied
Beiträge: 154
Registriert: 15.07.2006 00:17

Mini Ostereier-Such-Mod

Beitrag von Maxe »

Hallo zusammen,

ich will gern folgendes Umsetzen und finde das wäre doch eine nette Idee für Ostern.

In den BBCode soll ein neuer Tag (weiß nur der Admin) eingeführt werden namens [Osterei].
Dieser wird dann im Beitrag automatisch als eine Grafik angezeigt!
--> Wie und wo muss dieser Code in die bbcode.php rein?

Zweitens müssen jetzt die "Eier" im Forum versteckt werden. Dies würde ich am liebsten wie folgt machen. Ein SQL Befehl der eine bestimmte Anzahl an Eiern in sämtlichen bereits geposteten Beiträgen immer am Ende einfügt.
--> Wie kann man per Zufall 100 Eier ( [Osterei] ) in 30.000 Posts per SQL immer am Ende einpflanzen?

Finde diese Idee ganz nett und glaube auch dass die Umsetzung sehr einfach ist?!

Viele Grüße Martin

PS: Den Befehl um nach Ostern weider alle [Osterei] zu löschen sollte man auch überlegen.
Maxe
Mitglied
Beiträge: 154
Registriert: 15.07.2006 00:17

Beitrag von Maxe »

Hallo zusammen,

Teil 1 hab ich gelöst. Zwar nicht mega toll aber es geht. Leider können auf diese Art wie ich es gelöst hab keine Admin etc mitspielen, da sie nach dem Fund eines Ostereis einfach auf "editieren" klicken können und so den BBcode-befehl sehen. Und dann über die Suche alle Eier finden.

Datei include/bbcode.php:

Code: Alles auswählen

	// [i] and [/i] for italicizing text.
	$text = str_replace("[i:$uid]", $bbcode_tpl['i_open'], $text);
	$text = str_replace("[/i:$uid]", $bbcode_tpl['i_close'], $text);
Danach folgendes einfügen:

Code: Alles auswählen

	$text = str_replace("[ostereiernest]", '<img src="images/osterei.jpg">', $text);
---

Nun fehlt nurnoch der SQL Befehl um 100 Eier in den Beiträgen zu verteilen. Hat jemand dafür einen Vorschlag?

Viele grüße Maxe
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Zufall ist immer etwas blöd, denn "wirklichen" Zufall gibt's beim PC nicht...

Mögliche Vorgehensweise:
  • Höchste Post-ID bestimmen (SELECT max(*)...)
  • 100 Zufallszahlen zwischen 1 und der Höchsten ID bestimmen und speichern (->[php:rand])
  • UPDATE ... SET post_text = CONCAT(post_text, ' [osterei]') WHERE post_id IN(...)
  • Anzahl der betroffenen Zeilen bestimmen ($db->sql_affectedrows())
  • Wenn weniger als 100 gab es ein paar Posts nicht mehr, das gleiche also noch mal mit der fehlenden Anzahl (100 - affectedrows - bisherige), wobei allerdings die generierten IDs mit den schon erstellten verglichen werden sollen um keinem Post zwei Ostereier hinzuzufügen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Maxe
Mitglied
Beiträge: 154
Registriert: 15.07.2006 00:17

Beitrag von Maxe »

Hallo gn,

danke vorab für deine hilfreiche Unterstützung.

Bin gerade etwas am schwanken ob so ein "harter" DB Eingriff wirklich gut ist. Wenn da was schief läuft dann knallt es richtig.

Bin gerade am überlegen ob man es nicht so umsetzen sollte, damit könnten auch Admins etc mitspielen:

- Alle Post-IDs ermitteln udn davon 100 per Zufall fest auswählen.
- in der viewtopic.php dann eine Abfrage des aktuellen Beitrags abrufen und mit diesen Zufallszahlen vergleichen
- Wenn Übereinstimmung dann über die tpl Datei nach der Beitragsausgabe ein Osterei darstellen.

Finde diese Idee wesentlich humaner. Wie verhält sich der Vergleich von 100 Zahlen pro Post in der Rechenzeit?

Viele Grüße Maxe
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Wenn du die IDs "hart" generierst (und dann ein Array daraus baust) dann dürftest du da nicht viel von merken wenn du nicht gerade hunderte Posts auf einer Seite anzeigst. Du kannst natürlich mit Hilfe intelligenter Sortierung noch ein wenig Power rausholen (z.b. indem die IDs nicht einfach so im Array landen sondern bereits nach Thema in einem Subarray vorsortiert sind wodurch du nur noch alle IDs vergleichen musst die im gleichen Thema sind) ich vermute aber mal, dass sich das bei 100 Stück noch nicht nennenswert auswirkt. Zur Generierung des Arrays solltest du dir selbst Code erzeugen (Hundert Einträge von Hand sind denke ich ziemlich anstrengend ;) ), z.b. grob so:

Code: Alles auswählen

while(...)
{
$text .= "$array['topic_id'][] = $id;\n";
}
Wenn du vor dem DB Eingriff ein Backup machst und vor dem Entfernen aus der DB auch, dann solltest du eigentlich kein großartiges Risiko eingehen (es sei denn dass du das Backup mit dem Foreninternen System machst).

Allerdings ist die zweite Methode natürlich tatsächlich komplett ohne Risiko für die DB.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Maxe
Mitglied
Beiträge: 154
Registriert: 15.07.2006 00:17

Beitrag von Maxe »

So, bin jetzt gerade dabei die Version ohne DB zu machen.

Aber ich suche verzweifelt die Ausgabe der Threads in der viewtopic.php. Kann es sein, dass die dort gar nicht ist?

Würde dort gern folgendes einbauen:

Code: Alles auswählen

  <?php
  if(in_array($topic_id,$osterei_array))
    {
    ostereibild = '<img src="....">';
    }
  ?>
Und im tpl dann das Bild ausgeben.

Könntest du mir da nochmal helfen?

Viele grüße Maxe
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Natürlich ist die da drin...

KB:template_system
KB:template_syntax ;)

Irgendwas wie 'OSTEREI' => $ostereibild, an der richtigen Stelle...
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Maxe
Mitglied
Beiträge: 154
Registriert: 15.07.2006 00:17

Beitrag von Maxe »

So, bin einen riesen Schritt weiter. Wer so etwas auch machen möchte hier die Anleitung:

- viewtopic.php

Suchen nach:

Code: Alles auswählen

include($phpbb_root_path . 'portal_poll.'.$phpEx);
Danach folgendes einfügen:

Code: Alles auswählen

// Osterei-Mod START
$osterei_array = array("266");   // Array bitte selbst mit Werten füllen
// Osterei-Mod ENDE
Suchen nach:

Code: Alles auswählen

$message = $postrow[$i]['post_text'];
Davor folgendes einfügen:

Code: Alles auswählen

// Osterei-Mod START
  if(in_array($postrow[$i]['post_id'],$osterei_array))
    {
    $osterei = '<img src="images/osterei.gif">';
    } else { 
	$osterei = '';
	}
// Osterei-Mod ENDE
Suchen nach:

Code: Alles auswählen

		'MESSAGE' => $message,
Davor folgendes einfügen:

Code: Alles auswählen

		// Osterei-Mod START
		'OSTEREI' => $osterei,
		// Osterei-Mod ENDE

-viewtopic_body.tpl

Suchen nach:

Code: Alles auswählen

{postrow.MESSAGE}
Danach folgendes einfügen.

Code: Alles auswählen

{postrow.OSTERN}
Das wars.

Hat noch jemand eine Idee wie man nun 100 zufällige Werte aus allen aktiven Beiträgen gleich schön in array-Form bringen kann?

Viele Grüße Maxe
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

gn#36 hat geschrieben:Zufall ist immer etwas blöd, denn "wirklichen" Zufall gibt's beim PC nicht...

Mögliche Vorgehensweise:
  • Höchste Post-ID bestimmen (SELECT max(*)...)
  • 100 Zufallszahlen zwischen 1 und der Höchsten ID bestimmen und speichern (->[php:rand])
  • UPDATE ... SET post_text = CONCAT(post_text, ' [osterei]') WHERE post_id IN(...)
  • Anzahl der betroffenen Zeilen bestimmen ($db->sql_affectedrows())
  • Wenn weniger als 100 gab es ein paar Posts nicht mehr, das gleiche also noch mal mit der fehlenden Anzahl (100 - affectedrows - bisherige), wobei allerdings die generierten IDs mit den schon erstellten verglichen werden sollen um keinem Post zwei Ostereier hinzuzufügen.
gn#36 hat geschrieben:... Zur Generierung des Arrays solltest du dir selbst Code erzeugen (Hundert Einträge von Hand sind denke ich ziemlich anstrengend ;) ), z.b. grob so:

Code: Alles auswählen

while(...)
{
$text .= "$array['topic_id'][] = $id;\n";
}
:roll: Kombinieren und ein Echo dahinter...
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Maxe
Mitglied
Beiträge: 154
Registriert: 15.07.2006 00:17

Beitrag von Maxe »

So, habs auch noch hinbekommen ;)
Nicht schön aber klappt:

Code: Alles auswählen

<?php

$anzahl = 100;
$max_id = 30000;

  while($count < $anzahl)
    {
	  	srand(microtime()*1000000);
  		$text .= rand(1,$max_id) . ",";

    $count++;
    }

echo $text;
	
?>
Dies Ausgabe dann einfach in den Array im Quelltext der viewtopic.php kopieren.

Mod fertig :)

Grüße Maxe
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“