[addon rsscontrol] RssControl

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ondřej Mirtes
Člen | 1536
+
0
-

Diskuse ke stránce RssControl


Na tuto komponentu jsem se hodně těšil, ale mám s ní pár problémů.

Jedna se týká dibi (viz vybrání sloupce v DibiDataSource jako alias na dibi fóru) a druhá se týká PHP. Při doporučeném způsobu úpravy itemů, které půjdou do RSS kanálu (tedy prohnat pole $items foreachem s referencí na $item), mi PHP zařve „An iterator cannot be used with foreach by reference“. To samé mi zařve i uvnitř RssControl v metodě render().

Co s tím? Díky.

Editoval LastHunter (30. 8. 2009 12:43)

Honza Marek
Člen | 1664
+
0
-

Jo asi nejdřív přetypovat výsledek DibiDataSourcu na pole. Na problém s dibi jsem už odpovídal ;)

Honza Marek
Člen | 1664
+
0
-

Respektive použít metodu fetchAll u objektu DibiDataSource.

Honza Marek
Člen | 1664
+
0
-

Prc cestující Nette Expresu: Napadlo mě řešení problému s kešovacím klíčem. Sice se zcela změní implementace i použití komponenty, ale myslim, že to nevadí :-D

Patrik Votoček
Člen | 2221
+
0
-

a jaké??? :-)

Honza Marek
Člen | 1664
+
0
-

To kdybych já to tady plácnul jen tak, tak to bude znít hrozně. To byste mi vynadali. Radši to naprogramuju, udělám příklad a ukážu výhody.

Honza Marek
Člen | 1664
+
0
-

Ze všeho nejdůležitější je samozřejmě logo.

Honza Marek
Člen | 1664
+
0
-

Řešení bych nazval prozatím konceptem. Věc se má tak, že jsem tuhle komponentu dost připodobnil WebLoaderu. Opět to funguje tak, že widget v šabloně layoutu vygeneruje soubor a vyrobí na něj odkaz.

Příklad:

protected function createComponentRss() {
	$rss = new Feed;

	// callback pro načítání dat. Zavolá se jen tehdy, pokud v Nette\Cache
	// neexistuje záznam o tom, že soubor není potřeba přegenerovávat.
	$rss->loadDataCallback = array($this, "loadRss");

	// nastavení cest
	$rss->folderUri = Environment::getVariable("baseUri");
	$rss->folderPath = WWW_DIR;
	// $rss->fileName = "rss.xml"; tohle je už defaultně nastaveno

	// titulek tagu link
	$rss->linkTitle = "Rss kanál webu"; // je možné nastavit jen vlastnost title, pak se linkTitle vezme z toho

	return $rss;
}

public function loadRss(Feed $rss) {
	$rss->title = "Rss";
	$rss->description = "Popisek";
	$rss->link = $this->link("Test:");
	$rss->addItem(array(
		"title" => "Novinka",
	));
	$rss->addItem(array(
		"title" => "Novinka 2",
	));
}

V šabloně už jen:

{control rss}

O kešování metainformací se stará Nette\Cache, takže lze využít třeba závislost na tazích apod. Kešovacím klíčem je adresa generovaného souboru.

Honza Marek
Člen | 1664
+
0
-

Kdyby na to někdo měl nějaký názor, tak bych poprosil o feedback.

Honza Kuchař
Člen | 1662
+
0
-

Podle mě, super! (i když vím, že tento názor ti moc nepomůže :) )