• User Attivo

    Dividere news

    Ciao a tutti...ho la pagina delle news che estrae tutte le news dal database...
    vorrei farle visualizzare così:

    Dicembre
    2-12-2007: Nuova gara a Ragusa
    Novembre
    9-11-2007: Finalmente Online
    1-11-2007: Prova HTML
    Ottobre
    28-10-2007: prova

    Come faccio??


  • User Attivo

    Ciao talkoman,
    sei stato un po' avaro di spiegazioni... pertanto vado solo con un po' di teoria. 😄

    Devi fare una query e selezionare tutte le news ordinate per data che poi listerai con un classico ciclo foreach in cui fai stampare data: titolo news. Per far comparire il mese a lettere, che mi pare di capire sia il tuo problema, potresti mettere un controllo*** if*** sul mese restituito dalla data nel ciclo foreach che supponiamo di memorizzare in $mese. Per ogni decremento di un'unità su $mese ti fai stampare a monitor il mese a lettere tipo che avrai precedentemente scritto in una array del tipo $mese_arr=array('gennaio','febbraio',...).
    Supponendo ad esempio che sia marzo, 3° mese, scriverai $mese_arr[($mese-1)] che ti restituirà appunto 'marzo' perché gli array partono da 0. Ovviamente devi fare attenzione a resettare su 0 il valore 11.

    Detta così può sembrare complicata ma in realtà è banale. Basta fare qualche prova!
    :ciauz:


  • User Attivo

    nn c'ho capito niente....:)


  • User Attivo

    La tua firma dice => soluzioni per il tuo sito web 😛 ehehehe

    Comunque vuoi un esempio? però con un esempio non impari molto 😞


  • User Attivo

    si meglio l'esempio....

    soluzioni per il tuo sito web

    sto imparando...-


  • User

    Ciao Talkoman,
    se hai gia' ilrecordset pronto e devi solo inserire date e titoli credo basti fare cosi'

    <?php echo $row_getArticles['title']; ?>: <?php echo $row_getArticles['theDate']; ?>
    <a href="news_detail.php?article_id=<?php echo $row_getArticles['article_id']; ?>" class="floatRight">Leggi tutto</a></p>
    		  
    	      <p> 
    	        <?php } ?> 
            </p>
    	      <?php } while ($row_getArticles = mysql_fetch_assoc($getArticles)); ?> 
    

    Dove: getArticles e' il nome del recordset, title e theDate sono titolo e data della news...

    spero che ti funzioni, a me cosi' va perfettamente... facci sapere!;)


  • User Attivo

    non manca un pezzo? così in teoria non va... chiudi due volte la graffa } e non la apri mai...


  • User

    Hai ragione Skyline, avevo dimenticato un pezzo,
    Il codice completo e' questo:

    
    <?php do { ?>
    	      <h2><?php echo $row_getArticles['title']; ?></h2>
    	      <p><?php echo $row_getArticles['theDate']; ?>: <?php $extract = getFirst($row_getArticles['article']); echo $extract[0]; if ($extract[1]) { ?> <a href="news_detail.php?article_id=<?php echo $row_getArticles['article_id']; ?>" class="floatRight">Leggi tutto</a></p>
    		  <p>&nbsp;</p>
    	      <p> 
    	        <?php } ?> 
            </p>
    	      <?php } while ($row_getArticles = mysql_fetch_assoc($getArticles)); ?>
    
    

    e poi alla fine di tutto il codice:

    
    <?php
    mysql_free_result($getArticles);
    
    function getFirst($text, $number=2) {
      // regular expression to find typical sentence endings
      $pattern = '/([.?!]["\']?)\s/';
      // use regex to insert break indicator
      $text = preg_replace($pattern, '$1bRE@kH3re', $text);
      // use break indicator to create array of sentences
      $sentences = explode('bRE@kH3re', $text);
      // check relative length of array and requested number
      $howMany = count($sentences);
      $number = $howMany >= $number ? $number : $howMany;
      // rebuild extract and return as single string
      $remainder = array_splice($sentences, $number);
      $result = array();
      $result[0] = implode(' ', $sentences);
      $result[1] = empty($remainder) ? false : true;
      return $result;
      }
    ?>
    
    

    che e' la funzione che estrae i primi due paragrafi della news e li fa vedere nella pagine di "riassunto" in cui si sceglie quale news visualizzare...

    Scusate!


  • User Attivo

    ❌cry::?
    NON CAPISCO!!!!!!!!!HELP!!!!


  • User

    allora, partiamo dal principio: che cosa hai fatto fino ad ora?
    hai detto che hai la pagina delle news che estrae tutte le news dal database giusto?

    magari posta il codice cosi' capiamo da che punto partire...
    oppure posta la struttura della tabella...


  • User Attivo

    eccolo...

    [PHP]<?php
    $news=@mysql_query('SELECT * FROM news ORDER BY data DESC');
    if (!$news){
    exit('<p>Errore, impossibile recuperare le news dal database!<br/>'.
    'Errore: ' . mysql_error() . '</p>');
    }
    while($notice=mysql_fetch_array($news)){
    $id=$notice['id_news'];
    $titolo= htmlspecialchars($notice['titolo']);
    $data=$notice['data'];
    //$mese=date('m',$data);
    $array = explode("-", $data);
    //in stile DD/MM/YYYY
    $data_it = $array[2]."-".$array[1]."-".$array[0];
    $mese= $array[1];
    if($mese==1)
    $mese="Gennaio";
    elseif($mese==2)
    $mese="Febbraio";
    elseif($mese==3)
    $mese="Marzo";
    elseif($mese==4)
    $mese="Aprile";
    elseif($mese==5)
    $mese="Maggio";
    elseif($mese==6)
    $mese="Giugno";
    elseif($mese==7)
    $mese="Luglio";
    elseif($mese==8)
    $mese="Agosto";
    elseif($mese==9)
    $mese="Settembre";
    elseif($mese==10)
    $mese="Ottobre";
    elseif($mese==11)
    $mese="Novembre";
    elseif($mese==12)
    $mese="Dicembre";
    echo "<tr>
    <td width=100 align="center">$data_it $mese</td><td align="left"><a href='legginews.php?id=$id'>$titolo</a></td>" .
    "</tr><tr>
    <td colspan=2><div style="CLEAR: left; BACKGROUND: url(images/struttura/dott.gif) repeat-x left center; HEIGHT: 25px;"></div></td>";
    }
    ?>[/PHP]


  • User

    allora vado un po' di fretta, quindi ti posto qui il codice, prova a fare un po' di prove.

    Considera che questo codice e' fatto per una tabella che ha le seguenti colonne:

    article_id - id della news
    title - titolo news
    article - testo della news
    updated - data ultima modifica
    created - data creazione
    image - immagine allegata alla news (del tipo: nome_immagine.jpg)
    caption - "alt" da associare all'immagine

    quindi dovrai fare le dovute sostituzioni...

    allora partiamo.
    questo va prima della doctype declaration:
    [PHP]
    //connessione al database
    <?php

    $hostname_nomeQuery = "...";
    $database_nomeQuery = "...";
    $username_nomeQuery = "...";
    $password_nomeQuery = "...";
    $nomeQuery = mysql_pconnect($hostname_nomeQuery, $username_nomeQuery, $password_nomeQuery) or trigger_error(mysql_error(),E_USER_ERROR);
    ?>

    <?php
    $maxRows_getArticles = 10;
    $pageNum_getArticles = 0;
    if (isset($_GET['pageNum_getArticles'])) {
    $pageNum_getArticles = $_GET['pageNum_getArticles'];
    }
    $startRow_getArticles = $pageNum_getArticles * $maxRows_getArticles;

    mysql_select_db($database_nomeQuery, $nomeQuery);
    $query_getArticles = "SELECT news.article_id, news.title, news.article, DATE_FORMAT(news.created, '%e.%c.%Y') AS theDate FROM news ORDER BY news.created DESC";
    $query_limit_getArticles = sprintf("%s LIMIT %d, %d", $query_getArticles, $startRow_getArticles, $maxRows_getArticles);
    $getArticles = mysql_query($query_limit_getArticles, $nomeQuery) or die(mysql_error());
    $row_getArticles = mysql_fetch_assoc($getArticles);

    if (isset($_GET['totalRows_getArticles'])) {
    $totalRows_getArticles = $_GET['totalRows_getArticles'];
    } else {
    $all_getArticles = mysql_query($query_getArticles);
    $totalRows_getArticles = mysql_num_rows($all_getArticles);
    }
    $totalPages_getArticles = ceil($totalRows_getArticles/$maxRows_getArticles)-1;

    $queryString_getArticles = "";
    if (!empty($_SERVER['QUERY_STRING'])) {
    $params = explode("&", $_SERVER['QUERY_STRING']);
    $newParams = array();
    foreach ($params as $param) {
    if (stristr($param, "pageNum_getArticles") == false &&
    stristr($param, "totalRows_getArticles") == false) {
    array_push($newParams, $param);
    }
    }
    if (count($newParams) != 0) {
    $queryString_getArticles = "&" . htmlentities(implode("&", $newParams));
    }
    }
    $queryString_getArticles = sprintf("&totalRows_getArticles=%d%s", $totalRows_getArticles, $queryString_getArticles);
    ?>
    [/PHP]

    poi, nel punto della pagina dove vuoi vedere le news in elenco:
    [PHP]
    <?php do { ?>
    <h2><?php echo $row_getArticles['title']; ?></h2>
    <p><strong><?php echo $row_getArticles['theDate']; ?>:</strong> <?php $extract = getFirst($row_getArticles['article']); echo $extract[0]; if ($extract[1]) { ?> <a href="news_detail.php?article_id=<?php echo $row_getArticles['article_id']; ?>" class="floatRight">Leggi tutto</a></p>
    <p> </p>
    <p>
    <?php } ?>
    </p>
    <?php } while ($row_getArticles = mysql_fetch_assoc($getArticles)); ?>
    <table border="0" width="50%" align="center">
    <tr>
    <td width="23%" align="center"><?php if ($pageNum_getArticles > 0) { // Show if not first page ?>
    <a href="<?php printf("%s?pageNum_getArticles=%d%s", $currentPage, 0, $queryString_getArticles); ?>">Primo</a>
    <?php } // Show if not first page ?>
    </td>
    <td width="31%" align="center"><?php if ($pageNum_getArticles > 0) { // Show if not first page ?>
    <a href="<?php printf("%s?pageNum_getArticles=%d%s", $currentPage, max(0, $pageNum_getArticles - 1), $queryString_getArticles); ?>">Precedente</a>
    <?php } // Show if not first page ?>
    </td>
    <td width="23%" align="center"><?php if ($pageNum_getArticles < $totalPages_getArticles) { // Show if not last page ?>
    <a href="<?php printf("%s?pageNum_getArticles=%d%s", $currentPage, min($totalPages_getArticles, $pageNum_getArticles + 1), $queryString_getArticles); ?>">Successivo</a>
    <?php } // Show if not last page ?>
    </td>
    <td width="23%" align="center"><?php if ($pageNum_getArticles < $totalPages_getArticles) { // Show if not last page ?>
    <a href="<?php printf("%s?pageNum_getArticles=%d%s", $currentPage, $totalPages_getArticles, $queryString_getArticles); ?>">Ultimo</a>
    <?php } // Show if not last page ?>
    </td>
    </tr>
    </table>
    [/PHP]

    infine, dopo il tag di chiusura dell'html:
    [PHP]
    <?php
    mysql_free_result($getArticles);

    function getFirst($text, $number=2) {
    // regular expression to find typical sentence endings
    $pattern = '/([.?!]["']?)\s/';
    // use regex to insert break indicator
    $text = preg_replace($pattern, '$1bRE@kH3re', $text);
    // use break indicator to create array of sentences
    $sentences = explode('bRE@kH3re', $text);
    // check relative length of array and requested number
    $howMany = count($sentences);
    $number = $howMany >= $number ? $number : $howMany;
    // rebuild extract and return as single string
    $remainder = array_splice($sentences, $number);
    $result = array();
    $result[0] = implode(' ', $sentences);
    $result[1] = empty($remainder) ? false : true;
    return $result;
    }
    ?>
    [/PHP]

    spero che ti funzioni,
    fammi sapere