phpRS 2.8.x : phpRS Fórum
Toto fórum je určené výhradně k diskuzi o verzích phpRS v2.8.x.
phpRS - redakční a informační systém
Kešování obsahu pluginu
Zaslán uživatelem/kou: ZdenekPNJ (IP adresa zaznamenána)
Datum: 2010-04-07, 15:13

Zdravím všechny,
vytvořil jsem si plugin, který zobrazuje obsah jednoho z mých webů do bloku. Vše funguje jak má, ale potřeboval bych přidat část kódu, která určí, že se má obsah kešovat po určitou dobu, aby se zbytečně při každém volání nemusel načítat z databáze. Napadlo mně něco podobného jako je tomu u RSS, ale nedaří se mi to aplikovat do tohoto pluginu. Věděl by někdo jak na to.
Děkuji za rady.

Kód pluginu:


<?
function aframe1()
{
//Definice parametrů
$kolikClanku=1; //kolik se bude vypisovat clanku
$kolikClankuDalsi=3; //kolik se bude vypisovat clanku
$razeno=DESC; //styl razeni clanku (DESC sestupne (od nevetsiho po nejmensi) ASC vzestupne(od nejmensiho po nejvetsi) cim vetsi id tim je novejsi clanek
$stylvypisufirst = "def-first"; //zde je mozne uvest styl vypisu (hodnoty lze udat v css souboru laylotu ktery se pouziva)
$stylvypisudalsi = "def-dalsi"; //zde je mozne uvest styl vypisu (hodnoty lze udat v css souboru laylotu ktery se pouziva)
$stylvypisu = "def"; //zde je mozne uvest styl vypisu (hodnoty lze udat v css souboru laylotu ktery se pouziva)
//------------------------------------------------------------------------------
// sestaveni omezeni datumu na vypsani clanku nejlepe hodnoceni za posledni mesic
$dnesnidatum=date("Y-m-d H:i:s");
//SEKCE 1
//volání z databáze
$result=mysql_query('SELECT link, titulek, uvod, tema, idc, visible, datum, obrazek, level_clanku, stat, kraj, region, mesto FROM '.$GLOBALS['rspredpona'].'clanky WHERE (visible = 1) AND (datum <= "'.$dnesnidatum.'") AND level_clanku=1 ORDER BY idc ' . $razeno . ' LIMIT 0,'.$kolikClanku, $GLOBALS['dbspojeni']);

if ($result==0):
$retezecfirst.='<div class="'.$stylvypisufirst.'">Chybí zdrojová databáze</div>';
endif;

//volání z databáze
$resultdalsi=mysql_query('SELECT link, titulek, uvod, tema, idc, visible, datum, obrazek, level_clanku, stat, kraj, region, mesto FROM '.$GLOBALS['rspredpona'].'clanky WHERE (visible = 1) AND (datum <= "'.$dnesnidatum.'") AND level_clanku=1 ORDER BY idc ' . $razeno . ' LIMIT 1,'.$kolikClankuDalsi, $GLOBALS['dbspojeni']);

if ($resultdalsi==0):
$retezecdalsi.='<div class='.$stylvypisudalsi.'>Chybí zdrojová databáze</div>';
endif;

// overeni pritomnosti clanku
if (mysql_num_rows($result)==0):
$retezecfirst.='<div class="'.$stylvypisufirst.'">Neexistují články této kategorie</div>';
else:
// vypis clanku
$retezec="";
while($linefirst=mysql_fetch_array($result)) {
$retezecfirst.='<a target="_blank" href="view.php?cisloclanku='.$linefirst['link'].'&amp;rstema='.$linefirst['tema'].'&amp;rsstat='.$linefirst['stat'].'&amp;rskraj='.$linefirst['kraj'].'&amp;rsregion='.$linefirst['region'].'"><img border="0" hspace="0" vspace="0" style="width:200px;margin-bottom:5px;" src="'.$GLOBALS['rsimgthumb'].''.$linefirst['obrazek'].'" alt="'.$linefirst['titulek'].'"><span class="nadpis-b">'.ZkratUvodnik($linefirst['titulek'], 50, 2, 12).'</span></a>';
}
endif;
// overeni pritomnosti clanku
if (mysql_num_rows($resultdalsi)==0):
$retezecdalsi.='<div class='.$stylvypisudalsi.'>Neexistují články této kategorie</div>';
else:
// vypis clanku
$retezecdalsi="";
while($linedalsi=mysql_fetch_array($resultdalsi)) {
$retezecdalsi.='<li>
<a target="_blank" href="view.php?cisloclanku='.$linedalsi['link'].'&amp;rstema='.$linedalsi['tema'].'&amp;rsstat='.$linedalsi['stat'].'&amp;rskraj='.$linedalsi['kraj'].'&amp;rsregion='.$linedalsi['region'].'" title="'.$linedalsi['titulek'].'"><span class="nadpis">'.ZkratUvodnik($linedalsi['titulek'], 50, 2, 12).'</span></a></li>';
}
endif;

$retezec.='<div class="blok"><div style="background: Transparent;width:160px;height:25px"><img src="image/ikony/logo-web.gif" alt="Logo"></div><div class="box">'.$retezecfirst.'</div><div class="box"><ul>'.$retezecdalsi.'</ul></div></div>';

// zobrazeni menu
switch ($GLOBALS["vzhledwebu"]->AktBlokTyp()):
case 1: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 2: Blok2($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 3: Blok3($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 4: Blok4($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 5: Blok5($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
default: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
endswitch;
}

?>

LinkedIn - Zdeněk Pikulík

Regiony ČR.cz - 1. responzivní zpravodajství z regionů ČR
Medializujeme ČESKO.cz - Revoluční program podpory a modernizace obcí ČR
Obce2020.cz - Moderní řešení profesionálního webu pro obce

Re: Kešování obsahu pluginu
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2010-04-07, 21:58

Mrkni sem, takto som kedysi spravil plugin s cachovanim ja. [http://www.kvalitne.sk/sample/topictree-zdrojak.html]



Celkem upraveno 1×. Poslední úprava pa3k v 07.04.2010 21:59.

Re: Kešování obsahu pluginu
Zaslán uživatelem/kou: ZdenekPNJ (IP adresa zaznamenána)
Datum: 2013-09-21, 14:00

Tak pokud by někdo potřeboval, řeším to takto (jen bych chtěl požádat zdatnější znalce o zhodnocení)

Původní (klasická) verze:

function NazevPluginu()
{
...generování sql dotazů a výstupu $retezec...

switch ($GLOBALS["vzhledwebu"]->AktBlokTyp()):
case 1: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 2: Blok2($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 3: Blok3($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 4: Blok4($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
case 5: Blok5($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
default: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$retezec); break;
endswitch;
}

Nová (cacheovaná) verze:

function NazevPluginuCache($url='',$ttl = '')
{
$url='unikatni-nazev';
$ttl=3600; // --- doba cache ----------

// vychozi priznak
$cached = true;

// nenalezen soubor nebo probehl expiraci

if (!is_file("cache/" . md5($url)) || time() - filemtime("cesta-k-adresari-cache/" . md5($url)) > $ttl)
$cached = false;

// neni kesovano - nova cache
if (!$cached)
{
...generování sql dotazů a výstupu $retezec...
$obsah=$retezec;

$f= $obsah;
if (!$f)
{
echo 'Nelze načíst - ' . $url ;
return;
}

// ulozime
file_put_contents("cesta-k-adresari-cache/".md5($url), $f);

}

// nacteme tabulku
$nactenecache = file_get_contents("cesta-k-adresari-cache/".md5($url));

$cacheovanysoubor=$nactenecache;
return $cacheovanysoubor;
}

function NazevPluginu()
{

$pluginobsah=NazevPluginuCache();

switch ($GLOBALS["vzhledwebu"]->AktBlokTyp()):
case 1: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$pluginobsah); break;
case 2: Blok2($GLOBALS["vzhledwebu"]->AktBlokNazev(),$pluginobsah); break;
case 3: Blok3($GLOBALS["vzhledwebu"]->AktBlokNazev(),$pluginobsah); break;
case 4: Blok4($GLOBALS["vzhledwebu"]->AktBlokNazev(),$pluginobsah); break;
case 5: Blok5($GLOBALS["vzhledwebu"]->AktBlokNazev(),$pluginobsah); break;
default: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$pluginobsah); break;
endswitch;
}


LinkedIn - Zdeněk Pikulík

Regiony ČR.cz - 1. responzivní zpravodajství z regionů ČR
Medializujeme ČESKO.cz - Revoluční program podpory a modernizace obcí ČR
Obce2020.cz - Moderní řešení profesionálního webu pro obce

Re: Kešování obsahu pluginu
Zaslán uživatelem/kou: JanVar (IP adresa zaznamenána)
Datum: 2013-09-21, 23:11

to vypadá dobře, jen poznámku...
To echo že nelze načíst je předpokládám jen pro tebe a tvoji kontrolu.
Jinak bych to vyhodil z kodu, prostě nepovede se načíst, tak zachovat starý obsah cache, povede se načíst, přepsat novým

Dál jsem to zatím nestudoval, ale co je komu do toho, že se zrovna nepovedlo nový obsah načíst, když je starý obsah dostupný



-- JaV ---- [http://www.hades.cz] ---- security by obscurity ---------------------------------------------
motto:
It's OK to be ignorant; it's not OK to play stupid.
But it's simply not efficient for us to try to help people who are not willing to help themselves.
----------------------------------------------------------------------------------------------------------------------

Re: Kešování obsahu pluginu
Zaslán uživatelem/kou: ZdenekPNJ (IP adresa zaznamenána)
Datum: 2013-09-22, 18:30

Jojo, máš pravdu, kontrola:-), ale na ostrý provoz samozřejmě bez.

LinkedIn - Zdeněk Pikulík

Regiony ČR.cz - 1. responzivní zpravodajství z regionů ČR
Medializujeme ČESKO.cz - Revoluční program podpory a modernizace obcí ČR
Obce2020.cz - Moderní řešení profesionálního webu pro obce

Re: Kešování obsahu pluginu
Zaslán uživatelem/kou: ZdenekPNJ (IP adresa zaznamenána)
Datum: 2016-09-29, 15:31

Zdravím všechny,
po letech navazuji na téma kešování obsahu pluginu.
Plugin funguje perfektně, jen bych ho chtěl malinko vylepšit.

Jde o tohle. Mám nastavený pevný čas keše jen na určitou dobu ($ttl=3600; // --- doba cache ---). Chtěl bych však dosáhnout situace, kdy se bude načítat z keše pořád, tzn. na neurčito, dokud nedojde k nějaké změně, která by byla například vázána na nový příspěvek či editaci příspěvku v administraci. Jak toho ale nejlépe docílit?

Nemáte někdo nápad? Děkuji moc za rady.

LinkedIn - Zdeněk Pikulík

Regiony ČR.cz - 1. responzivní zpravodajství z regionů ČR
Medializujeme ČESKO.cz - Revoluční program podpory a modernizace obcí ČR
Obce2020.cz - Moderní řešení profesionálního webu pro obce



Lituji, ale pouze registrovaní uživatelé mohou zasílat příspěvky do této sekce.
This forum powered by Phorum and designed by STaNBoSS.