Avatar billede cronck Nybegynder
18. november 2010 - 23:59 Der er 6 kommentarer og
2 løsninger

At sætte billeder ind istedet for smileys

Hej eksperter,

Jeg har set et par forskellige måder at parse strenge igennem forskellige funktioner, for at erstatte smilies med billede-tags.

Jeg er dog meget i tvivl om hvordan det gøres mest effektivt.

Som det ser ud nu, ville jeg nok selv lave en sådan funktion, som kører en løkke der læser strengen igennem, for hvert enkel smiley der er tilføjet i et array som indeholder alle gyldige smilies.

Der er ingen grund til at genopfinde den dybe tallerken, og samtidig lave den endnu mere upraktisk end tidligere gjort.

Hvordan gør, eller ville I gøre det mest effektivt, hvis man for eks. har 30 smilies som skal smides ind i forum-indlæg og lign?
Avatar billede webweaver Praktikant
19. november 2010 - 05:21 #1
Umiddelbart ville jeg også bruge noget i den stil vil jeg tro. Ved ikke rigtig hvad der er mest effektivt, men ville bare bruge arrays og en str_replace.

<?php

$smiley_text = array(":-);", ":P;");
$smiley_pics = array("<img src='smilies/01.gif' alt='Happy'>","img src='smilies/02.gif' alt='Happy2'>");
$besked = str_replace($smiley_text, $smiley_pics, $besked);

?>


Hvis man har mange smilies, er det naturligvis en anelse besværligt at skrive ind manuelt, så der kunne man jo have dem listet i en database, og få den til at lave array'et, eller man kunne lave en løkke, der bare tæller et tal op, og så have alle stierne til dine smilies som den samme, undtagen af tallet til sidst. Så de fx kommer til at hedde smiley1, smiley2, smiley3 og så videre...

Så kan man jo vælge at udføre denne del af koden, når koden smides i databasen, fremfor når det hives ud. På den måde skal serveren kun bruge betænkningstid 1 gang på den str_replace, istedet for hver gang indlægget læses.
Avatar billede Slettet bruger
19. november 2010 - 09:10 #2
Jeg ville ikke "ødelægge" brugernes input - men beholde det, som modtaget.
- det er et godt princip at følge..

Men heller ikke spilde serverens tid på at replace alle smileys med grafik, lige inden (og hver gang) indlæggene smides ud til browseren.

I stedet ville jeg gøre det "asynkront" - ude i browseren, efter display!
- først vises indlægene som de er, derefter sexes de op med grafikker.

Evt. give brugeren mulighed for at fravælge dette step - med en "preference".
- personligt ville jeg slå det fra - grafikfiler midt inde i teksten laver bare rod i linjeafstand uden at tilføre egentlig værdi...

PS: 30! - er det ikke lige i overkanten ?
- det gør jo teksten til "kodesprog", hvor man hele tiden skal "slå op" for at se hvad dimserne betyder. Og "forfattere" vil bruge urimelig meget tid på at vælge den helt rigtige smiley, i stedet for at koncentrere sig om hvad de faktisk skriver...
Avatar billede webweaver Praktikant
19. november 2010 - 14:03 #3
Evt. give brugeren mulighed for at fravælge dette step - med en "preference".
- personligt ville jeg slå det fra - grafikfiler midt inde i teksten laver bare rod i linjeafstand uden at tilføre egentlig værdi...


Det vil heldigvis ikke være et problem, da vi har noget som hedder CSS :D Så det vil være det mindste problem ... Afhænger naturligvis også af størrelsen på hver enkelt smiley selvfølgelig.
Avatar billede Slettet bruger
19. november 2010 - 14:29 #4
Mon ikke de er en del større end bogstaver - ellers giver det jo slet ingen mening  }[:^)
- sku nogen være i tvivl, så var det en smiley med klaphat og lang næse  ; D
Avatar billede cronck Nybegynder
20. november 2010 - 07:28 #5
Webweaver:
Jeg ender nok med at bruge str_replace som du også selv nævner.

Alternativt, kunne jeg som der også bliver nævnt, køre et script på klienten, som sætter smiley'erne ind. Er dog ikke så begejstret for denne mulighed, da det at javascript er aktiveret i browseren. :)

T4NK3R:
30 var egentlig bare et tal jeg slyngede ud.
Det kan dog godt komme deropad alligevel, hvis jeg for eks. sætter nordiske flag ind som smilies. :)
Avatar billede cronck Nybegynder
20. november 2010 - 07:28 #6
Smid gerne et svar begge 2, så deler jeg point'ne. :)
Avatar billede Slettet bruger
20. november 2010 - 11:05 #7
Jeg har enorm respekt for websider som stadig fungerer efter at javascript er disablet.
- men ikke noget jeg selv gider (evner) at bekymre mig om..

Lige et "trick" mere, som bibeholder de originale brugerdata - en metode de fleste "store" diskusionsfora benytter - Eksperten også (såvidt jeg kan se):

I stedet for at hente alle indlægene frem og regenerere tråden ved hvert besøg, kan du samle hele diskusionen på "sider", hvor nye indlæg blot tilføjes nederst.

Kæmpe performance fordel, og du kan nøjes med at replace dine smileys én gang (når du tilføjer et nyt indlæg til trådens Side). Til gengæld betyder det, at indlæg og responses bilver spilttet ad. Så brugerne (som her på eksperten) bliver nødt til "manuelt" at referere til det indlæg (indenfor en tråd) de responderer til.

I et perfekt diskusionsforum ville et svar på et bestemt indlæg lægge sig direkte under dette (indrykket, og kollapsérbart) - altså i den originale træstruktur. Men det ses faktisk så sjældent nutildags, at pøblen nok ikke længere ville kunne finde ud af det..

Og side-metoden har også den fordel at nye indlæg altid kan ses nederst på siden, så brugerne slipper for at genlæse hele tråden for at spotte evt. nye indlæg...

Desicions desicions - held og lykke med det : )
Avatar billede webweaver Praktikant
20. november 2010 - 11:42 #8
Et svar herfra ... :)

God weekend til jer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester