Tag cloud van tags in database
ik heb een database met daarin een tabel met blog posts. De tabel ziet er ongeveer zo uit: (met nog een paar kolomen, maar die maken niet uit!)
+---+-----+-----+
| id | title | tags |
+---+-----+-----+
| 1 | test | test, testen|
+---+----+------+
enz.
Nu heb ik de volgende code
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div class="widget tags">
<h3>Tag Cloud</h3>
<ul class="tag-cloud">
<li><a class="btn btn-xs btn-primary" href="#">Apple</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Barcelona</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Office</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Ipod</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Stock</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Race</a></li>
<li><a class="btn btn-xs btn-primary" href="#">London</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Football</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Porche</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Gadgets</a></li>
</ul>
</div>
<h3>Tag Cloud</h3>
<ul class="tag-cloud">
<li><a class="btn btn-xs btn-primary" href="#">Apple</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Barcelona</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Office</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Ipod</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Stock</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Race</a></li>
<li><a class="btn btn-xs btn-primary" href="#">London</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Football</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Porche</a></li>
<li><a class="btn btn-xs btn-primary" href="#">Gadgets</a></li>
</ul>
</div>
Hoe moet ik deze tags omzetten?
Gewijzigd op 20/08/2018 11:56:37 door Rick Okkersen
Zor er eerst voor dat je het veld netjes ophaalt door te fetchen, zoals je altijd doet met het ophalen van data uit een database. Ik neem aan dat je dit wel kan ;-)?
Dat moet je explode gebruiken op de komma op het tags veld. Dan creëer je een nieuwe array met je twee tags die je met foreach kan doorlopen. Vergeet niet even trim te gebruiken op de tags om de eventuele overtollige spaties voor- en achteraan te verwijderen.
Ik zou persoonlijk ook niet voortborduren op deze (m.i. slechte) oplossing, maar dit fatsoenlijk oplossen mits je daartoe in de gelegenheid bent.
Kommagescheiden data in je database kan soms handig zijn, maar in dit geval levert het waarschijnlijk meer problemen op dan dat het oplost.
Alle tags sla ik op in een tabel tags met een primaire Auto Increment ID erbij. Als ik een tag aan een artikel wil koppelen gebruik ik daarvoor een koppeltabel tags_items met het ID van de tag, en het ID van het artikel en eigenlijk ook nog en Type-veld voor het soort artikel (review, nieuws, video).
(Ik kan alle items normaliseren door voor deze drie een items tabel te maken, en daarin te benoemen wat voor item het is. Maar dit is wat legacy-code wat ik ooit nog eens ombouw.)
'Thats it' qua databasestructuur voor wat betreft de tags.
Het voordeel is als ik een tag aan een item wil koppelen, dat ik gebruik kan maken van een autocomplete-systeem. Dus ik voorkom dat ik een typefout kan maken of een tag gebruik die op een andere tag lijkt door een vervoeging (installatie v.s installeren).
Voor dat laatste kan je ook een synoniementabel maken, maar dat vergt een hoop extra onderhoud aan de content. Goede oplettendheid van de redacteur is gewoon belangrijk, en het kiezen van de bestaande en gebruikte tags uit de auto-complete.
Gewijzigd op 20/08/2018 12:46:30 door - Ariën -
post 1: hallo, hoi
post 2: hey
post 3: hallo, hey
Ik moet dus deze tags in een "tag cloud" zien te krijgen die er dan ongeveer zo uitziet: (met html code van hierboven)
hey hoi hallo
En moet de tag-cloud alle tags bevallen, of enkel van de bewuste post?
Als het om alle tags gaat, dan zulk je toch beter moeten normaliseren, zoals Thomas en ik uitleggen.
Gewijzigd op 20/08/2018 13:22:36 door - Ariën -