Inserimento differito di News nel database   facebook   twitter   google+

Discussioni su PHP, Apache e MySQL

Moderatore: spacemarc

Rispondi
moonlooker
Membro junior
Messaggi: 14
Iscritto il: 11 giu 2013, 16:55

Inserimento differito di News nel database

Messaggio da moonlooker » 16 giu 2014, 19:12

Ciao Marc,
per prima cosa ti devo fare con sempre più forza i miei complimenti. Uso spacemarc da un anno e ogni giorno ne comprendo sempre di più le potenzialità. Un lavoro con i controfiocchi davvero.

Espletate le formalità dei complimenti, passo alla domanda vera e propria. E' possibile implementare l'inserimento differito delle news? Attualmente quando nel form di inserimento passi il comando "inserisci" la news va nel database e pluff, viene inserita. Ma se io volessi passare l'inserimento tipo un ora, due ore dopo? Sarebbe una cosa semplice oppure, come suppongo, bisognerebbe smontare tutto e rimodulare molte cose?

Ciao Marc e sempre grazie mille

moonlooker
Membro junior
Messaggi: 14
Iscritto il: 11 giu 2013, 16:55

Re: Inserimento differito di News nel database

Messaggio da moonlooker » 18 giu 2014, 11:08

Ho fatto dei passi in avanti in questa direzione.
Ho creato un nuovo file "inserisci45min.php", modificando la stringa dell'inserimento data:

$data_pubb = mktime(date("H"),date("i")+45,date("s"),date("n"),date("j"),date("Y"));

Che adesso inserisce nel database la news con la data accresciuta di 45 minuti.
Adesso però ci sono due ulteriori passi, quello relativo a "include" e quello relativo a "rss".
Le news vengono introdotte nel sito tramite "include", che ovviamente raccoglie tutte le news infischiandosene del loro orario. E anche il feed rss che viene generato per le news si comporta allo stesso modo.

Per cui dovrebbero essere apportate delle modifiche in questa parte, in modo che "include" raccolga solo le news inserite FINO all'orario attuale e lasci stare quelle future, almeno finché non si verificheranno:

if ($config_val['max_parole_include'] > 0) {
$result_inc = mysql_query("SELECT nt.id, nt.titolo, nt.immagine, LEFT(nt.testo, " . $config_val['max_parole_include'] . ") AS testo, nt.data_pubb, nca.nome_categoria FROM `$tab_news` nt JOIN `$tab_categorie` nca ON nt.id_cat = nca.id_cat JOIN `$tab_utenti` nu ON nu.user_id = nt.user_id AND nu.autorizza_news = 1 WHERE nt.id_cat = 2 ORDER BY nt.data_pubb DESC LIMIT 5,5", $db);
}
else {
$result_inc = @mysql_query("SELECT nt.id, nt.titolo, nt.immagine, nt.data_pubb, nca.nome_categoria FROM `$tab_news` nt JOIN `$tab_categorie` nca ON nt.id_cat = nca.id_cat JOIN `$tab_utenti` nu ON nu.user_id = nt.user_id AND nu.autorizza_news = 1 WHERE nt.id_cat = 2 ORDER BY nt.data_pubb DESC LIMIT 5,5", $db);
}


...Provo ad andare avanti e vi aggiorno sull'esito, ma la richiesta di S.O.S. per Marc è ovviamente sempre valida.



**************************************************************************
Ps. Grazie all'aiuto di Marc nei mesi scorsi ho modificato alcune impostazioni. Già potete vederle nell'esempio sopra, dove sono in opera:
1) notizie filtrate per categoria (nell'esempio la cat=2), il Dbase restituisce cioè solo news della categoria Id=2
2) numero preciso di news restituite della cat=2 (nell'esempio restituisce dalla 5 alla 10 grazie al comando DESC LIMIT 5,5)
3) Lo stesso risultato l'ho anche per il feed rss che viene generato, anche lì si può procedere con un percorso analogo agendo sul file rss.php.

Avatar utente
spacemarc
Amministratore
Messaggi: 1076
Iscritto il: 22 giu 2002, 15:16
Località: Italia
Contatta:

Re: Inserimento differito di News nel database

Messaggio da spacemarc » 18 giu 2014, 11:56

per non mostrare le news "future" devi aggiungere questa condizione nel WHERE, dovrebbe essere sufficiente:

nt.data_pubb <= unix_timestamp()

Ciao
spacemarc.it

moonlooker
Membro junior
Messaggi: 14
Iscritto il: 11 giu 2013, 16:55

Re: Inserimento differito di News nel database

Messaggio da moonlooker » 18 giu 2014, 15:36

RISOLTO... MARC HO USATO UNA STRADA DIFFERENTE, FORSE PIU' LUNGA MA QUEL CHE CONTA E' CHE FUNZIONI.
A BENEFICIO DI TUTTI RIEPILOGO I PASSAGGI.

---------------------------------
INSERIMENTO DIFFERITO DELLE NEWS

Per farlo occorre agire su diversi files:
il file (o i file) inserisci.php
il file (o i file) include.php
il file (o i file) rss.php

Partimo dal file inserisci.
Io ne ho creato un altro, chiamandolo inserisci45min.php, che mi servirà a inserire notizie con 45 minuti di ritardo.
Per riuscirci devo cambiare due cose nel codice:
La prima al RIGO 122, dove inserisco il formato data:
$data_pubb = mktime(date("H"),date("i")+45,date("s"),date("n"),date("j"),date("Y"));
che "sampa" l'orario con 45min di ritardo
Seconda cosa l RIGO 195: il "form action" deve richiamare il file inserisci45min.php

Volendo (io ho fatto così) dopo aver creato il file inserisci45min.php, sono andato a modificare anche il file inserisci.php, quello che utilizziamo di solito per intenderci, in modo tale che sia possibile dallo stesso file inserisci passare sia notizie attuali che anche notizie postdatate. Ho fatto così: alla fine, dove ci sono i campi "submit" per inserire la news o vederne l'anteprima, ho fatto un piccola modifica alla fine: <input type="submit" value="<?php echo $lang['btn_insert']; ?>" name="submit" tabindex="3" onclick="this.form.target='_blank';return true;" />
... e in più subito dopo ho aggiunto un nuovo pulsante, che quando viene premuto aziona il file inserisci45min.php:
<input type="submit" value="Pubblica tra 45 minuti" name="submit" tabindex="3" onclick="input_form.action='inserisci45min.php'; return true;" />
Adesso avrete 3 campi: "inserisci", "anteprima", "inserisci tra 45 minuti"

Adesso occupiamoci di come il sito le va a recuperare, scartando le notizie future e prendendo quelle che, secondo lo scorrere del tempo, saranno "mature" per essere inserite.
*************************
*************************
*************************
Agiamo così sul file include.php,
dove nel nostro codice dovremo inserire il valore WHERE riferito all'orario, sia sopra che sotto. Notate bene che oltre a specificare che voglio solo le notizie attuali, ho anche posto un'altra condizione, e cioè che le notizie da "stampare" siano delle categorie con id=1, 5 e 6... ovviamente quest'ultima condizione potete non metterla se non vi serve, ma dal momento che ho rotto le scatole a Marc mesi fa per farlo, ho ritenuto giusto inserire anche questo esempio.
Eccolo qui sotto:

if ($config_val['max_parole_include'] > 0) {
$result_inc = mysql_query("SELECT nt.id, nt.titolo, nt.immagine, nt.letture, LEFT(nt.testo, " . $config_val['max_parole_include'] . ") AS testo, nt.data_pubb, nca.nome_categoria FROM `$tab_news` nt JOIN `$tab_categorie` nca ON nt.id_cat = nca.id_cat JOIN `$tab_utenti` nu ON nu.user_id = nt.user_id AND nu.autorizza_news = 1 WHERE nt.data_pubb <= " . time() . " AND (nt.id_cat = 1 OR nt.id_cat = 5 OR nt.id_cat = 6) ORDER BY nt.data_pubb DESC LIMIT 4", $db);
}
else {
$result_inc = @mysql_query("SELECT nt.id, nt.titolo, nt.immagine, nt.letture, nt.data_pubb, nca.nome_categoria FROM `$tab_news` nt JOIN `$tab_categorie` nca ON nt.id_cat = nca.id_cat JOIN `$tab_utenti` nu ON nu.user_id = nt.user_id AND nu.autorizza_news = 1 WHERE nt.data_pubb <= " . time() . " AND (nt.id_cat = 1 OR nt.id_cat = 5 OR nt.id_cat = 6) ORDER BY nt.data_pubb DESC LIMIT 4", $db);
}


Ok. Adesso il nostro file include non considererà le news future, finché non raggiungerà l'orario indicato per la pubblicazione.
*************************
*************************
*************************
Ultimo passaggio, per chi usa i feedRSS. Anche quelli vanno adeguati altrimenti il nostro feed verrà generato con tutte le notizie, sia quelle passate, che le attuali che le future. Noi vogliamo escludere queste ultime, almeno finché non raggiungeranno l'orario giusto per la pubblicazione.
Nel nostro codice dentro rss.php dovremo inserire il comando WHERE riferito alla data. E' sostanzialmente lo stesso discorso fatto poco sopra (anche qui per completezza include pure una restrizione per categoria, più precisamente specifico che voglio le news solo con categoria ID=6).

$query = mysql_query("SELECT nt.id, nt.titolo, nt.immagine, nt.letture, nt.data_pubb, nca.nome_categoria FROM `$tab_news` nt JOIN `$tab_categorie` nca ON nt.id_cat = nca.id_cat JOIN `$tab_utenti` nu ON nu.user_id = nt.user_id AND nu.autorizza_news = 1 WHERE nt.data_pubb <= " . time() . " AND(nt.id_cat = 6) ORDER BY nt.data_pubb DESC LIMIT 0,1", $db);


Ok, è tutto. Ringrazio sempre infinitamente Marc per la disponibilità che dimostra.

Rispondi