首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所有的“页”都在YII?

所有的“页”都在YII?
EN

Stack Overflow用户
提问于 2013-01-14 09:37:49
回答 5查看 1.8K关注 0票数 8

我正在尝试创建自己的xml站点地图。一切都做好了,除了我认为最简单的那部分。如何获得网站上所有页面的列表?我在/site文件夹和其他几个文件夹中有很多视图。有没有一种方法显式地请求他们的URL,或者可能通过控制器?

我不想使用扩展

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-04 13:32:29

可以使用反射迭代所有控制器的所有方法:

代码语言:javascript
复制
Yii::import('application.controllers.*');
$urls = array();

$directory = Yii::getPathOfAlias('application.controllers');
$iterator = new DirectoryIterator($directory);
foreach ($iterator as $fileinfo)
{
    if ($fileinfo->isFile() and $fileinfo->getExtension() == 'php')
    {
        $className = substr($fileinfo->getFilename(), 0, -4); //strip extension
        $class = new ReflectionClass($className);

        foreach ($class->getMethods(ReflectionMethod::IS_PUBLIC) as $method)
        {
            $methodName = $method->getName();
            //only take methods that begin with 'action', but skip actions() method
            if (strpos($methodName, 'action') === 0 and $methodName != 'actions')
            {   
                $controller = lcfirst(substr($className, 0, strrpos($className, 'Controller')));
                $action = lcfirst(substr($methodName, 6));
                $urls[] = Yii::app()->createAbsoluteUrl("$controller/$action");
            }
        }
    }
}
票数 9
EN

Stack Overflow用户

发布于 2013-01-14 15:06:02

你需要知道你想在你的sitemap.xml中包含哪些内容,我不认为你真的想把所有的页面都包括在你的sitemap.xml中,或者你真的想包括像site.com/文章/编辑/1这样的内容吗?

也就是说,您可能只需要控制器中的view操作的结果。事实上,你需要知道你想要索引的是什么。

不要从控制器/操作/视图的角度来考虑,而是考虑您希望索引的系统中的资源、它们是文章或页面,它们都在您的数据库中或以某种方式存储,因此您可以列出它们,并且它们有标识它们的URI,获取URI是一个调用几个函数的问题。

票数 1
EN

Stack Overflow用户

发布于 2013-03-04 14:49:55

有两种可能性-

案例1:

您正在运行一个静态网站,然后您可以在一个受保护的文件夹/视图/站点/页面http://www.yiiframework.com/wiki/22/how-to-display-static-pages-in-yii/中找到所有的HTML。

案例2:

网站是动态的。生成和重新生成站点地图之类的任务可以分为背景任务。

通过使用- WGETGETlynx命令,可以通过在linux中模拟浏览器来实现后台访问。

或者,您可以将一个CConsoleCommand.创建为CronController。如何在YII中使用命令,见下面的链接- http://tariffstreet.com/yii/2012/04/implementing-cron-jobs-with-yii-and-cconsolecommand/

Sitemap是一个XML,它列出了站点的URL。但它做的不止这些。它帮助您可视化网站的结构,您可能有

  • 类别
  • 子类别。

在进行有用的扩展时,可以在设计之前考虑以上几点。

Wordpress这样的框架提供了生成分类站点地图的方法。因此,每个页面的元数据都是从以前存储的,并使用它发现的元数据并对页面进行分组。

@Pavle建议的解决方案是好的,应该是可行的。考虑到可能存在部分视图,并且您可能希望或不希望将它们作为单独的链接列出。

因此,在创建扩展时要花费多少精力也取决于其中的一些因素。

您可以要求用户列出config中的所有变量,然后从那里开始,这是不错的,您必须使用反射和解析页面以及寻找regex等技术对页面和列表进行分组。

对于基于模块名称的前类,您可以先对它们进行分组,模块内的控制器可以形成子组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14315970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档