我正在尝试创建自己的xml站点地图。一切都做好了,除了我认为最简单的那部分。如何获得网站上所有页面的列表?我在/site文件夹和其他几个文件夹中有很多视图。有没有一种方法显式地请求他们的URL,或者可能通过控制器?
我不想使用扩展
发布于 2013-03-04 13:32:29
可以使用反射迭代所有控制器的所有方法:
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");
}
}
}
}发布于 2013-01-14 15:06:02
你需要知道你想在你的sitemap.xml中包含哪些内容,我不认为你真的想把所有的页面都包括在你的sitemap.xml中,或者你真的想包括像site.com/文章/编辑/1这样的内容吗?
也就是说,您可能只需要控制器中的view操作的结果。事实上,你需要知道你想要索引的是什么。
不要从控制器/操作/视图的角度来考虑,而是考虑您希望索引的系统中的资源、它们是文章或页面,它们都在您的数据库中或以某种方式存储,因此您可以列出它们,并且它们有标识它们的URI,获取URI是一个调用几个函数的问题。
发布于 2013-03-04 14:49:55
有两种可能性-
案例1:
您正在运行一个静态网站,然后您可以在一个受保护的文件夹/视图/站点/页面http://www.yiiframework.com/wiki/22/how-to-display-static-pages-in-yii/中找到所有的HTML。
案例2:
网站是动态的。生成和重新生成站点地图之类的任务可以分为背景任务。
通过使用- WGET、GET或lynx命令,可以通过在linux中模拟浏览器来实现后台访问。
或者,您可以将一个CConsoleCommand.创建为CronController。如何在YII中使用命令,见下面的链接- http://tariffstreet.com/yii/2012/04/implementing-cron-jobs-with-yii-and-cconsolecommand/。
Sitemap是一个XML,它列出了站点的URL。但它做的不止这些。它帮助您可视化网站的结构,您可能有
在进行有用的扩展时,可以在设计之前考虑以上几点。
像Wordpress这样的框架提供了生成分类站点地图的方法。因此,每个页面的元数据都是从以前存储的,并使用它发现的元数据并对页面进行分组。
@Pavle建议的解决方案是好的,应该是可行的。考虑到可能存在部分视图,并且您可能希望或不希望将它们作为单独的链接列出。
因此,在创建扩展时要花费多少精力也取决于其中的一些因素。
您可以要求用户列出config中的所有变量,然后从那里开始,这是不错的或,您必须使用反射和解析页面以及寻找regex等技术对页面和列表进行分组。
对于基于模块名称的前类,您可以先对它们进行分组,模块内的控制器可以形成子组。
https://stackoverflow.com/questions/14315970
复制相似问题