Overzicht van artiesten met data grid - jquery

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Pagina: 1 2 volgende »

Kees Mulder

Kees Mulder

08/01/2019 08:51:13
Quote Anchor link
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?

Kan iemand hier wat over vertellen?
 
PHP hulp

PHP hulp

21/11/2024 21:30:35
 
- Ariën  -
Beheerder

- Ariën -

08/01/2019 09:21:29
Quote Anchor link
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
Gewijzigd op 08/01/2019 09:23:38 door - Ariën -
 
Kees Mulder

Kees Mulder

08/01/2019 11:13:25
Quote Anchor link
Dank voor je informatie. Dat met de slugs begrijp ik een beetje. Je keuze moet er dan uitzien als: www.site.nl/artiesten/borsato of www.site.nl/artiesten/trijntje

Weet jij ook of er ergens een voorbeeld is zodat ik kan zien hoe dat werkt? Ben al even aan het zoeken geweest maar kan het nog niet vinden.

En weet jij of de data om te filteren ook in de table van de artiesten moet staan?

Ik heb een table met 'artiesten' en een table 'filters'

ARTIESTEN
artiesten_id
artiesten_naam

FILTERS
filters_id
filters_naam
Gewijzigd op 08/01/2019 11:15:34 door Kees Mulder
 
- Ariën  -
Beheerder

- Ariën -

08/01/2019 11:33:39
Quote Anchor link
Met mod_rewrite kan je zulke URL's maken.

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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?
Gewijzigd op 08/01/2019 11:37:36 door - Ariën -
 
Kees Mulder

Kees Mulder

08/01/2019 12:53:36
Quote Anchor link
De gebruiker kan zelf een filter kiezen bijv. taal: nederlands, engels, frans, duits.

Zet je deze dan in de table artiesten?

ARTIESTEN
artiesten_id
artiesten_naam
artiesten_taal

ARTIESTEN
1
trijntje
nederlands engels

2
borsato
nederlands italiaans
 
- Ariën  -
Beheerder

- Ariën -

08/01/2019 13:12:09
Quote Anchor link
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.
Gewijzigd op 08/01/2019 13:14:35 door - Ariën -
 
Kees Mulder

Kees Mulder

10/01/2019 08:52:39
Quote Anchor link
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')?
 
- Ariën  -
Beheerder

- Ariën -

10/01/2019 09:32:06
Quote Anchor link
Eén bestand waarop alles binnen komt. Daarvandaan kan je zelf aan de hand van de url bestanden includeren.

Dus als www.site.nl/contact wordt aangeroepen, dan gebruik je in index.php een include naar contact.php
Gewijzigd op 10/01/2019 09:32:37 door - Ariën -
 
Kees Mulder

Kees Mulder

10/01/2019 12:16:50
Quote Anchor link
Oke dat is helder. Maar hoe ziet dan het volgende eruit in een include in de index.php

Nu heb ik een overzicht van artiesten: www.site.nl/artiesten/ (wat eigenlijk artiesten.php) is

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
include('artiesten.php');
?>


Maar hoe doe je dat dan met filters:

www.site.nl/artiesten/taal/nederlands/genre/popgroep/

Hoe weet jij dat dit de include van /artiesten (artiesten.php) is?
 
- Ariën  -
Beheerder

- Ariën -

10/01/2019 12:33:39
Quote Anchor link
Je moet zelf een routeringsscript in index.php bouwen. Dit kan je bijv. met switch() doen.
 
Thomas van den Heuvel

Thomas van den Heuvel

10/01/2019 15:31:35
Quote Anchor link
Kees Mulder op 10/01/2019 12:16:50:
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.
Gewijzigd op 10/01/2019 15:49:48 door Thomas van den Heuvel
 
Kees Mulder

Kees Mulder

10/01/2019 18:45:15
Quote Anchor link
Dank voor de uitleg en heb inderdaad al wat zitten lezen en bekijken maar begrijp nog niet zo goed hoe je dan de routing doet zoals in je url voorbeeld.

Ik heb mijn .htaccess aangepast en de index.php gemaakt met:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
// Read REQUEST_URI, suppress errors (gave E_WARNING prior to PHP 5.3.3).
$uriData = @parse_url($_SERVER['REQUEST_URI']);

$path = '';
if ($uriData === false) {
    // Do something?
} else {
    if (isset($uriData['path'])) {
        // We might be in a subdirectory of the webroot.
        // We are only interested in the part starting from this relative root.

        $path = str_replace(DIRECTORY_SEPARATOR, '/', $uriData['path']);
        $relativePath = str_replace(DIRECTORY_SEPARATOR, '/', dirname($_SERVER['SCRIPT_NAME']));
        // Strip the relative path from $path.
        $path = substr($path, strlen($relativePath));
        // Finally, strip any leading/trailing slashes so we end up with a "cleaned" path.
        $path = trim($path, '/');
    }
}


$path = trim(substr($uriData['path'], strlen(dirname($_SERVER['SCRIPT_NAME']))), '/');

    switch ($path) {
        case (
'homepage'):
            include 'homepage.php';
            break;
        case (
'about'):
            include 'about.php';
            break;
        case (
'artiesten'):
            include 'artiesten.php';
            break;
        default:

            include 'homepage.php';
    }

?>


Als ik dan www.site.nl/artiesten in tik kom ik daar wel op uit. Maar als ik dan www.site.nl/artiesten/taal/nederlands in tik gaat hij naar de homepage. Hoe kan ik dat oplossen net zoals in je voorbeeld.
 
- Ariën  -
Beheerder

- Ariën -

10/01/2019 19:12:29
Quote Anchor link
Heb je al de .htaccess aangemaakt, zoals het artikel uitlegt?

Een tipje: kijk eens met print_r($path) in welk element de paginanaam zit ;-)
Gewijzigd op 10/01/2019 19:20:16 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

10/01/2019 19:20:12
Quote Anchor link
Nu ja, je kunt dus een soort van verdeel-en-heers strategie gebruiken zoals ik eerder aangaf.

Het schoongemaakte applicatiepad zit in $path. Je zou dus ook $path kunnen opdelen op grond van (forward) slashes. Deze partjes -ook wel slugs genoemd- kun je weer gebruiken om te besluiten welke code wordt uitgevoerd.

Dus zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// ... alle bovenstaande code minus het switch deel ...
$pathParts = explode('/', $path);

if (empty($pathParts[0])) {
    // lege slug - toon voorpagina
    // ...

} else {
    // controleer hier eerste deel van applicatiepad
    switch ($pathParts[0]) {
        case
'x':
            // do stuff;
        break;
        // et cetera
        default: // niet-bestaande pagina, toon 404
    }
}

?>

En zo kun je meerdere partjes controleren, of de verdere afhandeling verplaatsen naar de code zelf en bovenstaande code enkel als initiele doorverwijzing gebruiken. In die case 'x' zet je dus het eerste deel van je applicatiepad ('artiesten').

Een alternatief is een autoloader in combinatie met classes, dat is tevens ook wat generieker en vereist geen code voor alle specifieke pagina's. Maar het bovenstaande doet in principe wat je ermee wilt bereiken.
 
Kees Mulder

Kees Mulder

10/01/2019 20:13:33
Quote Anchor link
Ik begin het een klein beetje te begrijpen. Ik heb je code overgenomen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// ... alle bovenstaande code minus het switch deel ...
$pathParts = explode('/', $path);

if (empty($pathParts[0])) {
    // lege slug - toon voorpagina
    // ...

} else {
    // controleer hier eerste deel van applicatiepad
    switch ($pathParts[0]) {
        case
'artiesten':
            // do stuff;
            include 'artiesten.php';
        break;
        // et cetera
        case 'about':
            include 'about.php';
            break;
        default:
// niet-bestaande pagina, toon 404
    }
}

?>


Als ik dan www.site.nl/artiesten/taal/nederlands

Dan zie ik de pagina artiesten.php

Als ik dan een op de pagina artiesten.php een onderstaande echo doen dan krijg ik los te zien 'taal' en 'nederlands'

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
echo $pathParts[1];
echo $pathParts[2];
echo $pathParts[3];
echo $pathParts[4];
echo $pathParts[5];
?>


Maar hoe kan ik dit dan naar de selectie van tabel doen. Want ik kan ook doen www.site.nl/artiesten/genre/popgroep
 
- Ariën  -
Beheerder

- Ariën -

10/01/2019 20:32:32
Quote Anchor link
$pathParts[1] bevat de waarde van de het tweede URL-deel.
Die kan je gebruiken bij het zoeken.

Als je echt met een zoekformulier wilt zoeken zou ik persoonlijk $_GET aanraden voor de zoek-opdrachten. Dan kan je met de 'back'-functie van je browser nog makkelijk terug gaan, als je POST gebruikt, geeft elke browser dan een waarschuwing of de POST-request opnieuw moet worden uitgevoerd, en dat is best hinderlijk.
Gewijzigd op 10/01/2019 20:52:52 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

10/01/2019 23:00:36
Quote Anchor link
Kees Mulder op 10/01/2019 20:13:33:
Maar hoe kan ik dit dan naar de selectie van tabel doen. Want ik kan ook doen www.site.nl/artiesten/genre/popgroep

Dit regel je op precies eenzelfde wijze (verder) in artiesten.php waar je $pathParts[1], $pathParts[2] et cetera verder inspecteert. Het helpt hierbij dat je er een koppelwoord tussenzet, zoals /artiesten/genre/<genre> waarbij <genre> bijvoorbeeld jazz of klassiek is. De /genre na /artiesten is dan in artiesten.php een indicatie dat er een specifiek genre volgt. Op die manier kun je makkelijker beslissen welk overzicht je wilt tonen.

- Ariën - op 10/01/2019 20:32:32:
Als je echt met een zoekformulier wilt zoeken zou ik persoonlijk $_GET aanraden voor de zoek-opdrachten. Dan kan je met de 'back'-functie van je browser nog makkelijk terug gaan, als je POST gebruikt, geeft elke browser dan een waarschuwing of de POST-request opnieuw moet worden uitgevoerd, en dat is best hinderlijk.

Je zou er ook aparte "pagina's" met nette URLs van kunnen maken die dynamisch gegenereerd worden op grond van wat er in de URL staat. Hiermee scoor je in zoekmachines waarschijnlijk beter dan met iets wat uit een querystring komt.

EDIT: of je gebruikt dus een autoloader en een zwik classes, dan is de kans wat kleiner dat dit verzandt in één grote brei als je niet netjes te werk gaat. Maar dat is dus weer een stapje verder qua complexiteit.

Dit is van zichzelf ook al redelijk ingewikkelde materie, vooral als je met interne links aan de slag gaat en dan je site wilt verhuizen :). Het liefst houd je dit allemaal dynamisch zodat het automatisch meeverandert wanneer je je site verplaatst. Ooit gekeken naar een blogsysteem of CMS toevallig? Daarin is meestal al het e.e.a. omtrent routing geregeld.
Gewijzigd op 10/01/2019 23:16:08 door Thomas van den Heuvel
 
Kees Mulder

Kees Mulder

11/01/2019 11:02:00
Quote Anchor link
Ik heb in artiesten.php het volgende staan. Ik begrijp nu niet zo goed hoe ik path zoals <taal> of <genre> in een $_GET moet zetten.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

$pathParts
[1];
$pathParts[2];
$pathParts[3];
$pathParts[4];
$pathParts[5];
$pathParts[6];

$sql = 'SELECT * FROM artiesten
LEFT JOIN artiesten_talen ON artiesten_talen.artiest_id = artiesten.artiest_id
LEFT JOIN talen ON talen.talen_id = artiesten_talen.talen_id
LEFT JOIN artiesten_genres ON artiesten_genres.artiest_id = artiesten.artiest_id
LEFT JOIN genres ON genres.genre_id = artiesten_genres.genre_id

'
;
if (isset($_GET['taal']) && ctype_digit($_GET['taal'])) {
    $sql .= '  WHERE taal = ' . $_GET['taal'];
}


 $sql .= ' GROUP BY artiesten.naam ASC';
?>


Ik heb wel een klein CMS-systeem draaien voor toevoegen en veranderen van de artiesten.
 
- Ariën  -
Beheerder

- Ariën -

11/01/2019 13:52:05
Quote Anchor link
Als je GET gebruikt is het toch goed zo?
Vergeet niet te escapen.
 
Thomas van den Heuvel

Thomas van den Heuvel

11/01/2019 15:28:20
Quote Anchor link
Kees Mulder op 11/01/2019 11:02:00:
Ik heb in artiesten.php het volgende staan. Ik begrijp nu niet zo goed hoe ik path zoals <taal> of <genre> in een $_GET moet zetten.

Wederom, dit zul je zelf moeten programmeren. En als je dat in $_GET wil doen, so be it. Als je dan toch bezig bent met het bouwen van nette URLs zou ik dit ook gewoon meenemen.

Je bereikt dit dus door zelf de URLs te bouwen. Dit is de wederhelft van het onderdeel "routing". Aan de ene kant bouw je URLs in hun nette vorm en aan de andere kant moeten deze herkend en opgevangen worden om verder verwerkt te worden. Het eerste deel is dus gewoon een kwestie van het bouwen van hyperlinks in HTML, bijvoorbeeld als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach (array('jazz', 'klassiek', 'pop') as $genre) {
    ?>
<a href="/artiesten?genre=<?php echo $genre; ?>"><?php echo $genre; ?></a><?php
}
?>

Hoe je je URLs opbouwt moet afgestemd worden op hoe deze worden uitgelezen en vice versa.

Overigens, dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$pathParts
[1];
$pathParts[2];
$pathParts[3];
$pathParts[4];
$pathParts[5];
$pathParts[6];
?>

Doet niets. Daarnaast, het is niet gegarandeerd dat $pathParts[x] bestaat, dus je zou hier eerst op moeten controleren...
 
Kees Mulder

Kees Mulder

12/01/2019 11:57:50
Quote Anchor link
Dat klopt inderdaad dat die $pathParts[1] zo niets doet. Maar deze doe ik in index.php via switch() naar de artiesten.php.

Als iemand klikt op [klassiek]
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href="/artiesten/genre/klassiek">Klassiek</a>


Dan gaat hij uiteindelijk via index naar artiesten.php en zie je in de url site.nl/artiesten/genre/klassiek

Maar nu is mijn vraag hoe krijg ik in artiesten.php dat hij dit kan omzetten naar het selecteren in de query. Deze gegevens zijn nl. uit de $pathParts te halen maar weet niet zo goed hoe ik dat kan omzetten naar de select in de query. Daarbij komt dat je verschillende mogelijkheden kan krijgen:

site.nl/artiesten/genre/klassiek/taal/nederlands
maar ook anders om:
site.nl/artiesten/taal/nederlands/genre/klassiek
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.