Visualizzazione risultati 1 fino 6 di 6

Discussione: cicli foreach e paginazione

  1. #1
    L'avatar di acsocmel
    acsocmel non è connesso Utente attivo
    Data registrazione
    03-07-2007
    Messaggi
    463

    Predefinito cicli foreach e paginazione

    dopo giorni e giorni di mal di testa e alla fine (sigh) ho deciso di cercare aiuto
    nel sito ho una sorta di blog fatto di php e txt
    riesco a stampare il mio bel elenco di mesi in cui ci sono articoli e riesco anche a contarli
    ora vorrei mostrarli divisi per annata
    http://acsocmel.altervista.org/acs-n...archivio&pag=1
    ma non riesco a limitare la stampa a quelli del singolo anno
    Codice PHP:
    $handle=opendir("gbb/articoli");
    while(
    false!==($articolo=readdir($handle))){
    if(
    $articolo!='.' && $articolo!='..'){
    $articoli[]=substr($articolo,0,6);
    $anno[]=substr($articolo,0,4);
    }
    }
    arsort($anno);
    arsort($articoli);
    closedir($handle);
    $vals = array_count_values($articoli);
    $anni = array_count_values($anno);
    echo
    "<h3 class=\"titolo\">Archivio Mensile</h3>
    <ul>"
    ;
    foreach(
    $vals as $key => $value){
    echo
    "<li><a href='".$config_index."?mode=data&amp;data=".$key."'>".substr($key,0,4)." ".$mesi[substr($key,4,6)-1]."</a> (".$value.")</li>";
    }
    echo
    "</ul>\n
    <ul>"
    ;
    foreach(
    $anni as $k => $v){
    echo
    "<li><a href='".$config_index."?mode=data&amp;data=".$k."'>".substr($k,0,4)." ".$mesi[substr($k,4,6)-1]."</a> (".$v.")</li>";
    }
    echo
    "</ul>";

    $max=count($anni);
    $pag=$_GET['pag'];
    if(
    is_numeric($pag)==FALSE){
    $pag=1;
    }
    $pagmax=$pag*$max;
    $totart=$v;
    $pagtotart=$totart/$max;
    $paginaprima=$pag-1;
    $paginadopo=$pag+1;
    $ultimapagina=ceil($pagtotart);
    echo
    " <ul class=\"jump\">\n";
    if(
    $pag>2){
    echo
    " <li><a href=\"".$config_index."?mode=archivio&amp;pag=1\">prima</a></li>\n <li class=\"no-stile\">…</li>\n";
    }
    if(
    $pag-1>0){
    echo
    " <li><a href=\"".$config_index."?mode=archivio&amp;pag=".$paginaprima."\">".$paginaprima."</a></li>\n";
    }
    echo
    " <li class=\"current\">".$pag."</li>";
    if(
    $pag<$pagtotart){
    echo
    " <li><a href=\"".$config_index."?mode=archivio&amp;pag=".$paginadopo."\">".$paginadopo."</a></li>\n";
    }
    if(
    $pag+1<$ultimapagina){
    echo
    " <li class=\"no-stile\">…</li>\n <li><a href=\"".$config_index."?mode=archivio&amp;pag=".$ultimapagina."\" title=\"vai all'ultima pagina\">ultima</a></li>\n";
    echo
    " <li><a href=\"".$config_index."\" title=\"sfoglia l'archivio completo delle notizie\">archivio completo</a></li>\n </ul>\n";
    }

    echo
    "<p style=\"font-family:verdana\">";
    $pizza=count($anni);
    echo
    $pizza;
    echo
    "</p>";

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non ho letto l'intero codice perché, a prima vista, sembra essere più complesso del necessario.

    Se il problema è unicamente limitare la selezione di articoli a quelli relativi ad un anno specifico puoi semplicemente usare un if.

    I suggerimenti che do più spesso:


  3. #3
    L'avatar di acsocmel
    acsocmel non è connesso Utente attivo
    Data registrazione
    03-07-2007
    Messaggi
    463

    Predefinito

    per adesso rinuncio
    non mi sembra così semplice

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Come preferisci .

    Ad ogni modo una strategia per quando deciderai di riprenderlo in mano potrebbe essere:
    1. leggere tutti gli articoli in un vettore
    2. filtrare in base ad uno o più criteri (per esempio "solo gli articoli pubblicati tra giugno 2005 e marzo 2016"), e per questo davvero bastano degli if
    3. raggruppare gli articoli in un vettore associativo in base ad anno e mese (o qualsiasi criterio riterrai opportuno)
    4. effettuare i conti necessari per la paginazione
    5. mostrare quelli che ti servono

    I suggerimenti che do più spesso:


  5. #5
    L'avatar di acsocmel
    acsocmel non è connesso Utente attivo
    Data registrazione
    03-07-2007
    Messaggi
    463

    Predefinito

    il vero scoglio è che io non so l'anno
    questo dato viene estrapolato dalla stringa
    e quello che riesco ad avere è un array quando dovrei avere una costante
    Ultima modifica di acsocmel : 26-01-2019 alle ore 13.51.45

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    il vero scoglio è che io non so l'anno
    questo dato viene estrapolato dalla stringa
    e quello che riesco ad avere è un array quando dovrei avere una costante
    1. leggere tutti gli articoli in un vettore
    Dopo aver letto tutti gli articoli ed averli collocati in un vettore dovresti avere una struttura dati simile a
    Codice:
    articoli = [
      [
        'titolo' => 'Titolo 1',
        'mese' => '05',
        'anno' => '2006',
        'contenuto' => 'testo dell'articolo...',
        'autore' => 'Nome autore'
      ],
      [
        'titolo' => 'Titolo 1',
        'mese' => '28',
        'anno' => '2002',
        'contenuto' => 'testo dell'articolo...',
        'autore' => 'Nome autore'
      ],
      ...
      [
        'titolo' => 'Titolo N',
        'mese' => '07',
        'anno' => '2020',
        'contenuto' => 'testo dell'articolo...',
        'autore' => 'Nome autore'
      ]
    ];
    Condizione necessaria (e sufficiente) per realizzare questa struttura è che mese ed anno di ciascun articolo siano memorizzati da qualche parte. Fintanto che queste informazioni sono presenti con un'opportuna struttura nei tuoi file di testo il sistema si può realizzare.

    I suggerimenti che do più spesso:


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •