[addon rsscontrol] RssControl
- Ondřej Mirtes
- Člen | 1536
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
Jo asi nejdřív přetypovat výsledek DibiDataSourcu na pole. Na problém s dibi jsem už odpovídal ;)
- Honza Marek
- Člen | 1664
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
- Honza Marek
- Člen | 1664
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
Ř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.