如何为CakePHP创建站点地图?

如何为CakePHP创建站点地图?,cakephp,sitemap,Cakephp,Sitemap,我想创建一个站点地图,但我对站点地图的使用知之甚少。我使用CakePHP。google和guides上有很多软件,但我还是想问一下,为CakePHP创建网站地图的简单方法 我将网站上传到服务器上,它不依赖本地主机。这里有一个快速的“n”脏示例供您使用并根据需要进行调整: 在控制器中: public $components = array('RequestHandler'); public function sitemap() { Configure::write('debug', 0)

我想创建一个站点地图,但我对站点地图的使用知之甚少。我使用CakePHP。google和guides上有很多软件,但我还是想问一下,为CakePHP创建网站地图的简单方法


我将网站上传到服务器上,它不依赖本地主机。

这里有一个快速的“n”脏示例供您使用并根据需要进行调整:

在控制器中:

public $components = array('RequestHandler');

public function sitemap()
{
    Configure::write('debug', 0);

    $articles = $this->Article->getSitemapInformation();

    $this->set(compact('articles'));
    $this->RequestHandler->respondAs('xml');
}
您的“文章”模型:

视图:


每周的

这是一个好的开始,现在只需添加:

路由器::解析扩展('xml')到routes.php

从这里开始,您希望有一条如下路线:

Router::connect('/sitemap',array('controller'=>'posts'…,'ext'=>'xml'))
将site.com/sitemap.xml指向站点地图所在的控制器/操作


创建一个具有正确标题的xml布局,并将视图文件移动到views/posts/xml/file.ctp,甚至更好:添加
Router::parseExtensions('xml')
到routes.php(无键入)

您可以按照以下步骤操作:

第一步。为XML站点地图视图创建布局文件sitemap.ctp

<?php
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
echo $this->fetch('content');
echo '</urlset>';
?>
第三步。为包含XML标记的索引操作创建视图文件:index.ctp

<url>
    <loc><?= $url; ?></loc>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
</url>
<url>
    <loc><?= $url; ?>contact-us</loc>
    <priority>0.5</priority>
</url>
<url>
    <loc><?= $url; ?>above-us</loc>
    <priority>0.5</priority>
</url>
<url>
    <loc><?= $url; ?>service</loc>
    <priority>0.5</priority>
</url>
<?php foreach($osts as $post){?>
<url>
    <loc><?php echo $url.'blog/'.$post['slug'] ?></loc>
</url>
<?php } ?>

对于详细的教程,您可以一步一步地学习如何在CakePHP中创建XML站点地图。

记住添加public´$components=array('RequestHandler');在您的控制器(或AppController.php,用于应用程序范围的访问)中使用。请检查我的问题,我哪里做错了,还有sitemap.xml空白文件?请检查我的问题,我哪里做错了,还有sitemap.xml空白文件?
<?php
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
echo $this->fetch('content');
echo '</urlset>';
?>
class SitemapsController extends AppController
{
    public function index()
    {
        $this->viewBuilder()->setLayout('sitemap');
        $this->RequestHandler->respondAs('xml');
        
        $postTbl = TableRegistry::getTableLocator()->get('Posts');
        $posts = $postTbl->find()->select(['slug']);
        $this->set('posts', $posts);

        //Get the base URL of your website
        $url = Router::url('/', true);
        $this->set('url', $url);

    }

}   
<url>
    <loc><?= $url; ?></loc>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
</url>
<url>
    <loc><?= $url; ?>contact-us</loc>
    <priority>0.5</priority>
</url>
<url>
    <loc><?= $url; ?>above-us</loc>
    <priority>0.5</priority>
</url>
<url>
    <loc><?= $url; ?>service</loc>
    <priority>0.5</priority>
</url>
<?php foreach($osts as $post){?>
<url>
    <loc><?php echo $url.'blog/'.$post['slug'] ?></loc>
</url>
<?php } ?>
Router::scope('/', function (RouteBuilder $routes) {
    // Other routes.
    $routes->connect('/sitemap.xml',['controller'=>'Sitemaps','action'=>'index']);
});