Ik heb een url die er bijvoorbeeld als volgt uitziet:
index.php?section=view&article=14&slide=2&list=1
Dit is een url naar mijn website, waarbij ik nu een fotoalbum met reacties aan het bekijken ben. slide=2 geeft aan dat ik de 2e pagina met foto's aan het bekijken ben, list=1 geeft de 1e pagina met reacties aan. Nu wil ik knoppen toevoegen zodat ik door de foto's en de reacties kan bladeren (ophogen of verlagen van slide en list dus). Dit wil ik doen zonder de rest van de url te veranderen (of de url opnieuw aan te maken).
Ik heb dit deels al werkend, ik blader bijvoorbeeld op de volgende manier door de reacties:
Hierbij gebruik ik de volgende PHP-functies:
Dit werkt in principe prima. Het komt alleen nogal omslachtig over. Makkelijker zou zijn om mbv de preg_replace_callback functie de variabele list en zijn waarde apart in een array te krijgen, zodat ik alleen die waarde++ (of --) hoef te doen, maar hoe moet in dat geval mijn reguliere expressie eruit zien? Kan het uberhaupt? Op die manier hoef ik namelijk niet met dat replace-array te werken, en is het wat universeler bruikbaar.
(het lijkt misschien een omslachtige manier, maar als het goed werkt is het wel de mooiste manier denk ik)
index.php?section=view&article=14&slide=2&list=1
Dit is een url naar mijn website, waarbij ik nu een fotoalbum met reacties aan het bekijken ben. slide=2 geeft aan dat ik de 2e pagina met foto's aan het bekijken ben, list=1 geeft de 1e pagina met reacties aan. Nu wil ik knoppen toevoegen zodat ik door de foto's en de reacties kan bladeren (ophogen of verlagen van slide en list dus). Dit wil ik doen zonder de rest van de url te veranderen (of de url opnieuw aan te maken).
Ik heb dit deels al werkend, ik blader bijvoorbeeld op de volgende manier door de reacties:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| if ($number_lists > 1) { if ($list > 1) { if (eregi('list',$url)) $previous = preg_replace_callback('/slide=(\d+)|list=(\d+)/U','decrement',$url); else $previous = $url.'&list='.$list--; echo "\n<div class=\"left\" onclick=\"document.location='$previous'\">"; echo "\n</div>"; } if ($list < $number_lists) { if (eregi('list',$url)) { $next = preg_replace_callback('/slide=(\d+)|list=(\d+)/U','increment',$url); } else $next = $url.'&list='.$list++; echo "\n<div class=\"right\" onclick=\"document.location='$next'\">"; echo "\n</div>"; } } |
Hierbij gebruik ik de volgende PHP-functies:
PHP:
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
| function increment($matches) { $replace = array ('slide', 'list'); for ($i = 1; $i < sizeof($matches); $i++) { if(!empty($matches[$i])) { if ($replace[$i - 1] == 'list') { $matches[$i]++; return 'list='.$matches[$i]; } elseif ($replace[$i - 1] == 'slide') { $matches[$i]++; return 'slide='.$matches[$i]++; } } } } function decrement($matches) { $replace = array ('slide', 'list'); for ($i = 1; $i < sizeof($matches); $i++) { if(!empty($matches[$i])) { if ($replace[$i - 1] == 'list') { $matches[$i]--; return 'list='.$matches[$i]; } elseif ($replace[$i - 1] == 'slide') { $matches[$i]--; return 'slide='.$matches[$i]++; } } } } |
Dit werkt in principe prima. Het komt alleen nogal omslachtig over. Makkelijker zou zijn om mbv de preg_replace_callback functie de variabele list en zijn waarde apart in een array te krijgen, zodat ik alleen die waarde++ (of --) hoef te doen, maar hoe moet in dat geval mijn reguliere expressie eruit zien? Kan het uberhaupt? Op die manier hoef ik namelijk niet met dat replace-array te werken, en is het wat universeler bruikbaar.
(het lijkt misschien een omslachtige manier, maar als het goed werkt is het wel de mooiste manier denk ik)