Autor Zpráva
kimmy
Profil *
Zdravím,
mám takový problém, na který nemůžu nikde najít odpověď :-(
Potřebuji udělat web, který pomocí RSS načte nějaké zprávy (např. z www.idnes.cz) a zobrazí nejaktuálnějších cca 15 linků na zprávy. Používám (musím používat) Smarty šablony, a už jsem vyzkoušela veškeré pluginy, které Smarty nabízí. Nejvíc se mi osvědčil LastRSS, ale ani přes ten se mi na obrazovce nikdy nic neobjeví. Prostě mám stále bílý monitor.. musí tam být nějaká blbá chyba, ale už to v tom asi nevidím..

Skript php vypadá takto:

<?
function smarty_function_lastrss_load($params, &$smarty) {
	if ($params['file'] == '') {
		$smarty->trigger_error("lastrss_load: missing 'file' parameter");
		return;
	}
	if ($params['assign'] == '') {
		$smarty->trigger_error("lastrss_load: missing 'assign' parameter");
		return;
	}
	require_once('./libs/classes/lastRSS.php');
	if(class_exists('lastRSS')) {
		$_rss =& new lastRSS();
		if(isset($params['cache_dir'])) {
			$_rss->cache_dir = $params['cache_dir'];
		} else {
			$_rss->cache_dir = $smarty->cache_dir;
		}
		if(isset($params['cache_lifetime'])) {
			$_rss->cache_time=$params['cache_lifetime'];
		} else {
			$_rss->cache_time=3600; // one hour
		}
		if($rs = $_rss->get($params['file'])) {
			$smarty->assign($params['assign'], $rs);
		} else {
			$smarty->trigger_error("lastrss_load: unable to read '{$params['file']}'");
		}
	} else {
		$smarty->trigger_error("lastrss_load: unable to load lastRSS library");
	}
}



$smarty->display('index.html');

?>




A šablona index.html vypadá takto:

{$lastrss_load 
file="http://www.php.net/news.rss" 
assign="phpnews"} 
{section name=rss loop=$phpnews.items}
<a href="{$phpnews.items[rss].link}">{$phpnews.items[rss].title}</a><br />
{/section}



Ať dělám co dělám, nikdy se nezobrazí žádný odkaz, jen bílá stránka, v lepším případě bez erroru či varování..

Nevěděli byste někdo, prosímvás, co s tím?

Předem moc děkuju za jakékoliv odpovědi..
MaxwellDemon
Profil
kimmy
a co ti k tomu říká logfile?
kimmy
Profil *
MaxwellDemon
Logfile mi nic neříkalo, tak jsem si o tom zkusila něco vyhledat.. Měl by to být soubor uložený a Apachi, takový tam ale nemám. Jinde píšou, že je to nějaká třída, ale jak vypadá, nebo co s ní, to jsem nenašla... Nebo jsi měl na mysli něco s řízením redo log souborů?
MaxwellDemon
Profil
kimmy
mám na mysli error log, kam php vypisuje chybový hlášky (jeho nastavení najdeš v php.ini v sekci Error handling and logging ... měla bys mít nastaveno log_errors na On a v error_log nějakou smysluplnou cestu k error logu

tam ti potom php (i smarty) vypisuje chybový hlášky ... kdy, kde a proč ti nastala chyba ... dost často je tam přímo napsáno kde a co se děje blbě ... takže znát tu hlášku ti může ušetřit hodiny hledání ... zkus se na to mrknout a zkus sem tu hlášku případně zkopírovat ... třeba z toho budem moudřejší
kimmy
Profil *
MaxwellDemon
Moc děkuji za radu, co nejdřív to vyzkouším. Vy, co tomu rozumíte, jste hodní, když tady radíte a pomáháte těm, kteří tak zkušení nejsou. Vážím si toho. Díky.
kimmy
Profil *
MaxwellDemon
Ok, log_errors mám na On a v error_log jsem nastavila toto:

; Log errors to specified file.
error_log = "C://web/www/error.log"

; Log errors to syslog (Event Log on NT, not valid in Windows 95).
error_log = "C://web/www/error.log"


Předpokládám, že tam žádná chyba není, ale když ty moje skripty spustím přes localhost, ten soubor error.log zůstane prázdný. Soubory php.ini mám dva, jeden v C://Windows/php.ini a druhý v C://web/prog/php5/php.ini (zde jsem si nainstalovala PHP) - změnu jsem provedla v obou souborech, protože jsem si nebyla jistá, jestli to v tom prvním bude stačit. Předtím jsem mu dokonce soubor sama vytvořila (protože sám ho nevytvořil), ale i tak prostě zůstavá bez obsahu, čili prázdný. Co to, prosím, znamená?
kimmy
Profil *
MaxwellDemon
Další soubor error.log jsem ale našla ve složce, kde mám nainstalován Apache. Ten už nějaké chyby zobrazuje, konkrétně tyto:

[Sat May 03 21:24:03 2008] [warn] pid file C:/web/prog/Apache2/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Sat May 03 21:24:03 2008] [notice] Apache/2.0.63 (Win32) PHP/5.2.5 configured -- resuming normal operations
[Sat May 03 21:24:03 2008] [notice] Server built: Jan 17 2008 22:58:29
[Sat May 03 21:24:03 2008] [notice] Parent: Created child process 1152
[Sat May 03 21:24:03 2008] [notice] Child 1152: Child process is running
[Sat May 03 21:24:03 2008] [notice] Child 1152: Acquired the start mutex.
[Sat May 03 21:24:03 2008] [notice] Child 1152: Starting 250 worker threads.


Ale že bych z toho byla nějaká chytrá, to se říct nedá...
kimmy
Profil *
Omlouvám se ještě za jeden příspěvek, pro dnešek snad poslední. Všimla jsem si, že když spustím localhost, že se mi v adresním řádku zobrazí ta oranžová ikonka pro RSS kanály. Když na ni kliknu, opravdu se otevře RSS kanál webu, který mám zadaný v šabloně index.html... Není to ale nějaké divné, když v tom souboru index.html zobrazuji přímo odkazy na již jednotlivé zprávy? Ten soubor index.html vypadá totiž takto:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  <meta http-equiv="content-language" content="en" />
  <title>titulek</title>
  <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.lidovky.cz/ln_domov.asp?y=ln_domov/rss.htm">
 </head>
<body>

{$lastrss_load 
file="http://www.lidovky.cz/ln_domov.asp?y=ln_domov/rss.htm" 
assign="phpnews"} 
{section name=rss loop=$phpnews.items}
<a href="{$phpnews.items[rss].link}">{$phpnews.items[rss].title}</a><br />
{/section}

</body>
</html>



V příkazu Section by se měly přece ty jednotlivé zprávy vypsat přímo do stránky, a ne se jen zobrazit ikonka v adresním řádku na daný RSS kanál (v tomto případě na lidovky.cz), nemám pravdu?
kimmy
Profil *
Tak už jsem si to vyřešila.. Stačilo zaregistrovat tu funkci, tzn. do PHP kódu přidat $smarty->register_function('lastrss_load', 'smarty_function_lastrss_load'); , a umazat ten chybný dolar v řádku $lastrss_load (v souboru index.html) - není to proměnná, ale načtení funkce.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: