PHP - 将脚本注入到

时间:2014-07-17 15:05:18

标签: php function str-replace

遇到一些棘手的情况,我似乎无法用手指缠绕。基本上我想要实现的是能够在不同的页面上注入不同的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('jquery.min');,请正确输出。

我现在要做的是将结束</head>标记替换为上述函数的输出。如果我执行以下操作,那么它可以正常工作:

ob_start();
require_once("models/header.php");
$contents = ob_get_contents();
ob_end_clean();

echo str_replace('</head>', addScript('jquery.js') . '</head>', $contents);

但是我希望这会更加动态,因为我需要在每个页面上注入多个脚本,如下所示:

addScript('script.js');
addScript('script2.js');
addScript('script3.js');

然后我考虑创建一个带有foreach循环的getHead()函数,然后返回str_replace,但这不起作用。

任何人都可以指导我的方向动态注入尽可能多的脚本并输出头部的最后一点吗?

3 个答案:

答案 0 :(得分:3)

为什么不这样做:

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;
    }
}

然后在项目的任何地方:

Assets::add_style('path/to/style.css');
Assets::add_script('path/to/jquery.js');

在header.php中:

<head>
    <!-- other header stuff -->
    <?php echo Assets::get_styles(); ?>
    <?php echo Assets::get_scripts(); ?>
</head>

更方便,你可以扩展课程以做更多花哨的东西。

免责声明:关于使用静态变量存在很多争论,因为它们看起来像全局变量。我同意,但无论你使用什么样的框架,这都是快速而肮脏的。你也可以使变量oldschool实例变量,但是你也必须将assets对象传递给header.php。

答案 1 :(得分:0)

以下是什么问题??

echo str_replace('</head>',
    addScript('jquery.js').
    addScript('jquer1.js').
    addScript('jquer2.js').
    addScript('jquer3.js').
    '</head>', $contents);

答案 2 :(得分:0)

如何将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('script.js');

此方法保持输出缓冲区的运行,您可以随时在脚本中对其进行操作。就像使用addScript()

一样