Avatar billede AffiliatePro Nybegynder
17. september 2011 - 22:23 Der er 9 kommentarer og
1 løsning

Lave tags om til links

Jeg har et lille script, der laver nogle forudvalgte ord (tags) om til links, i mine artikler. Jeg ønsker dog kun scriptet skal lave det valgte ord om til links, første gang den støder på det. Lige nu ser scriptet ud som nedenstående:

$tagQuery = mysql_query("SELECT * FROM tags");
while($tags = mysql_fetch_array($tagQuery)) {
$artikel = str_replace($tags[tag],"<a href=\"".$tags[url]."\">$tags[tag]</a>",$artikel);
}
print $artikel;
Avatar billede Slettet bruger
17. september 2011 - 22:54 #1
Det vil give problemer hvis nogle af dine forudvalgte ord er en del af et ord i artiklen (f.eks. hvis du vil erstatte ordet "link" og du har en tekst med ordet "blink" eller "links"), og endnu værre hvis de også er en del af nogle andre forudvalgte ord.

En regular expression vil kunne bruges til at søge efter hele ord, som du så kan erstatte med et link. Den skal tage højde for at et ord typisk starter med et mellemrum medmindre det er det første ord i en linie, og slutter med et mellemrum, komma, punktum osv., medmindre det er det sidste ord på linien.
Avatar billede AffiliatePro Nybegynder
17. september 2011 - 22:58 #2
Jeg kan godt se det ikke er smart hvis den gør som du nævner i dine eksempler.

Jeg er dog endnu ikke så langt inde i PHP, så jeg har styr på hvad regular expression vil sige, og hvordan jeg vil kunne bygge scriptet op med dette.
Avatar billede NielsErikP Mester
17. september 2011 - 23:20 #3
Hej..
Mht. til regular expression... tag et kig her :

  http://www.regular-expressions.info/
Avatar billede AffiliatePro Nybegynder
18. september 2011 - 00:45 #4
Efter at have læst lidt, er det lykkes mig at finde en løsning med regular expression, så det kun er når hele ordet der bliver nævnt det virker.

Nu mangler jeg bare at finde ud af hvordan jeg begrænser hvert ord til at blive dannet som link, mere end én gang hver.

$tagQuery = mysql_query("SELECT * FROM tags");
while($tags = mysql_fetch_array($tagQuery)) {
$artikel = preg_replace('/\b'.$tags[tag].'\b/i',"<a href=\"".$tags[url]."\">$tags[tag]</a>",$artikel);
}
print $artikel;
Avatar billede NielsErikP Mester
18. september 2011 - 00:58 #5
Hej..
Er det ikke og gemme de ord der bliver dannet som link og så tjekke og det eksistere i forvejen...
Evt. Array's/Database og så nogle IF sætninger.
Bare en tanke!!
Avatar billede AffiliatePro Nybegynder
18. september 2011 - 01:15 #6
Det kunne godt ske, jeg kan dog ikke lige gennemskue hvordan jeg skal gøre det.

Idéen er at alle nye artikler der bliver tilføjet siden, får tildelt nogle tags (ord), så artiklerne bliver krydslinket mellem hinanden, lidt ligesom man kender det fra Wikipedia. Samtidig bliver der også linket til andre artikler, på andre websider jeg ejer, med nogle tags.
Avatar billede AffiliatePro Nybegynder
18. september 2011 - 01:25 #7
Det var så faktisk ikke så svært som jeg umiddelbart troede, der skulle bare lige tilføjet et ", 1" efter "$artikel" :)

$tagQuery = mysql_query("SELECT * FROM tags");
while($tags = mysql_fetch_array($tagQuery)) {
$artikel = preg_replace('/\b'.$tags[tag].'\b/i',"<a href=\"".$tags[url]."\">$tags[tag]</a>",$artikel, 1);
}
print $artikel;
Avatar billede AffiliatePro Nybegynder
20. september 2011 - 01:39 #8
Kan i begge ikke lige ligge et svar, da i begge var medvirkende til at få mig på rette spor?
Avatar billede NielsErikP Mester
20. september 2011 - 22:22 #9
Hej..
Svar!!!
Glad for at jeg kunne være til hjælp :-)
Avatar billede Slettet bruger
20. september 2011 - 22:40 #10
Ellers tak her. Også glad for du fik det løst.
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