[RESOLU] déclarer et exploiter une variable pour trier les résultats

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] déclarer et exploiter une variable pour trier les résultats

Re: déclarer et exploiter une variable pour trier les résult

par stofkri » 11 févr. 2014, 13:40

je suis sincèrement navré pour mes lenteurs, et merci pour ta patience et ton sang froid
là ça marche vraiment, en tout cas

Re: déclarer et exploiter une variable pour trier les résult

par xTG » 11 févr. 2014, 08:33

Un peu normal...
T'as raison de faire attention à ton col là.
Je t'indique qu'il faut modifier l'un des paramètres d'entrée de la fonction, ce que tu fais.
Mais tu en supprimes par la même occasion deux autres. ;)

Re: déclarer et exploiter une variable pour trier les résult

par stofkri » 10 févr. 2014, 21:27

Code : Tout sélectionner

echo paginate($_SERVER['PHP_SELF'],'?type=' . $type . '&page=');
la pagination disparait dès que je touche à ces paramètres

ça ne marche pas, désolé
bon sang je vais me faire virer d'ici par le col, ça ne va pas trainer...

Re: déclarer et exploiter une variable pour trier les résult

par xTG » 10 févr. 2014, 20:22

Code : Tout sélectionner

'?type=' . $type . '&page='

Re: déclarer et exploiter une variable pour trier les résult

par stofkri » 10 févr. 2014, 20:21

je suis complètement à la ramasse...désolé

non je vois pas, j'essaie d'ajouter le paramètre "type" à cet endroit, pour qu'il s'ajoute à l'url, mais non
if( !empty($_GET['type']) )
{
   $type = mysql_real_escape_string($_GET ["type"]); // ne jamais oublier les fonctions de protection contre les injections SQL !
echo paginate($_SERVER['PHP_SELF'],'?page=',$nb_pages,$page);
}
else
{
echo paginate($_SERVER['PHP_SELF'],'?page=',$nb_pages,$page);
}

Re: déclarer et exploiter une variable pour trier les résult

par xTG » 10 févr. 2014, 19:11

C'est pas tant que cela une usine à gaz il y a même un joli commentaire...

Code : Tout sélectionner

* @param string $param - paramètre à ajouter à l'URL, ex: '?page=' ou '&p='
Plus qu'à modifier ce champ lorsque tu appelles la fonction pour y insérer le paramètre type. ;)

Re: déclarer et exploiter une variable pour trier les résult

par stofkri » 10 févr. 2014, 18:13

c"est ce que j'essaie de faire, sans succès
ajouter la variable $type dans cette usine à gaz

en plus du code ci dessus, il y a ça
<?php
//On initialise la connexion à la bdd
try
{
        $db_host = "localhost"; //Lieu où est héberger la BDD

        $db_name = "galerie"; //Nom de la BDD

        $db_login = "root"; //Login de connexion à la BDD

        $db_mdp = "root"; //Mot de passe de connexion à la BDD

        $bdd=new PDO("mysql:host=$db_host;dbname=$db_name",$db_login,$db_mdp);
}
catch(Exception $e)
{
        exit("<h1>Erreur de connexion à la BDD SQL</h1></body></html>");
}

/* mise en place du nombre d'affichage de galeries par page */
$nb_affiche = 2; //Nombre de galeries que l'on veut par page

//On va afficher la/les galeries selon la page où l'on ce trouve
if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page']>0)
{
        //$start nous sert pour savoir où commence l'affichage des galeries selon la page où l'on est
        $start = $_GET['page'] * $nb_affiche - $nb_affiche;

        //On récupère la page sur laquelle on est, nécessaire lors de la pagination
        $page = $_GET['page'];
}
else
{
        $start = 0;
        $page = 1;
}
/* ========================================================= */
//On prepare la requete SQL
$req = $bdd->prepare("SELECT * FROM travaux ORDER BY id DESC LIMIT :start,:nb_affiche");

$req->bindValue(':start',$start,PDO::PARAM_INT);
$req->bindValue(':nb_affiche',$nb_affiche,PDO::PARAM_INT);
$req->execute();

while ($donnees = $req->fetch())
{
?>
et un fichier pagination.php
<?php
/**
 * paginate($url, $param, $total, $current [, $adj]) appelée à chaque affichage de la pagination
 * @param string $url - URL ou nom de la page appelant la fonction, ex: 'index.php' ou 'http://example.com/'
 * @param string $param - paramètre à ajouter à l'URL, ex: '?page=' ou '&p='
 * @param int $total - nombre total de pages
 * @param int $current - numéro de la page courante
 * @param int $adj (facultatif) - nombre de numéros de chaque côté du numéro de la page courante (défaut : 3)
 * @return string $pagination
 */
function paginate($url, $param, $total, $current, $adj=3)
{
  /* Déclaration des variables */
  $prev = $current - 1; // numéro de la page précédente
  $next = $current + 1; // numéro de la page suivante
  $n2l = $total - 1; // numéro de l'avant-dernière page (n2l = next to last)
 
  /* Initialisation : s'il n'y a pas au moins deux pages, l'affichage reste vide */
  $pagination = '';
 
  /* Sinon ... */
  if ($total > 1)
  {
    /* Concaténation du <div> d'ouverture à $pagination */
    $pagination .= "<ul id=\"pagination\">\n";
 
 
    /* ////////// Début affichage du bouton [précédent] ////////// */
    if ($current == 2) // la page courante est la 2, le bouton renvoit donc sur la page 1, remarquez qu'il est inutile de mettre ?p=1
      $pagination .= "<li><a href=\"{$url}\">page pr&eacute;c&eacute;dente</a></li>";
    elseif ($current > 2) // la page courante est supérieure à 2, le bouton renvoit sur la page dont le numéro est immédiatement inférieur
      $pagination .= "<li><a href=\"{$url}{$param}{$prev}\">page pr&eacute;c&eacute;dente</a></li>";
    else // dans tous les autres, cas la page est 1 : désactivation du bouton [précédent]
      $pagination .= '<li class="previous-off">>page pr&eacute;c&eacute;dente</li>';
    /* Fin affichage du bouton [précédent] */
 
 
    /* ///////////////
    Début affichage des pages, l'exemple reprend le cas de 3 numéros de pages adjacents (par défaut) de chaque côté du numéro courant
    - CAS 1 : il y a au plus 12 pages, insuffisant pour faire une troncature
    - CAS 2 : il y a au moins 13 pages, on effectue la troncature pour afficher 11 numéros de pages au total
    /////////////// */
 
    /* CAS 1 */
    if ($total < 7 + ($adj * 2))
    {
      /* Ajout de la page 1 : on la traite en dehors de la boucle pour n'avoir que index.php au lieu de index.php?p=1 et ainsi éviter le duplicate content */
      $pagination .= ($current == 1) ? '<li class="active">1</li>' : "<a href=\"{$url}\">1</a>"; // Opérateur ternaire : (condition) ? 'valeur si vrai' : 'valeur si fausse'
 
      /* Pour les pages restantes on utilise une boucle for */
      for ($i = 2; $i<=$total; $i++)
      {
        if ($i == $current) // Le numéro de la page courante est mis en évidence (cf fichier CSS)
        $pagination .= "<li class=\"active\">{$i}</li>";
        else // Les autres sont affichés normalement
        $pagination .= "<a href=\"{$url}{$param}{$i}\">{$i}</a>";
      }
    }
 
    /* CAS 2 : au moins 13 pages, troncature */
    else
    {
      /*
      Troncature 1 : on se situe dans la partie proche des premières pages, on tronque donc la fin de la pagination.
      l'affichage sera de neuf numéros de pages à gauche ... deux à droite (cf figure 1)
      */
      if ($current < 2 + ($adj * 2))
      {
        /* Affichage du numéro de page 1 */
        $pagination .= ($current == 1) ? "<li class=\"active\">1</li>" : "<a href=\"{$url}\">1</a>";
 
        /* puis des huit autres suivants */
        for ($i = 2; $i < 4 + ($adj * 2); $i++)
        {
        if ($i == $current)
          $pagination .= "<li class=\"active\">{$i}</li>";
          else
          $pagination .= "<a href=\"{$url}{$param}{$i}\">{$i}</a>";
        }
 
        /* ... pour marquer la troncature */
        $pagination .= ' ... ';
 
        /* et enfin les deux derniers numéros */
        $pagination .= "<a href=\"{$url}{$param}{$n2l}\">{$n2l}</a>";
        $pagination .= "<a href=\"{$url}{$param}{$total}\">{$total}</a>";
      }
 
      /*
      Troncature 2 : on se situe dans la partie centrale de notre pagination, on tronque donc le début et la fin de la pagination.
      l'affichage sera deux numéros de pages à gauche ... sept au centre ... deux à droite (cf figure 2)
      */
      elseif ( (($adj * 2) + 1 < $current) && ($current < $total - ($adj * 2)) )
      {
        /* Affichage des numéros 1 et 2 */
        $pagination .= "<a href=\"{$url}\">1</a>";
        $pagination .= "<a href=\"{$url}{$param}2\">2</a>";
 
        $pagination .= ' ... ';
 
        /* les septs du milieu : les trois précédents la page courante, la page courante, puis les trois lui succédant */
        for ($i = $current - $adj; $i <= $current + $adj; $i++)
        {
          if ($i == $current)
          $pagination .= "<li class=\"active\">{$i}</span>";
          else
          $pagination .= "<a href=\"{$url}{$param}{$i}\">{$i}</a>";
        }
 
        $pagination .= ' ... ';
 
        /* et les deux derniers numéros */
        $pagination .= "<a href=\"{$url}{$param}{$n2l}\">{$n2l}</a>";
        $pagination .= "<a href=\"{$url}{$param}{$total}\">{$total}</a>";
      }
 
      /*
      Troncature 3 : on se situe dans la partie de droite, on tronque donc le début de la pagination.
      l'affichage sera deux numéros de pages à gauche ... neuf à droite (cf figure 3)
      */
      else
      {
        /* Affichage des numéros 1 et 2 */
        $pagination .= "<a href=\"{$url}\">1</a>";
        $pagination .= "<a href=\"{$url}{$param}2\">2</a>";
 
        $pagination .= ' ... ';
 
        /* puis des neufs dernières */
        for ($i = $total - (2 + ($adj * 2)); $i <= $total; $i++)
        {
          if ($i == $current)
            $pagination .= "<li class=\"active\">{$i}</li>";
          else
            $pagination .= "<a href=\"{$url}{$param}{$i}\">{$i}</a>";
        }
      }
    }
    /* Fin affichage des pages */
 
 
    /* ////////// Début affichage du bouton [suivant] ////////// */
    if ($current == $total)
      $pagination .= "<li class=\"inactive\">page suivante</li>\n";
    else
      $pagination .= "<a href=\"{$url}{$param}{$next}\">page suivante</a>\n";
    /* Fin affichage du bouton [suivant] */
 
 
    /* </div> de fermeture */
    $pagination .= "</ul>\n";
  }
 
  /* Fin de la fonction, renvoi de $pagination au programme */
  return ($pagination);
}
?>

Re: déclarer et exploiter une variable pour trier les résult

par xTG » 10 févr. 2014, 18:01

Faut voir qui te fait la pagination, j'ai cru comprendre que c'était le script JS : même réponse qu'avant ce n'est pas possible sans modifier ce plugin car il ne le permet pas.
Si c'est le PHP il va falloir passer la variable $type à la fonction paginate et l'intégrer aux liens générés.

Re: [RESOLU] déclarer et exploiter une variable pour trier l

par stofkri » 10 févr. 2014, 17:17

désolé mais je dois encore solliciter de l'aide pour une pagination normale...

<?php
}
$req->closeCursor();

//On met en place la pagination


if( !empty($_GET['type']) )
{
   $type = mysql_real_escape_string($_GET ["type"]); // ne jamais oublier les fonctions de protection contre les injections SQL !
$req = $bdd->prepare("SELECT COUNT(*) AS nb_galerie FROM travaux WHERE type='$type'");
}
else
{
$req = $bdd->prepare("SELECT COUNT(*) AS nb_galerie FROM travaux");
}

$req->execute();

$nb_galerie = $req->fetch();

$nb_galerie = $nb_galerie['nb_galerie']; //On associe le nombre de galeries

$nb_pages = ceil($nb_galerie / $nb_affiche); //On compte le nombre de pages par rapport au nombre de galeries que l'on veut par page
include('pagination.php');



if( !empty($_GET['type']) )
{
   $type = mysql_real_escape_string($_GET ["type"]); // ne jamais oublier les fonctions de protection contre les injections SQL !
echo paginate($_SERVER['PHP_SELF'],'?page=',$nb_pages,$page);
}
else
{
echo paginate($_SERVER['PHP_SELF'],'?page=',$nb_pages,$page);
}



$req->closeCursor();
?> 
la pagination affiche bien le nombre de page selon le type voulu, mais au clic sur un chiffre ou page suivante, la pagination entière s'affiche, le tri est perdu...

Re: déclarer et exploiter une variable pour trier les résult

par stofkri » 09 févr. 2014, 15:29

on peut quand même considérer que le problème est résolu, ta solution fonctionne pour une pagination normale, si je tiens à cette idée de tri, je devrais sans doute renoncer à cet effet de scroll infini...encore merci

Re: déclarer et exploiter une variable pour trier les résult

par xTG » 08 févr. 2014, 08:10

J'ai regardé la documentation mais l'auteur n'a pas prévu la personnalisation des urls.

Re: déclarer et exploiter une variable pour trier les résult

par stofkri » 07 févr. 2014, 23:56

au cas ou...sinon je vais renoncer à cette idée de classement
mais mille fois merci pour ton assistance xTG

[javascript]/*!
* Infinite Ajax Scroll, a jQuery plugin
* Version 1.0.2
* https://github.com/webcreate/infinite-ajax-scroll
*
* Copyright (c) 2011-2013 Jeroen Fiege
* Licensed under MIT:
* https://raw.github.com/webcreate/infini ... ICENSE.txt
*/
(function(e){"use strict";Date.now=Date.now||function(){return+(new Date)},e.ias=function(t){function u(){var t;i.onChangePage(function(e,t,r){s&&s.setPage(e,r),n.onPageChange.call(this,e,r,t)});if(n.triggerPageThreshold>0)a();else if(e(n.next).attr("href")){var u=r.getCurrentScrollOffset(n.scrollContainer);E(function(){p(u)})}return s&&s.havePage()&&(l(),t=s.getPage(),r.forceScrollTop(function(){var n;t>1?(v(t),n=h(!0),e("html, body").scrollTop(n)):a()})),o}function a(){c(),n.scrollContainer.scroll(f)}function f(){var e,t;e=r.getCurrentScrollOffset(n.scrollContainer),t=h(),e>=t&&(m()>=n.triggerPageThreshold?(l(),E(function(){p(e)})):p(e))}function l(){n.scrollContainer.unbind("scroll",f)}function c(){e(n.pagination).hide()}function h(t){var r,i;return r=e(n.container).find(n.item).last(),r.size()===0?0:(i=r.offset().top+r.height(),t||(i+=n.thresholdMargin),i)}function p(t,r){var s;s=e(n.next).attr("href");if(!s)return n.noneleft&&e(n.container).find(n.item).last().after(n.noneleft),l();if(n.beforePageChange&&e.isFunction(n.beforePageChange)&&n.beforePageChange(t,s)===!1)return;i.pushPages(t,s),l(),y(),d(s,function(t,i){var o=n.onLoadItems.call(this,i),u;o!==!1&&(e(i).hide(),u=e(n.container).find(n.item).last(),u.after(i),e(i).fadeIn()),s=e(n.next,t).attr("href"),e(n.pagination).replaceWith(e(n.pagination,t)),b(),c(),s?a():l(),n.onRenderComplete.call(this,i),r&&r.call(this)})}function d(t,r,i){var s=[],o,u=Date.now(),a,f;i=i||n.loaderDelay,e.get(t,null,function(t){o=e(n.container,t).eq(0),0===o.length&&(o=e(t).filter(n.container).eq(0)),o&&o.find(n.item).each(function(){s.push(this)}),r&&(f=this,a=Date.now()-u,a<i?setTimeout(function(){r.call(f,t,s)},i-a):r.call(f,t,s))},"html")}function v(t){var n=h(!0);n>0&&p(n,function(){l(),i.getCurPageNum(n)+1<t?(v(t),e("html,body").animate({scrollTop:n},400,"swing")):(e("html,body").animate({scrollTop:n},1e3,"swing"),a())})}function m(){var e=r.getCurrentScrollOffset(n.scrollContainer);return i.getCurPageNum(e)}function g(){var t=e(".ias_loader");return t.size()===0&&(t=e('<div class="ias_loader">'+n.loader+"</div>"),t.hide()),t}function y(){var t=g(),r;n.customLoaderProc!==!1?n.customLoaderProc(t):(r=e(n.container).find(n.item).last(),r.after(t),t.fadeIn())}function b(){var e=g();e.remove()}function w(t){var r=e(".ias_trigger");return r.size()===0&&(r=e('<div class="ias_trigger"><a href="#">'+n.trigger+"</a></div>"),r.hide()),e("a",r).unbind("click").bind("click",function(){return S(),t.call(),!1}),r}function E(t){var r=w(t),i;n.customTriggerProc!==!1?n.customTriggerProc(r):(i=e(n.container).find(n.item).last(),i.after(r),r.fadeIn())}function S(){var e=w();e.remove()}var n=e.extend({},e.ias.defaults,t),r=new e.ias.util,i=new e.ias.paging(n.scrollContainer),s=n.history?new e.ias.history:!1,o=this;u()},e.ias.defaults={container:"#container",scrollContainer:e(window),item:".item",pagination:"#pagination",next:".next",noneleft:!1,loader:'<img src="images/loader.gif"/>',loaderDelay:600,triggerPageThreshold:3,trigger:"Load more items",thresholdMargin:0,history:!0,onPageChange:function(){},beforePageChange:function(){},onLoadItems:function(){},onRenderComplete:function(){},customLoaderProc:!1,customTriggerProc:!1},e.ias.util=function(){function i(){e(window).load(function(){t=!0})}var t=!1,n=!1,r=this;i(),this.forceScrollTop=function(i){e("html,body").scrollTop(0),n||(t?(i.call(),n=!0):setTimeout(function(){r.forceScrollTop(i)},1))},this.getCurrentScrollOffset=function(e){var t,n;return e.get(0)===window?t=e.scrollTop():t=e.offset().top,n=e.height(),t+n}},e.ias.paging=function(){function s(){e(window).scroll(o)}function o(){var t,s,o,f,l;t=i.getCurrentScrollOffset(e(window)),s=u(t),o=a(t),r!==s&&(f=o[0],l=o[1],n.call({},s,f,l)),r=s}function u(e){for(var n=t.length-1;n>0;n--)if(e>t[n][0])return n+1;return 1}function a(e){for(var n=t.length-1;n>=0;n--)if(e>t[n][0])return t[n];return null}var t=[[0,document.location.toString()]],n=function(){},r=1,i=new e.ias.util;s(),this.getCurPageNum=function(t){return t=t||i.getCurrentScrollOffset(e(window)),u(t)},this.onChangePage=function(e){n=e},this.pushPages=function(e,n){t.push([e,n])}},e.ias.history=function(){function n(){t=!!(window.history&&history.pushState&&history.replaceState),t=!1}var e=!1,t=!1;n(),this.setPage=function(e,t){this.updateState({page:e},"",t)},this.havePage=function(){return this.getState()!==!1},this.getPage=function(){var e;return this.havePage()?(e=this.getState(),e.page):1},this.getState=function(){var e,n,r;if(t){n=history.state;if(n&&n.ias)return n.ias}else{e=window.location.hash.substring(0,7)==="#/page/";if(e)return r=parseInt(window.location.hash.replace("#/page/",""),10),{page:r}}return!1},this.updateState=function(t,n,r){e?this.replaceState(t,n,r):this.pushState(t,n,r)},this.pushState=function(n,r,i){var s;t?history.pushState({ias:n},r,i):(s=n.page>0?"#/page/"+n.page:"",window.location.hash=s),e=!0},this.replaceState=function(e,n,r){t?history.replaceState({ias:e},n,r):this.pushState(e,n,r)}}})(jQuery);[/javascript]

Re: déclarer et exploiter une variable pour trier les résult

par stofkri » 07 févr. 2014, 23:32

ah lalala ça se complique sérieusement là

Re: déclarer et exploiter une variable pour trier les résult

par xTG » 07 févr. 2014, 23:24

Ah oui j'avais zappé que tu utilisais une pagination en JS...
Bah va falloir regarder la documentation du plugin jQuery pour savoir comment passer en paramètre une variable (le type).

Re: déclarer et exploiter une variable pour trier les résult

par stofkri » 07 févr. 2014, 21:59

oui 4 par 4 , plus ou moins, c'est paramétrable

le lien du bouton : travaux.php?type=photo#

la barre d'adresse affiche alors :

travaux.php#?type=photo
travaux.php#?type=photo#/page/2
travaux.php#?type=photo#/page/3
etc