Seite 1 von 2
Mini Ostereier-Such-Mod
Verfasst: 03.03.2008 22:57
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.
Verfasst: 04.03.2008 13:20
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
Verfasst: 04.03.2008 15:42
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.
Verfasst: 04.03.2008 17:34
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
Verfasst: 04.03.2008 18:21
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.
Verfasst: 07.03.2008 14:43
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
Verfasst: 07.03.2008 15:07
von gn#36
Natürlich ist die da drin...
KB:template_system
KB:template_syntax
Irgendwas wie 'OSTEREI' => $ostereibild, an der richtigen Stelle...
Verfasst: 07.03.2008 15:36
von Maxe
So, bin einen riesen Schritt weiter. Wer so etwas auch machen möchte hier die Anleitung:
- viewtopic.php
Suchen nach:
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:
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:
Davor folgendes einfügen:
Code: Alles auswählen
// Osterei-Mod START
'OSTEREI' => $osterei,
// Osterei-Mod ENDE
-viewtopic_body.tpl
Suchen nach:
Danach folgendes einfügen.
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
Verfasst: 07.03.2008 15:47
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";
}

Kombinieren und ein Echo dahinter...
Verfasst: 07.03.2008 16:15
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