login  Naam:   Wachtwoord: 
Registreer je!
 Forum

str_replace

Offline rhendriks92 - 27/08/2012 17:15
Avatar van rhendriks92Lid Hallo,

Ik ben bezig met een spinnenweb-tool op mijn website. Ik vroeg me af hoe ik dit het beste kon doen.

In de nieuwsberichten die ik schrijf moeten woorden in deze content vervangen worden met links uit de volgende tabellen: artikels, auteur, cat, info en pakketten.

Ik zat er aan te denken om elke tabel met een aparte while-loop te doorzoeken om te kijken of dit woord zich in de titel bevindt. Voor het gemak heb ik in elke tabel de titels "titel" genoemd ipv "naam" of dergelijke..

Hoe kan ik dit het beste doen?

8 antwoorden

Gesponsorde links
Offline Martijn - 27/08/2012 19:45 (laatste wijziging 27/08/2012 19:50)
Avatar van Martijn Crew PHP Ik begrijp niet helemaal wat je wilt.

Stel jij hebt het woord 'voorbeeld' in je tabel staan, wil je dan dat als een user 'Is dit een voorbeeld?' het woord voorbeeld vervangt?

edit: Als dat het geval is, kom je een heel eind met een foreach. Houdt er wel rekening mee dat door array's heen loopen (foreach is een loop, net als while) je script niet sneller maakt, dat soort dingen wil je beperkt houden. Je zou er over kunnen denken bij het opslaan een 'clean' text op te slaan, en 1 bewerkte (clean wil je houden voor makkelijk in de toekomst)

edit2: Beter zou zijn als je een regex gebruikt. Stel jij hebt het woord 'voor' en ik typ 'voorbeeld', wil je niet dat dat woord wordt verziekt.
voorbeeldje:
  1. $regex = "/( \.\,)".$woord."( \.\,)/i";

Zo even uit mn hoofd, kan zijn dat je even moet tweaken, maar nu krijg je alleen woorden die beginnen/gevolgd worden door een spatie, komma of punt. Is uiteraard naar smaak aan te passen
Offline rhendriks92 - 27/08/2012 20:13
Avatar van rhendriks92 Lid Beste Martijn,

Bedankt voor uw reactie met uitleg. Ik zat er zelf ook aan te denken om het door middel van een foreach te doen. Ik zal de situatie even wat duidelijker uitleggen:

Ik ben bezig met een website waar nieuwsartikelen op komen te staan. Ook bieden we pakketten aan (welke we regelmatig promoten in een nieuwsbericht uiteraard).

De database bestaat uit de volgende tabellen (die gebruikt moeten worden voor het spinnenweb): artikels, auteur, cat, info en pakketten

In de tabel "artikels" komen de nieuwsartikelen uiteraard. Ik zat er om te denken om als handigheid voor het spinnenweb bij elke tabel een veld te maken met link_woorden. Hier komen de woorden in te staan waar dit artikel / pakket e.d. gelinkt aan moet worden. Om dubbele data te vermijden is het misschien handig (?) om hier de woorden te onderscheiden door middel van een komma: voorbeeld, voor, beeld, artikel e.d.

Stel ik post een artikel met in de tekst bijvoorbeeld het woordje "voorbeeld". Dan wil ik dus hebben dat hij alle tabellen na gaat kijken of er ergens het woordje voorbeeld in de link_woorden staat. Misschien kan dit door middel van een foreach omdat in elke tabel de veld link_woorden hetzelfde gaat worden?

Als output van de functie moet het dus zo zijn dat hij het woordje voorbeeld gaat vervangen met <a href="http://www.mijnsite.nl/pagina/voorbeeld" title="Voorbeeld">voorbeeld</a>
Het wordt dus niet zo opgeslagen in de database, maar wordt met de te schrijven functie dus gemanipuleerd zodat de a href er in staat.

Ik hoop dat u het een beetje kan volgen allemaal?
Alvast bedankt
Offline Martijn - 27/08/2012 20:27
Avatar van Martijn Crew PHP Oh, als je bedoelt elk woord van je tekst in de DB te checken is dat een slecht idee, andersom, de waardes uit de database in de tekst opzoeken

again, dit moet je niet on-the-fly doen, daar wordty alles heel traag van
Offline rhendriks92 - 27/08/2012 20:34
Avatar van rhendriks92 Lid Zou ik het niet het beste zo kunnen doen, dat hij bij het opslaan van de artikel gaat kijken naar de tekst, de database gaat doorzoeken naar de woorden, deze gaat vervangen door de link etc. en de tekst zo opslaat in de database?

Zo is het tijdens het opslaan traag, maar heeft de bezoeker hier dus geen last van
Offline Martijn - 27/08/2012 21:58
Avatar van Martijn Crew PHP Ja, maar je zoekt dus woorden UIT de database in de tekst, niet andersom. Per woord uit de database kijk je of het in je tekst voorkomt
Offline rhendriks92 - 28/08/2012 14:53 (laatste wijziging 28/08/2012 14:54)
Avatar van rhendriks92 Lid Is het dan misschien handig om dit alleen voor de artikels te doen? Dan zou ik een aparte tabel kunnen maken met:

id artikel zoekwoord
1 1 computer
2 1 toetsenbord
3 1 muis
4 2 internet
5 3 windows
6 3 ubuntu

etc. etc.

Of denkt u dat dit geen goede oplossing is?



Edit: de spaties vallen weg maar ik denk dat u mij wel begrijpt met dat tabelletje
Offline Martijn - 28/08/2012 15:15
Avatar van Martijn Crew PHP Je kunt het overal doen waar je wilt, zolang je het doet bij het opslaan, merkt je bezoeker er niets van. En 1 tabel hoeft niet, je kunt zoveel doen als je wilt.
Offline rhendriks92 - 29/08/2012 20:25
Avatar van rhendriks92 Lid Nee oke, dus gewoon een functie maken en die bij het opslaan oproepen over de content?
Ik denk dat het op die manier het makkelijkst is, sowieso merkt de bezoeker hier dan niets van
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.304s