PHP-将脚本注入<;头>;
遇到了一个有点棘手的情况,我似乎无法控制自己。基本上,我试图实现的是能够在不同的页面上注入不同的Javascript文件 一些简单随机的例子:PHP-将脚本注入<;头>;,php,function,str-replace,Php,Function,Str Replace,遇到了一个有点棘手的情况,我似乎无法控制自己。基本上,我试图实现的是能够在不同的页面上注入不同的Javascript文件 一些简单随机的例子: 第1页:导入jquery.js 第2页:导入mootools.js 我所做的是创建了一个名为addScript()的函数,如下所示: function addScript($file) { $script = ''; $script .= '<script src="'. REL_PATH . '/path/to/file/'
- 第1页:导入jquery.js
- 第2页:导入mootools.js
addScript()
的函数,如下所示:
function addScript($file) {
$script = '';
$script .= '<script src="'. REL_PATH . '/path/to/file/' . $file . '">';
$script .= '</script>';
return $script;
}
但是,我希望这是一个更具动态性的页面,因为可能需要在每个页面上注入多个脚本,如下所示:
addScript('script.js');
addScript('script2.js');
addScript('script3.js');
然后我想创建一个getHead()
函数,其中包含一个foreach循环,并在那里返回str\u replace
,但这不起作用
有谁能指导我动态注入所需的脚本并输出头部的最后一位吗?下面的问题是什么
echo str_replace('</head>',
addScript('jquery.js').
addScript('jquer1.js').
addScript('jquer2.js').
addScript('jquer3.js').
'</head>', $contents);
echo str_替换(“”,
addScript('jquery.js')。
addScript('jquery1.js')。
addScript('jquery2.js')。
addScript('jquery3.js')。
“$目录);
以下内容有什么问题
echo str_replace('</head>',
addScript('jquery.js').
addScript('jquer1.js').
addScript('jquer2.js').
addScript('jquer3.js').
'</head>', $contents);
echo str_替换(“”,
addScript('jquery.js')。
addScript('jquery1.js')。
addScript('jquery2.js')。
addScript('jquery3.js')。
“$目录);
为什么不这样做:
class Assets {
private static $css = array();
private static $js = array();
static function add_style($path) {
self::$css[] = $path;
}
static function add_script($path) {
self::$js[] = $path;
}
static function get_styles() {
$output = '';
foreach(self::$css as $path) {
$ouput .= '<link rel="stylesheet" href="'. $path .'" />' . "\n";
}
return $ouput;
}
static function get_scripts() {
$output = '';
foreach(self::$js as $path) {
$ouput .= '<script type="text/javascript" src="'. $path .'"></script>' . "\n";
}
return $ouput;
}
}
在header.php中:
<head>
<!-- other header stuff -->
<?php echo Assets::get_styles(); ?>
<?php echo Assets::get_scripts(); ?>
</head>
更方便,并且您可以扩展类来做更多有趣的事情
免责声明:关于使用静态变量有很多争论,因为它们看起来像全局变量。我同意,但这是快速和肮脏的,无论你使用什么样的框架。也可以将变量设为oldschool instance vars,但是还必须将assets对象传递给header.php。为什么不这样做:
class Assets {
private static $css = array();
private static $js = array();
static function add_style($path) {
self::$css[] = $path;
}
static function add_script($path) {
self::$js[] = $path;
}
static function get_styles() {
$output = '';
foreach(self::$css as $path) {
$ouput .= '<link rel="stylesheet" href="'. $path .'" />' . "\n";
}
return $ouput;
}
static function get_scripts() {
$output = '';
foreach(self::$js as $path) {
$ouput .= '<script type="text/javascript" src="'. $path .'"></script>' . "\n";
}
return $ouput;
}
}
在header.php中:
<head>
<!-- other header stuff -->
<?php echo Assets::get_styles(); ?>
<?php echo Assets::get_scripts(); ?>
</head>
更方便,并且您可以扩展类来做更多有趣的事情
免责声明:关于使用静态变量有很多争论,因为它们看起来像全局变量。我同意,但这是快速和肮脏的,无论你使用什么样的框架。您也可以将变量设为oldschool实例vars,但随后还必须将assets对象传递给header.php。将
ob_start()放进去怎么样
在header.php
中。那么您的功能是:
function addScript($file) {
$script = '<script src="'. REL_PATH . '/path/to/file/' . $file . '"></script>';
echo str_replace('</head>', addScript('jquery.js') . '</head>', ob_get_clean());
}
此方法保持输出缓冲区运行,您可以在以后的脚本中随时对其进行操作。就像您使用
addScript()
一样,您如何放置ob_start()
在header.php
中。那么您的功能是:
function addScript($file) {
$script = '<script src="'. REL_PATH . '/path/to/file/' . $file . '"></script>';
echo str_replace('</head>', addScript('jquery.js') . '</head>', ob_get_clean());
}
此方法保持输出缓冲区运行,您可以在以后的脚本中随时对其进行操作。就像您使用
addScript()
一样,忘记这样的黑客;只需将您的头生成代码设置为可配置的,以便在所有情况下都输出所需的标记。您提出的解决方案(尽管有点粗糙)应该可以按原样工作。实际上,您每次都只是在为标记做准备。或者,您可以将脚本数组传递给addScript函数……我也不认为有问题。只需传递一个带有scrips的数组,并在循环中使用替换函数;只需将您的头生成代码设置为可配置的,以便在所有情况下都输出所需的标记。您提出的解决方案(尽管有点粗糙)应该可以按原样工作。实际上,您每次都只是在为标记做准备。或者,您可以将脚本数组传递给addScript函数……我也不认为有问题。只需传递一个带有scrips的数组,并在循环中使用替换函数。谢谢,就像ab absolute charm一样工作。我唯一改变的是我把$path
添加到src=”“
属性中,而不是添加到
啊,是的。。。当然愚蠢的我。。。我想我需要一些咖啡;)在我的回答中改变了它;)谢谢,工作起来很有魅力。我唯一改变的是我把$path
添加到src=”“
属性中,而不是添加到
啊,是的。。。当然愚蠢的我。。。我想我需要一些咖啡;)在我的回答中改变了它;)