Choď na navigáciu
Nálepky: rss CakePHP

RSS kanál v CakePHP

RSS kanálmi disponuje v súčasnosti každý dobrý web a my si dnes ukážeme, ako môžeme pomocou pár riadkov elegantne vytvoriť takýto kanál s CakePHP.

1. krok – získavame dáta

Jednou z najčastejších využití RSS je informovať užívateľov napr. o nových článkoch na stránkach. Budem predpokladať, že už máme napríklad vytvorený model s názvom Article, pomocou ktorého získame dáta potrebné pre vytvorenie rss kanálu.

Následne si vytvoríme RSS controller a do súboru app/controller­s/rss_controller­.php umiestníme nasledujúci kód

class RssController extends AppController
{
        var $name = "Rss";
        var $uses = array('Article');
        var $helpers = array('Rss','Xml');
        var $layout = 'default';
        var $layoutPath = 'rss';

        function articles()
        {
                $this -> set('articles',$this -> Article -> findAll(array('Article.visible=1','Article.publish_up < now()'),null,array('Article.created'=>'desc')));
        }
}

2. krok – rss layout

V ďalšom kroku si vytvoríme layout pre náš rss kanál a to vytvorením súboru app/views/lay­outs/rss/defau­lt.ctp a umiestníme do neho nasledovný kód

<?php echo $xml->header(); ?>
<?php echo $content_for_layout; ?>

3. krok – view

Posledným krokom je vytvorenie view pre náš rss kanál. Vytvoríme súbor app/views/rss/ar­ticles.ctp do ktorého umiestníme nasledovný kód

<? echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<rss version="2.0">
<? echo $rss -> channel(null,array('title'=> 'Titulok rss','description'=>'Popis rss')); ?>
<?
        foreach ($articles as $article)
        {
                echo $rss -> item(null,array('title'=>$article['Article']['title'],'author'=>$article['User']['name'],'pubDate'=>$article['Article']['created'],'description'=>$article['Article']['intro_text'],'guid'=>'/articles/'.$article['Article']['seo_link']));
        }
?>
</channel>
</rss>

Týmto máme náš kanál hotový a jeho ukážku môžete napríklad nájsť aj na tomto blog ako rss kanály

Rád uvítam vaše nápady a pripomienky v diskusii k článku.

Povedz o článku aj ostatným - www.pridej.cz

Hodnotenie článku: 35%
Počet hodnotení: 57

zlýdobrý

Komentáre k článku

Nový komentár

  1. Titulok: CakePHP verze
    Autor: Jitka aka poLK
    Vytvorený: 07. 10. 2007 23:23

    Namisto

    var $layout = 'rss/default';

    by jste (se stejnym vysledkem) mel pouzit

    var $layout = 'default';
    var $layoutPath = 'rss';

    Dale mi unika smysl

    var $uses = array('Article','News','Comment');

    kdyz je v kodu prikladu pouzit jen jeden model.

    Nicmene: protoze v kodu je pouzit RssHelper, predpokladam, ze se jedna o CakePHP 1.2 – v tom pripade lze vyuzit Router::parse­Extensions() a RequestHandler­Component – a potreba extra tridy RssController jen pro RSS feeds razem odpada.

  2. Titulok: RE: CakePHP verze
    Autor: Tibor
    Vytvorený: 07. 10. 2007 23:43

    Nasledovný kód opravený

    var $layout = 'default';
    var $layoutPath = 'rss';

    Nasledovný kód bol kopírovaný z kódu blogu, len som zabudol vymazať zvyšné modely, ktoré v ukážke nepoužívam

    var $uses = array('Article','News','Comment');

    Určite by sa to dalo urobiť prostredníctvom Router::parse­Extensions() atd. ale myslím si, že každý kód ma v MVC pevne svoje miesto, preto som štandartne vytvoril controller aj pre rss, i keď pripúšťam, že s vyššie uvedenou funkciou by to bolo úspornejšie, ale tých 7 riadkov kódu navyše pre poriadok sa dá prepáčiť :-)

  3. Titulok: aktualizácia článku
    Autor: Tibor
    Vytvorený: 12. 10. 2007 11:34

    Tak došlo k malej úprave článku. V hlavičke sa musí posielať aj kódovanie, inak to môže spôsobovať problémy, čiže do súboru rss/default.ctp treba pridať nasledovný kód

    <?php header('Content-type: text/xml; charset=utf-8'); ?>
  4. Titulok: Re: aktualizacia clanku
    Autor: Jitka aka poLK
    Vytvorený: 12. 10. 2007 12:15

    To je dan za to, ze nepouzivate preferovane reseni ;) V takovem pripade by vas rss kanal totiz pouzival layout cake/libs/view/tem­plates/layouts/rss/de­fault.cp (nebo vami upraveny v umisteni app/views/lay­outs/rss/defau­lt.ctp), ve kterem je volani

    echo $rss->header();

    see XmlHelper::header()

  5. Titulok: Re: aktualizacia clanku
    Autor: Tibor
    Vytvorený: 13. 10. 2007 11:26

    Niekedy v buducnosti urcite napisem clanok aj o druhej vami zmienovanej moznosti. Myslim si, ze by tu mala byt o tom zmienka…