Ik ben bezig met een overzicht van artiesten en wil daar wat filter mogelijkheden maken voor de bezoeker. Nu kwam ik deze website tegen: www.sportsspeakers.nl/sprekers | waar je kan filteren op verschillende mogelijkheden.
Hoe kan ik dit het beste doen? Ik heb gezocht en kwam ook deze website tegen jplist.com/togglefiltersexamples/radio-buttons-filters waarbij je data kan filteren met jquery. Zou dit een oplossing kunnen zijn of is dit weer niet seo vriendelijk?
Ik zou sowieso gaan voor een directe filtering op de alfabetisering van de achternamen. En dus een lijst met letter-navigatie. Zorg dat je slugs gebruikt voor de resultaten, zoals bijv.: www.site.nl/artiesten/delta-goodrem.html
En boven de lijst een filter plaatsen die op filters zoekt in je hele database. Uiteraard via GET.
Dat jQuery-script is overigens 'deprecated' en gebruik daarvan raad ik dus niet meer aan. Verder moet ik even kijken hoe de vervanger precies werkt, een of die nuttig is
Ikzelf gebruik een 'Single Point of Entry', waarbij alle verzoeken in de index.php terechtkomen.
Daar kan je dan eenvoudig alles in routeren naar de juiste delen van je site:
<?php
$path = trim(substr($uriData['path'], strlen(dirname($_SERVER['SCRIPT_NAME']))), '/');
print_r($path);
?>
Dat bespaart een hele sloot aan rewrite-rules als je een flinke site hebt. Maar inbouw van een dergelijk SPE-systeem is niet triviaal, en vergt een flinke verbouwing aan je code. Terwijl een mod-rewrite rule simpeler is. Maar wel op den duur minder makkelijker onderhoudbaar is.
Verder snap ik niet wat je wilt met een filtertabel in de database? Filteren doet de gebruiker toch zelf? Of ga je dit cachen?
ik zou de talen via een koppeltabel doen. Dat zoekt makkelijker.
Dus een tabel met talen, een een koppeltabel met artiesten_talen Talen
1 - Nederlands
2 - Vlaams
3 - Frans
4 - Fries
5 - Engels
etc..
artiesten_talen
1 - 1
1 - 5
2 - 5
Artiesten
1 - Trijntje
2 - Madonna
Met CONCAT() kan je ook een veld met de talen in de artiesten-tabel toevoegen, en daarop de juiste taal extraheren, maar filteren wordt lastig als er taalfouten in staan.
Duidelijk. Maar even terug komende op je 'Single Point Entry' met index.php. Betekent dit dat er maar 1 bestand is? index.php met in het bestand verwijzingen met include('file.php')?
Hoe weet jij dat dit de include van /artiesten (artiesten.php) is?
Dit doe je door dit zelf zo te programmeren. In wezen schrijf je dus zelf een "mapping" of "route" van een applicatiepad naar een PHP-bestand die het verzoek verder afhandelt, vaak op grond van de vorm van de URL of extra informatie die bij deze URL is opgeslagen.
index.php is de centrale plek waar alle verzoeken binnenkomen, daar vandaan wordt je middels code verder geleid naar de juiste bestemming, of een ander verdeelpunt die je verder op weg helpt naar de uiteindelijke bestemming. Deze bestemming is meestal een specifiek stuk code die je invoegt die verder acteert op de aangeroepen URL.
Je bent helemaal vrij in hoe je deze routing verder implementeert. Dit kan met een eenvoudig switch-statement, met reguliere expressies waarbij je tekstpatronen gebruikt, of wellicht een database waarin alle (gedeeltelijke of volledige) applicatiepaden staan opgeslagen die daar worden gekoppeld aan bijbehorende code(-bestanden) die de verdere afhandeling verzorgen.
Bijvoorbeeld:
aangeroepen URL: https://jesite.nl/forum/message/12/hello-world
applicatie pad: /forum/message/12/hello-world
index.php verzorgt de initiële afhandeling, en je routing is zodanig geïmplementeerd dat alles van de vorm /forum/* leidt tot het includen van /pad/naar/code/forum.php
forum.php ziet vervolgens dat het het onderdeel "message" betreft, dit zou weer kunnen leiden tot het includen van /pad/naar/code/forum/message.php
en daar wordt uiteindelijk bericht 12 weergegeven.
In dit voorbeeld dient index.php dus voor de routing van je hele applicatie, en /pad/naar/code/forum.php specifiek voor de routing binnen het forum.
Van de oorspronkelijke single point of entry in je applicatie (index.php) wordt in deze opzet de URL onderweg ook partje voor partje "opgegeten" totdat het zijn uiteindelijke bestemming bereikt.
En als je dit dus een beetje generiek opzet kun je de volledige navigatie door je site op deze manier via code opbouwen.