Supprimer un contenu stocké dans une variable

Mammouth du PHP | 643 Messages

14 avr. 2016, 17:10

Salut à tous je suis toujours sur mon problème de pagination.
Donc j'ai eu une idée mais bon pas terrible terrible pour les puriste je pense.

Donc en fait je récupère l'url en cours ( url rewriting ) avec :
$monUrl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
Et je fait mon lien ainsi:
$pagination .= '<a href="'.$monUrl.'-page-'.$next.'.html" class="page" data-page="'.$next.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-right"></i>
Donc ca l'air de marché...
Je cherche juste une solution pour supprimé le page-2.html que je récupére dans $monUrl mais également

En gros supprimé le .html mais également page-(+ le numéro de page si il est supérieur ou égale à 1 )

Merci à vous ;)
Modifié en dernier par yoann38 le 14 avr. 2016, 17:17, modifié 1 fois.

Mammouth du PHP | 2703 Messages

14 avr. 2016, 17:12


Mammouth du PHP | 643 Messages

14 avr. 2016, 17:20

Alors en fait j'ai fait ca pour l'instant :
$url_en_cours = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$rest_url = substr($url_en_cours, 0, -12);  // retourne "abcde"
Si la page par exemple est :
http://monsite.fr/actu-de-la-ville-de-g ... age-2.html
ca marche très bien....

Par contre si on est sur la page 1 donc
http://monsite.fr/actu-de-la-ville-de-grenoble.html

ca supprime renoble.html

Donc je cherche la solution pour supprimer page-(0-9)(2).html
J'espère que vous m'avez compris ...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 avr. 2016, 17:56

Regarde du côté de preg_replace() du coup :)

...

Et pour l'expression, quelque chose du genre " #page-\d*\.html$#i "
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 643 Messages

14 avr. 2016, 20:37

Heu....lol
Je n'arrive pas à commencé à écrire mon script là.... :/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 avr. 2016, 21:47

salut,

regarde la doc de la preg_replace il y a des exemples http://php.net/preg_replace
<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
En remplacent le motif par celui indiqué par Ryle et la chaîne par ton url tu as auras déjà un belle exemple ;)


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 643 Messages

15 avr. 2016, 07:26

J'ai donc pour l'instant :
// Phase Test
	$url_en_cours = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
        $pattern = "#page-\d*\.html$#i ";
        $replacement = '${1}1,$3';
	$url_modifier = preg_replace($pattern, $replacement, $url_en_cours);
	echo $url_modifier;
et mon lien:
$pagination .= '<a href="'.$url_modifier.'page-'.$next.'.html" class="page" data-page="'.$next.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-right"></i>
</a> ';
Donc si l'url à déjà une page d'attribuer soit par exemple:
http://monsite.fr/actu-de-la-ville-de-g ... age-2.html
le lien pour la page 3 est correct


Cependant si on est sur la page 1 à savoir: ( sans -page-(0-9) )
http://monsite.fr/actu-de-la-ville-de-grenoble.html

Le lien est faux car il retourne:
http://monsite.fr/actu-de-la-ville-de-g ... age-2.html

Merci à vous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 avr. 2016, 10:04

Avec la découverte des expressions régulières, c'est tout un nouveau monde qui va s'ouvrir à toi :)

Le plus simple à mon sens c'est d'utiliser preg_match pour tester si ton url contient un numéro de page (tu peux utiliser la même expression). Si oui, alors traitement, sinon rien à changer :)


Edit : tu peux même envisager d'utiliser preg_match pour récupérer le numéro de la page demandée avec les parenthèses capturantes autour du (\d*) et coller ça dans une variable $page. Et tu peux ensuite construire tes liens simplement à base de if/else
if ($page < 2) {
  $lienPrecedent = "grenoble.html";
  $lienSuivant = "grenoble-page-2.html";
}
else{
  $lienPrecedent = "grenoble-page-" . ($page - 1) . ".html";
  $lienSuivant = "grenoble-page-" . ($page + 1) . ".html"; // avec éventuellement un test pour savoir si la page+1 existe :)
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 643 Messages

15 avr. 2016, 18:21

Re,
Je pensé pas autant galérer avec une pagination franchement.
Je vous fait part de mon code en entier pour la pagination (surement plus clair )
//traitement pagination
		$nbre_annonces_par_page = 10;
		$nbre_pages_max_gauche_et_droite = 2;
		$last_page = ceil($nb / $nbre_annonces_par_page);
		if(isset($_GET['page']) && is_numeric($_GET['page'])){
		$page_num = $_GET['page'];
		} else {
		$page_num = 1;
		}
		if($page_num < 1){
		$page_num = 1;
		} else if($page_num > $last_page) {
		$page_num = $last_page;
		}
		$limit = 'LIMIT '.($page_num - 1) * $nbre_annonces_par_page. ',' . $nbre_annonces_par_page;
		
		$pagination = '';
		if($last_page != 1){
		if($page_num > 1){
		$previous = $page_num - 1;
		$pagination .= '<a href="sortie.php?page='.$previous.'" class="page" data-page="'.$previous.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-left"></i>
</a> &nbsp; &nbsp;';
		for($i = $page_num - $nbre_pages_max_gauche_et_droite; $i < $page_num; $i++){
		if($i > 0){
		$pagination .= '<a href="sortie.php?page='.$i.'" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> &nbsp;';
		}
		}
		}
		$pagination .= '<span class="active">'.$page_num.'</span>&nbsp;';
		for($i = $page_num+1; $i <= $last_page; $i++){
		$pagination .= '<a href="sortie.php?page='.$i.'" class="page" data-page="'.$i.'" data-du="'.$du.'" data-au="'.$au.'">'.$i.'</a> ';
		if($i >= $page_num + $nbre_pages_max_gauche_et_droite){
		break;
		}
		}
		if($page_num != $last_page){
		$next = $page_num + 1;
		$pagination .= '<a href="sortie.php?page='.$next.'" class="page" data-page="'.$next.'" data-du="'.$du.'" data-au="'.$au.'"><i class="fa fa-angle-right"></i>
</a> ';
		}
		}

		$sql .= " ORDER BY loisirs.id_loisirs DESC LIMIT ".intval(($page-1)*$parPage).", ".$parPage;

Les urls peuvent être:
http://monsite.fr/actu-de-la-ville-de-grenoble.html
http://monsite.fr/actu-de-la-region-rhone-alpes.html
....

Et coté code on a donc pour l'instant:
// Phase Test
		$url_en_cours = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
		$pattern = "#page-\d*\.html$#i ";
		$replacement = '${1}1,$3';
		$url_modifier = preg_replace($pattern, $replacement, $url_en_cours);
		//echo $url_modifier;