Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-将脚本注入<;头>;_Php_Function_Str Replace - Fatal编程技术网

PHP-将脚本注入<;头>;

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/'

遇到了一个有点棘手的情况,我似乎无法控制自己。基本上,我试图实现的是能够在不同的页面上注入不同的Javascript文件

一些简单随机的例子:

  • 第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=”“
属性中,而不是添加到
啊,是的。。。当然愚蠢的我。。。我想我需要一些咖啡;)在我的回答中改变了它;)