Bonsoir,
Voila je rencontre un petit problème avec mon code.
Voila mes URL ressemble a ça :
index.php?page=home
index.php?page=home&id=2
au niveau du Htaccess je fait ça :
RewriteEngine On
RewriteBase /
RewriteRule ^([a-z0-9]+).php$ index.php?page=$1 [L]
Ce que je veut c'est avoir au lieu de cette longue URL je veut juste :
home
home-2
si possible
j'obtien erreur 404
voici pour approfondire mon index.php en partie qui est appeler par chacune de mes pages qui ce trouve dans le dossier pages :
$pages = scandir('pages/');
if( isset($_GET['page']) && !empty($_GET['page']) ){ //controll pages exist
if(in_array($_GET['page'].'.php',$pages )){
$page = $_GET['page'];
}else{
//on redirige si on est pas sur la bonne page
//setFlash('<strong>Oh oh!</strong> page non trouver ! <strong> Existe pas ou plus </strong>','warning');
redirect('home');
}
}else{
//on redirige si on est pas sur la bonne page
//setFlash('<strong>Oh oh!</strong> page non trouver ! <strong> Existe pas ou plus </strong>','warning');
redirect('home');
}
Donc ma home ce trouve dans le dossier pages.
ce n'est vraiment pas ma tasse de thé, surtout que je mis prendre a la toute fin quand mon forum, l'administration et tous le tralala est terminer.
Salut,
je vais te donner la façon dont moi j'ai utilisé l'URL Rewriting. Je ne sais pas du tout si on peut l'utiliser autrement.
Si quelqu'un sait d'ailleurs... J'écoute ^^
Puisque mon projet est à :
.../xampp/htdocs/work/monSite
J'ai mis un define
:
define('BASE_URL', '/work/monSite/');
Aussi,
mon architecture :
Dans le HTML, j'écris les liens en 'absolu' (en me servant de mon define "BASE_URL") :
<a href="<?= BASE_URL ?>Accueil"></a>
Ça passe par le .htaccess
RewriteRule ^Accueil/?$ public/index.php?p=general.home [L]
Ou par exemple :
<a href="<?= BASE_URL ?>Accueil-2"></a>
RewriteRule ^Accueil(-([0-9]+))?/?$ public/index.php?p=general.home&id=&2 [L]
// je ne suis pas sur du tout de l'expression régulière...
Est-ce que ça t'aide pour ton problème ?
slt
si vous suivi les tuto de grafikart developper un site de A a Z..
la solution est dans conf.php
Router::connect('all_posts/:slug-:id','posts/view/id:([0-9]+)/slug:([a-zA-Z0-9\-]+)');
par example ici j'ai lui dit change posts/view/id:([0-9]+)/slug:([a-zA-Z0-9-] par all_posts/:slug-:id
I-dev
je n'ai pas suivie ce tuto la mai celui de porfolio en php brut donc rooter::connect je ne vois pas ce que c'est, puis ensuite un fois que j'ai bien compris le système j'ai pris ma propre voie.
Bonsoir,
Voila j'ai revue un peut le truc maintenant je fait ça :
RewriteEngine On
RewriteBase /
RewriteRule ^([^\.]+)$ $1.php?page=home [NC,L]
RewriteRule home index.php?page=home [L]
RewriteRule forum index.php?page=forums [L] //cela marque bien la fin d'une réecriture ?
Donc dans l'URL je met domaine/home pour l'accueil et domaine/forum pour aller sur le forum.
sauf que sur forum si je ne met pas le / j'obtien forum/?page=home qui apparaît dans l'URL
Je sèche donc ! enfin je ne comprend pas pourquoi ça fonctionne sur home et non sur forum ?
Ce que disait @I-dev c'était de faire le rooter non pas dans l'htaccess, mais dans le php, et les deux techniques sont faisables
As-tu essayé de mettre
RewriteRule ^([^.]+)$ $1.php?page=home [NC,L]
En dernier ?
en faite je préfaire le Htaccess, Grafikart ferai comme ça avec un slug :
RewriteRule ^categorie/([a-z0-9\-]+)$ index.php?category=$1
j'ai compris en faisant comme ça avec le Htaccess jusque la ça fonctionne :
RewriteRule forum forums/index.php?page=forums [NC,L]
je suis presque a la fin mai si j'ai un id en get comme :
forums/index.php?page=forums&id=1
faut faire un truc comme ça ([a-z0-9-]+)$ et &1 mai je sais pas ou le mettre comment remplacer en
forum-id-1 ou comme
je trouve ça moins contraigniant a faire que les slug.
Les règles utilisent les regex, tu peux donc faire qqchose ainsi :
RewriteRule ^forum-id-([0-9]+)$ forums/index.php?page=forums&id=$1 [NC,L]
Il me semble
Oui merci voila je touche au but ! mai bizarrement ça fonctionne avec forum-id-1 mai ça coince sur la pagination :
RewriteRule ^home-pages-([0-9]+) index.php?page=home&pages=$1 [NC,L]
c'est poutant censé fonctionner mai ça me renvoie toujours sur page 1 et enfin quand j'ajoute $ a la fin de la regex ça renvoie 404 mai sans ça fonctionne.
Hola ça va faire long a regarder mai je dirai que c'est une pagination normal :
je n'ai laissai que les bouton prev. next. j'ai pas fini mais elle fonctionne correctement !!
$worksPerPage = $param[2]->param_value; //reglage bdd nbpage
$worksTotalesReq = $db->query('SELECT id FROM works');
$worksTotales = $worksTotalesReq->rowCount();
$pagesTotales = ceil($worksTotales/$worksPerPage);
if(isset($_GET['pages'])){
$pages = intval($_GET['pages']);
}else{
$currentPage = 1;
}
//si id en get
if(isset($pages) AND !empty($page) AND $pages > 0 AND $pages <= $pagesTotales) {
$currentPage = $pages;
} else {
//si p null alors page sera egal 1
$currentPage = 1;
//redirect('home&p=1');
}
$startPaginat = ($currentPage-1)*$worksPerPage;
//star pagination
function paginatNumbers(){
global $pagesTotales, $currentPage;
$prev = $currentPage - 1; //previous page is page - 1
$next = $currentPage + 1; //next page is page + 1
echo '<ul style="margin: 0 0 20px 0;" class="pager">';
//prev
if($currentPage == 1){
echo '';
}else{
echo '<li class="previous"><a href="home-pages-' . $prev . '"><span aria-hidden="true">←</span> Page présédante</a></li>';
}
//pagination current
/*for($i=1; $i <= $pagesTotales; $i++) {
if($i == $currentPage) {
echo '<li class="active"><a>'. $i .'</a></li>';
} else {
echo '<li><a href="'. WEBROOT .'index.php?page=home&p='.$i.'">' . $i . '</a></li>';
}
}*/
//next
if(isset($currentPage) && $currentPage == $pagesTotales){
echo '';
}else{
echo '<li class="next"><a href="home-pages-' . $next . '">Page suivant <span aria-hidden="true">→</span></a></li>';
}
echo '</ul>';
}
//liste works
$req = $db->query("
SELECT works.id,
works.name,
works.writer,
works.content,
works.posted,
works.date,
works.slug,
images.name AS image_name,
categories.cat_name,
users.username,
comments.post_id,
COUNT(comments.post_id) AS nbcoms
FROM works
LEFT JOIN users ON users.username = works.writer
LEFT JOIN categories ON works.category_id=categories.id
LEFT JOIN comments ON comments.post_id = works.id
LEFT JOIN images ON images.id = works.image_id
WHERE works.posted=1
GROUP BY works.id
ORDER BY works.id DESC LIMIT $startPaginat,$worksPerPage
");
$results = [];
while($rows = $req->fetchObject()){
$results[] = $rows;
}
return $results;
je t'ai mis toute la page.
Bonjour.
Il y a quand même un certain problème avec ton code.
Pour commencer, tu définis deux fois la variable $currentPage
pour lui assigner exactement la même valeur, soit 1
.
Ensuite, cette variable valant 1
, tu lui soustrait 1
, ce qui la définit donc à 0
puis tu multiplies sa valeur, alors que tu auras beau la multiplier par ce que tu veux, 0
ne changera jamais.
Tu ne crois pas que tu devrais faire des modifications dans ton code ?
Non pas vraiment !! j'ai beau regarder pour faire un prev next je suis bien obliger de soustraire a la page courante.
quand je clique on est a +1 si la page courante est egal 1 alors ça donne 2 si elle est diférente de 1 alors le boutton retour apparet et suivant sera toujours a plus +1 au vue de la page courante.
donc en crade ça donne :
function paginatNumbers(){
global $pagesTotales, $currentPage;
echo '<ul style="margin:0;" class="pull-right pagination pagination-sm">';
//prev
if($currentPage != "1"){
echo '<li><a href="'. WEBROOT .'index.php?page=home&p=';
echo $currentPage-1;
echo '">«</a></li>';
}else{
echo '<li class="disabled" /><a>«</a></li>';
}
//pagination current
/*for($i=1; $i <= $pagesTotales; $i++) {
if($i == $currentPage) {
echo '<li class="active"><a>'. $i .'</a></li>';
} else {
echo '<li><a href="'. WEBROOT .'index.php?page=home&p='.$i.'">' . $i . '</a></li>';
}
}*/
//next last page
if($currentPage != $pagesTotales){
echo '<li><a href="'. WEBROOT .'index.php?page=home&p=';
echo $currentPage+1;
echo '">»</a></li>';
}else{
echo '<li class="disabled" /><a>»</a></li>';
}
echo '</ul>';
}
j'ai beau regarder la pagination fait bien ce que je veut.