我是一个完整的Yii新手所以请原谅一个简单的问题。我一直在读各种帖子,找不到有用的东西。我所要做的就是设置一个Yii站点(我已经完成),然后使用我的Main布局链接到静态页面。
以下是我认为相关的三个文件:
在主布局的页脚内,指向静态页面的链接为:
<a href="index.php?r=site/page&view=terms_of_use">Terms of Use</a>
当我点击它时,它会在浏览器地址栏中生成我认为正确的URL:
http://localhost/Company/index.php?r=site/page&view=terms_of_use
但显示的是index.php的内容,而不是terms_of_use.php。我正在使用默认的SiteController。 index.php有什么特别的东西,我不知道,还是我在做别的蠢事?谢谢你的帮助。
视图/站点/ index.php的:
<?php
/* @var $this SiteController */
$this->pageTitle=Yii::app()->name;
?>
<div id="content" class = "clearfix">
<div class="threeColBlock">
<div class="padded">
<h2 class="pageTitle">Heading 1</h2>
<p>Blurb 1</p>
</div>
</div>
<div class="threeColBlock">
<div class="padded">
<h2 class="pageTitle">Heading 2</h2>
<p>Blurb 2</p>
</div>
</div>
<div class="threeColBlock">
<div class="padded">
<h2 class="pageTitle">Heading 3</h2>
<p>Blurb 3</p>
</div>
</div>
</div>
视图/站点/页面/ terms_of_use.php:
<?php
/* @var $this SiteController */
$this->pageTitle=Yii::app()->name . ' - About';
$this->breadcrumbs=array(
'About',
);
?>
<div id="content" class = "clearfix">
<h2 class="pageTitle">Terms of Use</h2>
<div class = "smallText">
<p>
Some legal junk
</p>
</div>
</div>
视图/布局/视图/ main.php:
<?php /* @var $this Controller */ ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="en" />
<!-- blueprint CSS framework -->
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/screen.css" media="screen, projection" />
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/print.css" media="print" />
<!--[if lt IE 8]>
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/ie.css" media="screen, projection" />
<![endif]-->
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/main.css" />
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/form.css" />
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/marketing.css">
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/cssmenu.css" media="screen" />
<title><?php echo CHtml::encode($this->pageTitle); ?></title>
</head>
<body>
<div id="header" class="clearfix">
<div id="logo"><image src="images/logo,56x38,trans(white).gif"></div>
<div id="logoName">Company</div>
<div id="topRight">Bla bla bla</b></div>
</div>
<!-- Menu -->
<div id='cssmenu'>
<ul>
<li class='active'><a href='dummy.com'><span>home</span></a></li>
<li class='has-sub'><a href='#'><span>products</span></a>
<ul>
<li><a href='dummy.com'><span>prod1</span></a></li>
<li><a href='dummy.com'><span>prod2</span></a></li>
<li class='last'><a href='dummy.com'><span>prod3</span></a></li>
</ul>
</li>
<li><a href='dummy.com'><span>about</span></a></li>
<li class='last'><a href='dummy.com'><span>contact</span></a></li>
</ul>
</div>
<div id="mainImageContainer">
<div id="mainImage">
<image src = "images/main_image.jpg">
</div>
</div>
<?php echo $content; ?>
</div><!-- page -->
<div id="footer">
Copyright © 2011 Company. All rights reserved. | <a href="index.php?r=site/page&view=terms_of_use">Terms of Use</a>
</div>
</body>
</body>
</html>
答案 0 :(得分:2)
找到它。我在config / main.php中启用了urlManager。如果我将原始链接更改为以下内容,那么我会得到我想要的内容。
http://localhost/Company/index.php/site/page/view/terms_of_use
答案 1 :(得分:0)
关于您的具体问题,我相信您可能已经忘记了在默认站点控制器中覆盖actions()
方法的步骤 - 尽管这引发了一个问题:您使用的是哪个版本的Yii框架?覆盖已包含在Yii 1.1.12中。
另外,根据yii wiki文章的评论:
如果您碰巧使用accessRules,请不要忘记添加“page”(或 无论你有什么名字,也允许采取行动。
http://www.yiiframework.com/wiki/22/how-to-display-static-pages-in-yii/是关于在Yii中使用静态页面的一篇很棒的文章,其中很大一部分是:
首先,在默认的SiteController(或其他控制器,如果你 比如),覆盖actions()方法如下,
public function actions()
{
return array(
'page'=>array(
'class'=>'CViewAction',
),
);
}
其次,创建一个文件夹protected / views / site / pages。
第三步,将每个静态页面保存为此文件夹下的PHP文件。对于 例如,我们可以将“关于此网站”页面保存为about.php。注意, 这些页面将使用应用程序的默认布局。因此,只有 主要内容需要保存在每个文件中。
我们完成了!为了访问静态页面,例如,关于页面,我们可以使用 以下网址:
http://www.example.com/index.php?r=site/page&view=about
答案 2 :(得分:0)
尽量不要对网址进行硬编码,而是使用createUrl
之类的功能,(还有其他变种)。
当您对网址进行硬编码时,您可能会遇到问题,createUrl
会考虑您的urlManager配置,并相应地生成网址,因此当您进行更改时,您无需转到每个视图并更改网址再次。
您可以像这样使用它:
<a href="<?php echo Yii::app()->createUrl('/site/page',array('view'=>'terms_of_use')); ?>">About</a>
或使用CHtml::link
:
echo CHtml::link('About',array('/site/page', 'view'=>'temrs_of_use'));