Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Emotikony
Forum PHP.pl > Forum > PHP
kamil1114
Chciałbym napisać skrypt , który zamieniałby na przykład treść ":-)" na buźkę snitch.gif
Oczywiście tych buziek i komend byłoby znacznie więcej.
Jak myślicie , zrobić to w mysql'u ? Czy normalnie w php ? Ma ktoś jakiś pomysł ? Myślałem , żeby napisać mocno rozbudowaną funkcję if.
wookieb
Mocno przeczytaj MANUAL!!!
STR_REPLACE
drake88
Zapraszam do lektury mojego tutoriala z innego forum.

Skrypt, który przedstawię będzie zamieniał emotikony tekstowe na obrazkowe. Musimy ustalić zmienną dla katalogu emotek, najlepiej bezwzględną:

Kod
<!-- config.php -->
<?php
    $sc = '/usr/krasnal/www/skrypty/moje/buzki/';
$format = 'gif';


Teraz zainicjujemy tabelę gdzie będziemy przechowywać nazwy plików z emotkami.

Kod
   $buzki = array(
    "smile" => '/:\)/',
    "sad" => '/:\(/',
    "happy" => '/:D/',
    );
?>


Trzeba pamiętać, iż podajemy same nazwy (bez rozszerzeń). Zapisujemy owy plik jako config.php
Określamy teraz właściwości odpowiadającego zmiennym w konfiguracji:

Kod
<?php
    class Buzki
    {
        var $sciezka;
        var $buzki;
        var $format;
var $pliki;


Zamieniamy tablicę z emotami tak, by wartości zawierały indeksy a indeksy wartości (funkcja array_flip())

Kod
function sciezki( $tablica )
        {
            foreach( $tablica AS $index => $wartosc ) {
                $gotowa[] = '<img src="' . $this -> pliki . $wartosc . '.' . $this -> format . '">';
            }
            return $gotowa;
        }


Wynik zostaje zapisany w tablicy $gotowa, jednak trzeba dołączyć plik konfiguracyjny i przypisać wartości jego zmiennych.

Kod
function Buzki()
        {
            include( './config.php' );
            $this -> sciezka = $sc;
            $this -> format = $format;
            $this -> buzki = $buzki;


Zadbać też trzeba o przygotowanie znaczników:

Kod
   $this -> pliki = $this -> sciezki( array_flip( $buzki ) );
        }


Skorzystamy teraz z preg_replace() który zamienia pasujące wartości z jednej tablicy odpowiednikami z drugiej.

Kod
  function zamien( $tekst )
        {
            $wynik = preg_replace( $this -> buzki, $this -> pliki, $tekst );
            return $wynik;
        }    
?>


Zapisujemy jako buzki.php
Teraz, aby użyć naszej klasy w skrypcie musimy ją dołączyć:

Kod
include('buzki.php');


Plik buzki.php musi zmienić ścieżkę pliku konfiguracji na ten sam katalog:

Kod
include( './buzki/config.php' );


Pozostało utworzenia egzemplarza klasy:

Kod
$buzki = new Buzki;
kamil1114
Bardzo dziękuję za udostępnienie skryptu. Niestety nie znam jeszcze OOP , ale na razie zastosuję ten skrypt , a później jak się nauczę OOP , to postaram się go zrozumieć.
Fafu
Po 1 to jest napisane pod PHP4 czyli przestarzałe...
Po 2 nie wiem po co pisać klasę skoro można użyć 1 funkcji:
  1. <?php
  2. function emotki($tekst)
  3. {
  4. //tablica z emotkami
  5. $emoty = Array(' ;)' => 'mruga2.gif',
  6. ' :/' => 'kwasny.gif',
  7. '[lol]' => 'lol.gif');
  8.  
  9. // pętla
  10. foreach($emoty as $kod => $obrazek)
  11. $tekst = str_replace($kod, '<img src="images/emoty/'.$obrazek.'">', $tekst);
  12.  
  13. //zwracamy przerobiony tekst
  14. return $tekst;
  15. }
  16. ?>
thek
Jest jeszcze jedna rzecz, o której niektórzy zapominają... Czasem emoty mają tekst w którego skład "wchodzą" inne emoty winksmiley.jpg Dlatego dla bezpieczeństwa lepiej byłoby pętlę zaczynać od tych najdłuższych ( czyli iluś znakowych ) schodząc do tych 2-znakowych. Poza tym str_replace zrobi robotę szybciej. A jeśli już masz ochotę się bawić to niech to będzie dodatkowa funkcja klasy wyświetlającej. Bo do bazy to musi pójść jako tekst bez przeróbek, gdyż nie wiesz czy ktoś chce oglądać posty z, czy bez emot.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.