在Yii中从控制器显示自定义HTML

时间:2013-12-13 10:28:57

标签: javascript php yii clientscript

我们正在将Yii用于我们的项目。我试图有条件地在标题中注册两个JS脚本/资产:一个用于IE8,另一个用于其他浏览器 - 使用条件注释(例如<!--[if lte IE 8]>)。

但是,我只熟悉Yii::app()->clientScript->registerScriptFileYii::app()->clientScript->registerScript,其中没有一个公开了使用条件注释包围注册脚本的方法。

我尝试在控制器操作开始时直接执行echo

echo '<!--[if lte IE 8]><script src="'.$assetsPath . '/charts/r2d3.js'.'" charset="utf-8"></script><![endif]-->';

但是,当我查看源代码时,脚本会显示在文档的顶部(甚至在<html>之前)。如果可能,我想在<head>中显示。

3 个答案:

答案 0 :(得分:1)

您可以按照以下方式设置此项,

转到 - &gt; views-&gt; layouts-&gt; main.php

简单地添加您需要的内容,

<!DOCTYPE html>
[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]
[if IE 7]><html class="no-js lt-ie9 lt-ie8"> <![endif]
[if IE 8]><html class="no-js lt-ie9"> <![endif]
[if gt IE 8]><html class="no-js"> <![endif]
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>

或者如果您需要在控制器中检查浏览器版本并附加脚本。这样也行。

在控制器中定义它,

public function beforeRender( $view ) {
//condition to check the browser type and version
if($browser = 'ie' && $version = '8') {
    Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/script.js');
    return true;
}
}

//没有测试过第二个选项。但应该工作。

您可以使用以下任意一种方式检查浏览器类型和版本,

<?php
echo $_SERVER['HTTP_USER_AGENT'];

$browser = get_browser(null, true);
print_r($browser);
?>

点击此链接http://php.net/manual/en/function.get-browser.php#101125

答案 1 :(得分:1)

您可以使用以下扩展程序

http://www.yiiframework.com/extension/ewebbrowser/

我把文件放在组件中。然后就在代码中做

$b = new EWebBrowser();
if($b->platform == "Internet Explorer" && $b->version == "8.0") {//you could explode version at the . I guess, however not sure if there is even a version 8.x or whatever
    Yii::app()->clientScript->registerScriptFile("path/to/script");
} else {
    Yii::app()->clientScript->registerScriptFile("path/to/otherscript");
}

我使用当前的IE,Firefox和Chrome浏览器进行了测试。我无法确保这适用于这些浏览器的其他版本。它已经两年了,但似乎仍然有效。

答案 2 :(得分:0)

这不是最佳方法,但您可以使用以下代码实现目标:

如果您想要特定控制器的上述条件语句,则:

在你的布局/ main.php下

<?php if (Yii::app()->getController()->getId() == 'Your Controller Name'): ?>
<!--[if lt IE 8]>
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/ie.css" media="screen, projection" />
<![endif]-->
<?php endif; ?>

如果您想要特定控制器操作的上述条件语句,则:

在你的布局/ main.php下

<?php if (Yii::app()->getController()->getId() == 'Your Controller Name' && Yii::app()->getController()->getAction()->getId() == 'Your Action Name'): ?>
<!--[if lt IE 8]>
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/ie.css" media="screen, projection" />
<![endif]-->
<?php endif; ?>