Bonjour à vous,

j'ouvre ce nouveau topic, car je vais bientôt ne plus avoir de cheveux sur la tête.
J'ai mis en place un sitemap pour mon site, en local il fonctionne très bien, mais dès que je le met sur mon serveur distant il ne fonctionne plus j'ai ceci :

<response>
<name>An Internal Error Has Occurred.</name>
<message>/sitemap.xml</message>
</response>

Code du controller :

class SitemapsController extends AppController{
    var $name = 'Sitemaps';
    var $uses = array('Post', 'Page');
    var $helpers = array('Time');
    var $components = array('RequestHandler');

    function index(){
        $this->layout="default";
        $this->set('posts', 
            $this->Post->find(
                'all',array(
                    'conditions' => 'online >= 1',
                    'fields' => array(
                        'modified','id','slug'
                    )
                )
            )
        );
        $this->set('pages', 
            $this->Page->find(
                'all', array(
                    'conditions' => 'online >= 1',
                    'fields' => array(
                        'modified','id','slug'
                    )
                )
            )
        );
        //debug logs will destroy xml format, make sure were not in drbug mode
        Configure::write ('debug', 0);
    }
}

Le code de ma vue :

<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<url>
<loc><?php echo Router::url('/',true); ?></loc>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>

<!-- static pages -->

<?php foreach ($pages as $page):?>
<url>

<loc><?php echo Router::url(array('controller'=>'pages','action'=>'show',"slug"=>Inflector::slug($page"Page"]"slug"],"-"),"id"=>Inflector::slug($page"Page"]"id"],"-")),true); ?></loc>
<lastmod><?php echo $this->Time->toAtom($page'Page']'modified']); ?></lastmod> 
<priority>0.8</priority>
</url>

<?php endforeach; ?>

<!-- posts-->

<?php foreach ($posts as $post):?>

<url>
<loc><?php echo Router::url(array('controller'=>'posts','action'=>'show',"slug"=>Inflector::slug($post"Post"]"slug"],"-"),"id"=>Inflector::slug($post"Post"]"id"],"-")),true); ?></loc>
<lastmod><?php echo $this->Time->toAtom($post'Post']'modified']); ?></lastmod> 
<priority>0.8</priority>
</url>

<?php endforeach; ?>

</urlset>

J'ai bien sur modifié mon fichier routes.php.
Si quelqu'un aurait une idée car là je ne sais plus du tout ou je dois chercher.

Merci à vous tous pour votre aide.

3 réponses


J'imagine que tu as suivi le tuto dispo sur Bakery.

As-tu bien déclaré l'ajout des fichiers XML dans tes routes via :

Router::parseExtensions('rss','xml');

Sans oublier d'ajouter la route vers le sitemap via :

Router::connect('/sitemap', array('controller' => 'sitemaps', 'action' => 'index'));

Es-tu certain de ne pas avoir oublié de créer la vue default.ctp dans ton dossier /app/views/layouts/xml/ et qui contient :

<?php header('Content-type: text/xml'); ?> 
<?php echo $content_for_layout; ?>

Sinon ton code à celui du Tuto, donc je ne vois pas.
Peut-être un souci de .htaccess ou de route, étant donné que le message "An Internal Error Has Occurred" est souvent le signe d'une erreur 500.

Peut-être faut-il forcer le XML dans la fonction index du controller via :

$this->RequestHandler->respondAs('xml');
TraxX
Auteur

Merci d'avoir pris le temps de me répondre, oui j'ai bien tout ça en place.
Franchement je comprend pas, pour un autre site cela fonctionne, les sources sont les mêmes, et là cela ne fonctionne pas.

Je deviens chèvre...

Si cela fonctionne en local mais pas sur ton serveur, ça réduit quand même le champ de recherche à certains points comme les .htaccess, la version de PHP utilisée ou ce genre de détails.