Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi
 
Forum GT: Condividiamo idee e conoscenza Forum GT: Condividiamo idee e conoscenza


Condividi questo contenuto nei Social Network:
Ti stiamo aspettando: Registrati subito e gratis. Entra a far parte di una delle comunità più attive in Italia. Se hai dimenticato i tuoi dati li puoi recuperare subito.


Vai indietro   Forum per Webmaster: Condividiamo Idee e Conoscenza > Sviluppo e Gestione siti web > Php - Mysql > Scripting e Risorse utili
Benvenuto! Forum Regole FAQ Lista utenti Calendario Segna come letti


Rispondi
 
LinkBack Strumenti di discussione
Vecchio 12-02-09, 00:00   #1 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
[SCRIPT] News con utilizzo di un Database MySQL

Con il contributo del gruppo di sviluppo del progetto PHP-MySQL del Forum GT ho sviluppato questo semplice script utile per poter implementare un sistema di news sul proprio sito.

Descrizione dello script:
- pannello di amministrazione con accesso tramite autenticazione
- editor Tinymce per creare le vostre news
- news pubblicate con titolo, data di pubblicazione, data di fine pubblicazione e possibilità di non visualizzare le news in corso, sul lato pubblico, tramite una semplice checkbox
- possibilità di modificare le news inserite
- possibilità di cancellare le news inserite
- pannello di installazione dello script
- richiesto il minimo intervento sul lato utente per completare l'installazione dello script
- codice commentato e validato XHTML 1.0 Transitional


Cosa serve per utilizzarlo:
- che sia caricato sul server il modulo PHP 5 >
- un Database MySQL

Come installarlo:
scaricatevi il pacchetto zippato, scompattatelo e caricate la cartella news tramite FTP, così com'è, nella directory dove si trova la pagina che dovrà visualizzare le vostre news. Se per esempio la pagina dove volete visualizzare le news è vvv.domain.ext/index.php la cartella news andrà caricata nella root del vostro sito (vvv.domain.ext/news/).
Una volta caricati i file sul server richiamate dal vostro browser la pagina install.php che si trova dentro la cartella news (nell'esempio di prima vvv.domain.ext/news/install.php).
Vi si presenterà la pagina di presentazione dello script, leggete tutto con cura e quindi procedete con l'installazione.
Allo step successivo vi verrà richiesto di inserire:
- Dati di accesso al vostro Database MySQL (host, nome utente, password, nome del Database di destinazione).
- Dati di accesso al pannello di amministrazione (consiglio di evitare i classici admin/admin), questi saranno i dati che utilizzerete per accedere al pannello di amministrazione dello script.
- Numero di news da visualizzare sul vostro sito.
- Ordinamento delle news (crescente o decrescente).
N.B. se decidete di visualizzare le news in ordine crescente tenete presente che settando per esempio a 3 il numero di news da visualizzare, verranno pubblicate sul sito le prime 3 news visualizzabili in quel determinato giorno, partendo dalla più vecchia. Pertanto se le news in corso saranno 5, ad esempio, non verranno visualizzate le ultime 2 in ordine temporale di pubblicazione.

Inserite correttamente quanto richiesto e quindi procedete.
Se quanto inserito è corretto verranno creati:
- il file config.php
- la tabella news
- la tabella user

Se qualcosa è andato storto per via di qualche problema con il vostro servizio di Hosting sul file readme.txt troverete come procedere manualmente alla creazione di quanto sopra.

Una volta completata l'installazione dovrete aprire il file della pagina dove visualizzerete le vostre news (che dovrà avere estensione .php) ed inserire, dove opportuno, il seguente codice:
Codice PHP:
<?php
require_once ("news/config.php");
include (
"news/news.php");
?>
Il pacchetto include già un foglio stile che potrete richiamare inserendo tra i tags <head> e </head> il seguente codice:

Codice HTML:
<link rel="stylesheet" href="news/news_style.css" type="text/css" />
Ma potete anche creare voi stessi un foglio stile, o modificare quello che già possedete, per amalgamare al meglio le news con il resto della pagina.

La visualizzazione dell'editor Tinymce predefinita è quella advanced, ma potrete decidere anche di caricare la versione normal (con meno pulsanti) o la versione simple (solo l'essenziale). Vi basterà modificare questa riga nel file admin.php:
Codice HTML:
<script language="javascript" type="text/javascript" src="script/tiny_advanced.js"></script>
variando il src= con script/tiny_normal.js o script/tiny_simple.js


Potete scaricare il pacchetto zippato quì e vedere una demo dello script quì.

La versione attuale è la 1.1.


Attendo vostri commenti e suggerimenti ovviamente.

Buone news a tutti.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!

Ultima modifica di Samyorn : 18-05-12 08:38.
Samyorn ora è in linea   Rispondi citando
Vecchio 23-02-09, 02:09   #2 (permalink)
User
 
Data di registrazione: Nov 2008
Messaggi: 11
Bellissimo

Ottimo lavoro!
Complimenti da chi è lontano anni luce dalla capacità di realizzare cose così.
Mi sto avvicinando solo ora a questo argomento e fa piacere vedere come la cosa sia semplificata dal lavoro di persone competenti quali voi siete.
Grazie
Ciao
__________________
creazione e manualità www.styledesign.it
stancone non in linea   Rispondi citando
Vecchio 23-02-09, 21:22   #3 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Grazie a te stancone.

Ovviamente se avete idee, commenti, suggerimenti o altro da proporre siete tutti benvenuti.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 24-02-09, 22:26   #4 (permalink)
User
 
L'avatar di bettacam
 
Data di registrazione: Jan 2008
Messaggi: 103
Che id e password si deve usare per la demo?

Grazie a nome di tutti per il lavoro.
bettacam non in linea   Rispondi citando
Vecchio 24-02-09, 23:48   #5 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Ciao bettacam.

Username e password sono scritti nella pagina di login, ovviamente in quella che installerete non usciranno.

Grazie a te, mi raccomando aspettiamo i vostri feedback.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 01-04-09, 15:03   #6 (permalink)
User Newbie
 
Data di registrazione: Apr 2009
Messaggi: 8
Ciao! Mi sono iscritto su questo forum apposta per ringraziare chi si è adoperato per creare questo script, è davvero ottimo (e, perchè no, anche per approfondire le mie conoscenze)!
Ne approfitterei anche per chiedere se la grafica delle pagine di login e di amministrazione delle news è personalizzabile, se si può modificare in tutta la sua struttura grafica, se bisogna lasciare dei riferimenti verso chi l'ha ideato... non vorrei fare qualche cosa per cui gli autori dello script possano non essere d'accordo.
Grazie ancora per l'ottimo lavoro!
Evil_Majesty non in linea   Rispondi citando
Vecchio 01-04-09, 15:18   #7 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Ciao Evil_Majesty e benvenuto nel Forum GT.

Ti ringrazio intanto per il feedback.

Lo script lo puoi personalizzare per come più preferisci e non è obbligatorio lasciare il riferimento a chi l'ha ideato, anche se ovviamente un linkino Powered by sarebbe comunque gradito.
D'altronde è solo struttura e nulla più.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 01-04-09, 22:57   #8 (permalink)
User Newbie
 
Data di registrazione: Apr 2009
Messaggi: 8
[...]

Grazie mille! Avrei anche un altro quesito...

Vorrei creare una query sql che rintracci le news dividendole per mesi, in modo da avere un archivio di news consultabile, nel quale selezionando un mese, vengano mostrate solo le news appartenenti ad esso.
Vorrei sapere se è possibile realizzare tale query partendo dal vostro database, e se sì, vi chiederei di darmi qualche dritta.
Grazie ancora!

Ultima modifica di Samyorn : 01-04-09 23:11. Motivo: Inutile quotare il messaggio a cui si risponde.
Evil_Majesty non in linea   Rispondi citando
Vecchio 02-04-09, 01:04   #9 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Quello dell'archivio news dovrebbe essere un prossimo step, bisogna solo trovare il tempo per dedicarcisi.

Vediamo un po':
la data è memorizzata nel Db nel formato timestamp, quindi giostrandoti con l'utilizzo delle funzioni mktime e date dovresti riuscire senza troppa fatica ad isolarti i timestamp di ogni inizio a fine mese, partendo dall'attuale mese.
Esempio:
facendo time() adesso avrei come risultato: 1238622143
Mi estratto mese ed anno corrente:
Codice PHP:
$time=time();
$month=date("m"$time);
$year=date("Y"$time); 
Per conoscere il timestamp di inizio mese (01/04/2009 00:00:00) mi basta usare la funzione mktime:
Codice PHP:
$data1=mktime(0,0,0,$month,1,$year); 
Che mi darà il timestamp 1238536800.

Se voglio conoscere il timestamp dell'inizio mese precedente mi basterà diminuire il valore di $month:
Codice PHP:
$data2=mktime(0,0,0,$month-1,1,$year); 
ed otterro': 1235862000 (01/03/2009 00:00:00)

A questo punto se voglio le news del mese di Marzo impostero' la query così:
Codice PHP:
$sql="SELECT * FROM news WHERE publish_data>='$data2' AND publish_data<'$data1'"
Bisogna lavorare un po' con i cicli e dovrebbe andare.


Un metodo più veloce (anche a livello di esecuzione) e pratico potrebbe essere quello di creare una tabella con i timestamp di inizio e fine mese che si aggiorna al primo post del mese.

Avrai così i dati di confronto pronti e non rischi di visualizzare mesi vuoti se per esempio un mese intero non hai postato news.

Fai un ciclo padre sui record contenuti in questa tabella ed all'interno ci piazzi il ciclo per l'estrazione delle news, come da select di poco fa' solo che i timestamp di confronto li hai già belli che pronti.


Non so...a quest'ora e con il cervello cotto a puntino mi son passate queste due soluzioni in mente.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 04-04-09, 02:04   #10 (permalink)
User Newbie
 
Data di registrazione: Apr 2009
Messaggi: 8
Grazie mille per i suggerimenti, mi sono stati davvero utilissimi! Sono infatti riuscito a creare un archivio di news nel quale l'utente, attraverso delle combobox, può scegliere mese e anno e leggere le news corrispondenti (magari potrei postare tutto il codice, sicuramente sarà un pò rozzo, ma può sempre esservi di ispirazione per costruire il vostro archivio)

Direi che a questo punto ho un ultimo problema, ovvero come gestire il fatto che un utente possa selezionare una data in cui non ci sono news.

A questo propostito vorrei sapere una cosa...nella query

Codice PHP:
$sql"SELECT * FROM news WHERE publish_data>='$data' AND publish_data<'$datafine'
        ORDER BY publish_data "
.$order."";
        
$query=@mysql_query($sql) or die (mysql_error()); 
Dove $data e $datafine rappresentano rispettivamente il primo giorno del mese e il primo giorno del mese successivo, e dove le date ricercate non siano presenti nel database... $query che valore assume? 0? stringa vuota? False? Qualche altra cosa?

La mia idea infatti era di fare un controllo su questa variabile prima di cominciare il ciclo dei vari risultati, e nel caso fosse risultata 0/vuota/false/qualcos'altro, stampare a video il messaggio "Non ci sono news disponibili per questo mese"... Può funzionare? Oppure esiste un modo migliore?

Grazie ancora per gli aiuti preziosi che mi hai fornito!
Evil_Majesty non in linea   Rispondi citando
Vecchio 04-04-09, 13:38   #11 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Il tuo contributo sarà certamente benvenuto, posta pure il codice se vuoi.

Se la query non estrae dati restituisce una risorsa vuota, potresti semplicemente verificare con mysql_num_rows() se il numero di righe è diverso da zero.

Diversamente potresti costruire la combobox direttamente con mesi dove ci sono le news, ovvero verificare a priori questa condizione.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 04-04-09, 16:12   #12 (permalink)
User Newbie
 
Data di registrazione: Apr 2009
Messaggi: 8
Grazie, ora è perfettamente funzionante!

Appena ho un attimo di tempo pulisco il codice, lo commento e lo posto!

Ora, vorrei segnalare un problema che ho scoperto e che riguarda la scrittura delle news: quando inserisco una news, se ho scritto una parola con l'apostrofo (ad esempio: l'albero) ottengo questo errore:

Codice PHP:
You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'albero</p>''1''1238796000''0'at line 1 
Se ho capito bene, dipende dal fatto che l'apostrofo viene riconosciuto come sintassi del codice. Io al momento risolvo semplicemente racchiudendo l'apostrofo tra i backslash (\'\), ma sarei curioso di sapere il perchè di questo errore, visto che nella vostra demo questo non si verifica.
Evil_Majesty non in linea   Rispondi citando
Vecchio 04-04-09, 16:27   #13 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn


Strano dovrebbe pensarci l'editor a renderlo un entità HTML, difatti mi funziona sulla demo.

Pero' mi hai fatto notare che mi ero dimenticato una cosa.


Apri il file admin_action.php ed alle righe 12-13-15-16-100-101 (dove c'è la chiamata alla funzione htmlentities()) aggiungi l'ENT_QUOTES, ovvero così:
Codice PHP:
$title=htmlentities($_POST['new_title'], ENT_QUOTES); 
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Vecchio 04-04-09, 20:50   #14 (permalink)
User Newbie
 
Data di registrazione: Apr 2009
Messaggi: 8
Ottimo, adesso funziona tutto alla perfezione!!

Ok, ecco qua quello che sono riuscito a combinare per realizzare il mio archivio.

Innanzitutto abbiamo il form, che trasmette i parametri ricevuti attraverso il metodo POST alla pagina archivionews.php:

Codice PHP:
           <form action="archivionews.php" method="post">
                <
select name="mese">
                   <
option value="1">Gennaio</option>
                   <
option value="2">Febbraio</option>
                   <
option value="3">Marzo</option>
                    <
option value="4">Aprile</option>
                    <
option value="5">Maggio</option>
                    <
option value="6">Giugno</option>
                    <
option value="7">Luglio</option>
                    <
option value="8">Agosto</option>
                    <
option value="9">Settembre</option>
                    <
option value="10">Ottobre</option>
                    <
option value="11">Novembre</option>
                    <
option value="12">Dicembre</option>
                </
select>                 
                <
select name="anno">
                     <
option value="2009">2009</option>
                     <
option value="2010">2010</option>
                </
select>
                <
input type="submit" value="Ricerca" />
          </
form
E questo è il codice relativo a archivionews.php:

Codice PHP:
<?
//controllo che le variabili siano settate e che non siano vuote
if(isset($_POST['mese'])&& isset ($_POST['anno']))
{
    if((
$_POST['mese']!="")&& ($_POST['anno']!=""))
    {
        
$connessione mysql_connect("localhost""user""psw")
            or die(
"Connessione non riuscita: " mysql_error());
             
mysql_select_db("miodb",$connessione)
            or die(
"Connessione al database non riuscita: " mysql_error());
            
            
//$data e $anno contengono i parametri che gli sono stati passati dall'utente
            
$data=$_POST['mese'];
            
$anno=$_POST['anno'];
            
            if (
$data!="0" && $anno!="0")
            {    
                
//Eseguo l'istruzione switch per assegnare ad ogni valore che può assumere
                // la variabile $data il timestamp del primo giorno del mese corrispondente.
                
switch ($data) {
                    case 
1:
                    
$datamktime(0,0,011$anno);
                    break;
                    case 
2:
                        
$data=mktime(0,0,0,2,1,$anno);
                    break;
                    case 
3:
                        
$data=mktime(0,0,0,3,1,$anno);
                    break;
                    case 
4:
                        
$data=mktime(0,0,0,4,1,$anno);
                    break;
                    case 
5:
                        
$data=mktime(0,0,0,5,1,$anno);
                    break;
                    case 
6:
                        
$data=mktime(0,0,0,6,1,$anno);
                    break;
                    case 
7:
                        
$data=mktime(0,0,0,7,1,$anno);
                    break;
                    case 
8:
                        
$data=mktime(0,0,0,8,1,$anno);
                    break;
                    case 
9:
                        
$data=mktime(0,0,0,9,1,$anno);
                    break;
                    case 
10:
                        
$data=mktime(0,0,0,10,1,$anno);
                    break;
                    case 
11:
                        
$data=mktime(0,0,0,11,1,$anno);
                    break;
                    case 
12:
                        
$data=mktime(0,0,0,12,1,$anno);
                    break;
                }
                
                
//Per assegnare un valore $datafine eseguo un controllo: se $data è dicembre,
                //$datafine diventa il primo gennaio dell'anno successivo, altrimenti diventa il primo
                //giorno del mese successivo.
                
$mese=date("m"$data);
                
                if(
$data!=mktime(0,0,0,12,1,$anno))
                {
                    
$datafine=mktime(0,0,0,$mese+1,1,$anno);
                }
                else
                {
                    
$datafine=mktime(0,0,0,1,1,$anno+1);
                }
                
                
//Con questa query, seleziono tutte le news comprese tra $data e $datafine, 
                //ovvero tra il primo giorno di un mese (compreso) e il primo giorno del mese successivo (non compreso).
                
$order="DESC";
                
$sql=    "SELECT * FROM news WHERE publish_data>='$data' AND publish_data<'$datafine'
                    ORDER BY publish_data "
.$order."";
                
$query=@mysql_query($sql) or die (mysql_error());
                
                
//questa variabile conterrà il numero di righe restituite dalla query
                
$numrighemysql_num_rows($query);
            }
        }
}
else
{
echo 
"le variabili non sono state settate";
}
?>
<div id="contentnews">
    <?
        
//Se il numero di righe restituite è 0,  dirò che non ci sono news disponibili.
        
if ($numrighe!=0)
        {
            
// cicliamo adesso il risultato della nostra query per visualizzare le nostre news
            
while ($row=mysql_fetch_array($query))
            {
    
?>
                <span class="titlenews"><? echo $row['title']; ?></span><br />
                <span class="datanews">Data: <? echo date("d/m/Y"$row['publish_data']); ?></span><br /> <!-- avendo salvato il valore data in timestamp utilizziamo la funzione date per visualizzare la data nel formato italiano -->
                <? echo html_entity_decode($row['text']); // la funzione html_entity_decode serve a ritrasformare le entità HTML create dall'editor in tag ?> 
                <p><img src="images/separatore.jpg" alt=""></p>
                <?
            
}
        }
        else
        {
            
?>
            <span class="titlenews"><? echo "Non ci sono news disponibili per la data selezionata." ?></span>
            <?
        
}
        
?>
</div>
Spero che vi possa essere utile, e grazie ancora per il supporto!
Evil_Majesty non in linea   Rispondi citando
Vecchio 04-04-09, 21:36   #15 (permalink)
Consiglio Direttivo
 
L'avatar di Samyorn
 
Data di registrazione: Dec 2007
Ubicazione: Catania
Messaggi: 5,847
Invia un messaggio tramite ICQ a Samyorn Invia un messaggio tramite Skype a Samyorn
Ringraziamo noi te per aver condiviso questa tua chicca con noi.
__________________
Qui, Quo, Qua
Si parla poco di SMF? Sentiamo l'opinione di chi lo ha provato. Ti amo...brindiAMO?
Conosci GTLab? Devi scegliere un CMS per Forum e non sai quale? Guarda quì!!
Samyorn ora è in linea   Rispondi citando
Rispondi
Tags: , , ,



Strumenti di discussione

Regole di scrittura
Non puoi postare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi allegare file
Non puoi editare i tuoi post

BB code is Attivo
smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Attivo
Pingbacks are Attivo
Refbacks are Disattivato
Vai al forum



Tutti gli orari sono GMT +3. Attualmente sono le 20:16.




Forum GT - © 2004-2009 GT idea S.r.l P.iva 02418200800 - Privacy/Disclaimer

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.