2

我是一个完整的 Yii 新手,所以请原谅一个简单的问题。我一直在阅读各种帖子,但找不到任何有用的东西。我要做的就是设置一个 Yii 站点(我已经完成了),然后使用我的主布局链接到一个静态页面。

以下是我认为相关的三个文件:

  • index.php:我在主页上显示的视图,作为主布局的内容
  • terms_of_use.php:我没有成功尝试出现在主布局中的视图
  • main.php:我的主布局

在主布局的页脚中,静态页面的链接是:

<a href="index.php?r=site/page&view=terms_of_use">Terms of Use</a>

当我点击它时,它会在浏览器地址栏中生成我认为正确的网址:

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 &copy 2011 Company. All rights reserved. | <a href="index.php?r=site/page&view=terms_of_use">Terms of Use</a>
    </div>

</body>
</body>
</html>
4

3 回答 3

2

找到了。我在 config/main.php 中启用了 urlManager。如果我将原始链接更改为以下链接,那么我会得到我想要的。

http://localhost/Company/index.php/site/page/view/terms_of_use 
于 2013-01-30T19:05:30.497 回答
0

尽量不要对 url 进行硬编码,而是使用 , 之类的函数createUrl(它还有其他变体)。

当您对 url 进行硬编码时,可能会出现您面临的问题,createUrl考虑到您的 urlManager 配置,并相应地生成一个 url,因此当您进行更改时,您不必转到每个视图并再次更改 url。

你可以像这样使用它:

<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'));
于 2013-01-31T03:48:21.467 回答
0

关于您的具体问题,我相信您可能已经忘记了actions()在默认站点控制器中覆盖该方法的步骤 - 尽管这引发了一个问题:您使用的是哪个版本的 Yii 框架?覆盖已经包含在 Yii 1.1.12 中。

另外,根据对该 yii wiki 文章的评论:

如果您碰巧使用了 accessRules,请不要忘记将“页面”(或您拥有的任何名称)添加到允许的操作中。

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。请注意,这些页面将使用应用程序的默认布局。因此,每个文件中只需要保存主要内容。

我们完了!要访问静态页面,例如 about 页面,我们可以使用以下 URL:

http://www.example.com/index.php?r=site/page&view=about
于 2013-01-30T18:22:45.990 回答