Heyho Epvpler.
Ich schreibe gerade einen Chat für meine Webseite und bin mir gerade unschlüssig wie ich Emotes einbinden soll. Der Chat soll in etwa so funktionieren wie der von Twitch.
Wenn zb diese Nachricht geschrieben wird "Heyho ihr nudeln Kappa",
Dann soll die Nachricht aufgeteilt werden, nach emotes durchsucht und an der richtigen stelle eingebunden werden.
Ich dachte daran einfach die nachricht per explode() zu teilen, mit file_exists() zu checken ob ein bild mit dem Emote-Namen vorhanden ist und dann einfach wieder zusammen zu packen.
Gibts ne bessere Lösung für das ganze?
Die Chat-nachrichten selbst werden in einer Datenbank gespeichert.
^ Danke. Ich weiß nicht wieso, aber ich denke manchmal zu kompliziert.
Ich stehe hier bei dem ganzen nur vor einem Problem, da ich Twig zuvor noch nie genutzt habe.
Edit: Ich war gestern Abend einfach zu müde!
Funktioniert jetzt alles wunderbar.
Danke.
Ist der aktuelle Code. Das erste Emote von jeder Nachricht wird ersetzt, sonst keins.
Zudem habe ich das Problem, dass der Chat von oben nach unten geht und nicht von unten nach oben, zb wie bei Twitch und mir da gerade keine Lösung einfällt.
Ist der aktuelle Code. Das erste Emote von jeder Nachricht wird ersetzt, sonst keins.
Zudem habe ich das Problem, dass der Chat von oben nach unten geht und nicht von unten nach oben, zb wie bei Twitch und mir da gerade keine Lösung einfällt.
Wenn du den Chatverlauf ändern möchtest, dann einfach bei deinem sql-Statement "sort by id DESC oder sort by id ASC" einfügen oder wenn du eine Zeit hast, dann die richtige Spalte von der Zeit einfügen. Ich hoffe du benutzt dafür eine auto_increment id-Spalte.
Naja, im Grunde wäre es ja nicht genau das was ich will. Die Groß-kleinschreibung ist mir da irgendwie doch schon wichtig.
Um das nochmal kurz zu fassen:
$emotes = Alle Emotes aus der Datenbank.[name,link]
$message = user nachricht.
Jedes vorkommen von ALLEN emotes aus der Datenbank soll ersetzt werden mit dem emote link.
Ich hab jetzt gerade wieder ne Stunde geschaut mit welchen Schleifen bzw loops es am sinnvollsten ist und ich bin zu keinem Ergebnis gekommen.
Folgendes gibt immer NUR das letzte Emote aus der Datenbank aus:
foreach ($emotes as $key => $value) { $str = str_ireplace($key, $value, $str); } echo $str; // Output: // This is just a simple Message :Kappa:, but it :FeelsBadMan: to hear that. :Kappa: :FeelsBadMan:
Sollte ja einfach sein dein Datenbank output in einem array zu speichern. Machst einfach eine Abfrage welche Emotes es alles gibt, fertig.
foreach ($emotes as $key => $value) { $str = str_ireplace($key, $value, $str); } echo $str; // Output: // This is just a simple Message :Kappa:, but it :FeelsBadMan: to hear that. :Kappa: :FeelsBadMan:
Sollte ja einfach sein dein Datenbank output in einem array zu speichern. Machst einfach eine Abfrage welche Emotes es alles gibt, fertig.
Das sieht doch schonmal besser aus. Selbst, wenn ich deins Kopiere und bei mir einfüge, wird nur fbm ausgetauscht, das Kappa nicht!
Mach doch einfach nur eine Abfrage fetchAll() und du hast das Array.
Da brauchst du keine while mehr, lass dir dein Array ausgeben und schau wie es aufgebaut ist.
Ggf. kann ich morgen auf der Arbeit oder heute Abend mal nachschauen.
Zeig mir dann auch mal den Aufbau deiner Tabelle wo die Emotes alle drin sind.
Erstmal danke für deine mühe und hilfe.
Ich habe einfach irgendwie nen Problem damit, das mysqli immer direkt nen array ausgegeben hatt und bei pdo es halt ein assoziatives array ist.
Oder ich mache etwas komplett falsch.
Ich habe heute nun auf 10 verschiedene arten die Emotes ausgegeben, auch erfolgreich, aber jedesmal nur das dritte. Vielleicht liegts auch an der Datenbank, was ich aber eigentlich bezweifel..
Ich schaue morgen früh nochmal dabei.
Weiter habe ich aktuell nicht gemacht, gibt aber auch nur das letzte Emote aus: