【问题标题】:Cakephp Plugin to generate sitemapCakephp 插件生成站点地图
【发布时间】:2014-03-14 06:05:44
【问题描述】:

我正在使用 Cakephp 2.4.3 。我已经读到“有 CakePHP 插件可以为您生成站点地图。这样您的 sitemap.xml 文件将根据需要动态创建并且将永远是最新的。” .我已经搜索过,但我发现的都是旧的 cakephp 版本,它没有用,因为它们只会导致错误。

还有什么好的插件吗?

【问题讨论】:

  • 自己做,这是最好的建议。

标签: cakephp seo sitemap


【解决方案1】:

有些插件肯定存在:

  1. https://github.com/sdevore/cakephp-sitemap-plugin
  2. https://github.com/smarek/Croogo-Sitemap-2.0
  3. https://github.com/webtechnick/CakePHP-Seo-Plugin

这些是旧的导致错误的吗?由于每个 CakePHP 站点都可能与下一个站点完全不同,我不确定是否会存在一刀切的解决方案。

如果您最终编写自己的站点地图实现,则主要取决于您的站点是否具有:

  • 大量数据库驱动的内容,几乎没有控制器/操作(如典型的 WordPress 风格的网站)
  • 大量控制器/动作驱动的内容(更像是一个网络应用程序)

在第一种情况下,您希望对内容执行查找,并将结果注入到这样的 xml 模板中:http://bakery.cakephp.org/articles/masterkeedu/2008/08/26/automatically-generate-dynamic-sitemaps

对于第二种情况,以下可能会有所帮助:我用于开发/测试的组件,其中列出了所有控制器及其方法:

<?php //File: app/Controller/Component/CtrlComponent.php
// Component rewritten for Cake2.x, original from : http://cakebaker.42dh.com/2006/07/21/how-to-list-all-controllers/
class CtrlComponent extends Component {
    /**
     * Return an array of Controllers and their methods.
     * The function will exclude ApplicationController methods
     * @return array
     */
    public function get() {
        $aCtrlClasses = App::objects('controller');
        foreach ($aCtrlClasses as $controller) {
            if ($controller != 'AppController') {
                // Load the controller
                App::import('Controller', str_replace('Controller', '', $controller));
                // Load its methods / actions
                $aMethods = get_class_methods($controller);
                foreach ($aMethods as $idx => $method) {
                    if ($method{0} == '_') {
                        unset($aMethods[$idx]);
                    }
                }
                // Load the ApplicationController (if there is one)
                App::import('Controller', 'AppController');
                $parentActions = get_class_methods('AppController');
                $controllers[$controller] = array_diff($aMethods, $parentActions);
            }
        }
        return $controllers;
    }
}

实际上,完整的站点地图可能会同时使用这两种方法,并且您需要考虑您网站的公共和“私人”区域之间的区别(例如,不包括管理员前缀)..

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 2017-11-29
    • 1970-01-01
    • 2015-08-11
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多