【问题标题】:Linking to a static page链接到静态页面
【发布时间】:2013-02-26 18:31:59
【问题描述】:

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

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

  • index.php: 我在主页上显示为主要布局内容的视图
  • terms_of_use.php:我试图在主布局中出现但未成功的视图
  • ma​​in.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 有什么我不知道的特别之处,还是我在做其他愚蠢的事情?感谢您的帮助。

views/site/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>

views/site/pages/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>

views/layouts/views/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>

【问题讨论】:

    标签: php yii


    【解决方案1】:

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

    http://localhost/Company/index.php/site/page/view/terms_of_use 
    

    【讨论】:

      【解决方案2】:

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

      另外,根据 yii wiki 文章中的 cmets:

      如果您碰巧使用了 accessRules,请不要忘记添加“页面”(或 无论您使用什么名称)也可以执行操作。

      http://www.yiiframework.com/wiki/22/how-to-display-static-pages-in-yii/ 是一篇关于在 Yii 中使用静态页面的好帖子,其中大部分内容:

      首先,在默认的 SiteController(或其他控制器,如果你 like),重写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
      

      【讨论】:

      • 是的,我读过那篇文章。当前版本的 yii 附带了 action() 覆盖已经放置在控制器中。静态页面的目录结构和位置也是开箱即用的,就像我上面描述的那样。
      【解决方案3】:

      尽量不要对 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'));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-22
        • 2015-06-17
        • 2021-08-13
        • 1970-01-01
        相关资源
        最近更新 更多