Bonjour à tous,
Je revies sur CakePHP, ouou!! :o)
J'avais un site pour une amie en suivant les tutos de Grafikart.
J'ai mis en place un flux rss, et ca fonctionne (le site est encore en développement...)
Texte du lien

Maintenant, je fait fait un autre site pour mon école et j'ai aussi besoin d'un flux RSS et là ca fonctionne pas .o(
La diférence, c'est que je n'ai pas de page index. C'est a dire

www.monsite.ch/educations/index

C'est en fait un intranet ou il faut etre identifier pour acceder au page.
Donc des mes vues, j'ai quasiment que des pages member_edit.ctp.

J'ai donc deux roles, les 'admin' et les 'member'. Donc quand un utilisateur est authentifié comme 'member', il sera concerné par les pages du controller educations, ''member_index.ctp' et 'member_edit.ctp'.

Je prends l'exemple du controller 'educations', car c'est là que j'ai mon problème et je me demande si ce n'est à cause du fait que j'utilise les roles.

Donc mon problème, aucun flux n'est affiché!!

Si vous pouviez m'aider ca serait sympa.

Voici comment j'ai fait.
Attention, le flux est public! il faut que l'on doivent s'authentifier pour le lire, forcément.

Dans mon fichier /config/routes.php, j'ai ajouté ceci

Router::parseExtensions('rss');

Dans /View/Layout/rss/default.ctp, j'ai ceci

<?php
if (!isset($documentData)) {
    $documentData = array(
        'xmlns:dc' => 'http://purl.org/dc/elements/1.1/'
    );
}
if (!isset($channelData)) {
    $channelData = array();
}
if (!isset($channelData'title'])) {
    $channelData'title'] = $title_for_layout;
}
$channel = $this->Rss->channel(array(), $channelData, $content_for_layout);
echo $this->Rss->document($documentData,$channel);

Dans mon controller 'educations', j'ai ajouté ce code:

/**
    * Feed RSS
    **/
    function feed(){
        if($this->RequestHandler->isRss()){
            $d'educations'] = $this->Education->find('all',array(
                'limit'=>20,
                'order'=>'Education.until DESC',
                'conditions' => array(
                    'Education.user_id'=>1,
                    'Education.active'=>1
                )
            ));
// debug($d);
            return $this->set($d);
        }
    }

Le debug($d) affiche bien ce que j'extrait de la base de donnée.

Aussi, au dbut du controller, j'ai aussi ceci

// Pour le flux RSS
    public $components = array('RequestHandler');

Si non, je n'ai rien fait de plus dans le controller.

Ensuite j'ai créé un fichier dans la vues Educations

/View/Educations/rss/feed.ctp

et voici son contenu

<?php

debug("3");
$this->set('channelData', array(
        'title' => __('Derniers EDUC'),
        //'link' => $this->Html->url(array('controller'=>'educations','action'=>'index'), true), // Le true ajout l'URL absolue
// 'link' => $this->Html->url('http://www.google.ch'), true),
        'description' => __("Notre flux RSS"),
        'language' => 'fr-fr')
    );
    foreach($educations as $k=>$v){ $v = current($v);
        debug($v);
        echo $this->Rss->item(array(), array(
            'title' => $v'name'],
            //'link' => $this->Html->url($v'link'], true),
 // 'link' => $this->Html->url('http://www.hello-web.net', true),
            'guid' => array('url' => $this->Html->url($v'link'], true), 'isPermaLink' => 'true'), // Le lien permanent
            'description' => $v'location'],
           // 'pubDate' => $v'created']
            'pubDate' => $v'until']
        ));
    }

Le premier truc qui me surprends, c'est que le

debug("3");

Ne s'affiche pas!!!

Le deuxième, j'ai bien un page flux rss, mais rien n'est affiché, alors que

debug($d);

afiche bien un réaultat.

Ai-je oublié de faire quelque chose?
Es-ce un problème de droit?
Que pourriez-vous me dire?

Milles mercis

2 réponses


Ok j'ai trouvé

cette ligne me causait un problème

'guid' => array('url' => $this->Html->url($v'link'], true), 'isPermaLink' => 'true'), // Le lien permanent

En effet
$v'link']
n'existe pas.

Je pense que 'guid', n'est pas obligatoire, si je ne mets pas cette ligne? J'ai pas besoin de lien.

Salut, si tu as résolu ton probleme, valide ta propre réponse ;)