Cakephp插件生成站点地图

时间:2014-03-14 06:05:45

标签: cakephp seo sitemap

我正在使用Cakephp 2.4.3。我已经读过"有CakePHP插件可以为您生成站点地图。这样,您的sitemap.xml文件将按需动态创建将始终保持最新。" 。我已经搜索了但我发现的所有内容都来自旧的cakephp版本,这个版本没有用,因为它们只会导致错误。

还有一个很好的插件吗?

1 个答案:

答案 0 :(得分:0)

肯定存在一些插件:

  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
  4. 这些是旧的,导致错误的吗?由于每个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;
        }
    }
    

    实际上,完整的站点地图可能会同时使用这两种方法,您需要考虑公共和#34;私有&#34;之间的差异。您网站的某些区域(例如,不包括管理员前缀)..