在PHP

时间:2017-06-25 08:06:26

标签: javascript php css html5 codeigniter

我正在使用Codeigniter并编写了一个方法来创建css / js链接,连接它们然后将它们传递给我的视图。它之前一直在工作,直到我决定用最新的CI版本创建一个干净的项目副本,现在它还没有用。

连接数据的方法部分如下:

foreach ($header_css as $item) {
   $str .= '<link rel="stylesheet" href="'. base_url() . $item . '" type="text/css" />';
}

JS文件有一个类似的文件。当打印上一段代码时,我得到一个空字符串,所以我决定使用htmlentities:

foreach ($header_css as $item) {
   $str .= htmlentities('<link rel="stylesheet" href="'. base_url() . $item . '" type="text/css" />');
}

它有效...部分。我的意思是,如果我在此处打印带有链接的字符串,但现在当我将字符串传递给视图时,数据将被打印在屏幕上而不是添加到头部。所以这是我的观点:

<!doctype html>

<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?php echo (isset($title)) ? $title : ''; ?></title>
    <meta name="description" content="Test">
    <meta name="author" content="Test">

    <?php
        # load assets
        echo (isset($assets)) ? $assets : '';
    ?>

    <script>var ajax_home = "<?php echo base_url(); ?>ajax/";</script>
</head>

<body>

回显资产的部分是在屏幕上打印变量的内容,而不是将资产解析为<script>...</script><link rel="stylesheet" ... />

有关为何发生这种情况的任何迹象?

感谢。

1 个答案:

答案 0 :(得分:3)

  

连接数据的方法部分如下:

foreach ($header_css as $item) {
   $str .= '<link rel="stylesheet" href="'. base_url() . $item . '" type="text/css" />';
}
  

JS文件的类似内容。当打印上一段代码时,我得到一个空字符串,所以我决定使用   htmlentities: 以下代码不适用于JavaScript,适用于样式表

foreach ($header_css as $item) {
   $str .= htmlentities('<link rel="stylesheet" href="'. base_url() . $item . '" type="text/css" />');
}

应该是,

foreach ($header_js as $item) {
  $str .= "<script type='text/javascript' src='". base_url() . $item . "'/>";
}

<强> &安培;你的观点有(咳!):

<?php
  # load assets
  echo (isset($assets)) ? $assets : '';
?>

所以,我的问题是:

  1. $ str variable 在哪里以及为什么你不使用内部视图而不是 $ assets 它应该是echo (isset($str)) ? $str : ''; < / LI>
  2. 我假设您在控制器中使用您的功能作为方法&amp;存储所有js&amp; css文件内置 变量。所以.. are you returning that $str variable.. ?
  3. 嗯,这里有一些例子,希望你能解决问题:)

    /**
     * Build Css or Script link
     * @param  array  $assets [description]
     * @param  string $type   [description]
     * @return [type]         [description]
     */
    function build_assets($assets = array(), $type = 'css')
    {
        $str = '';
        if (!empty($assets) && is_array($assets) && $type == 'css') {
            foreach ($assets as $key => $file) {
                $str .= "<link type='text/css' rel='stylesheet' href='" . base_url($file) . ".css' />";
            }
        } elseif (!empty($assets) && is_array($assets) && $type == 'javascript') {
            foreach ($assets as $key => $file) {
                $str .= "<script type='text/javascript' src='" . base_url($file) . ".js'></script>";
            }
        }
        return $str;
    }
    /**
     * Testing the method
     * @return [type] [description]
     */
    function index()
    {
        $data = [];
        // get all style sheets
        $style = $this->build_assets(['style', 'page', 'form']);
        // get all js files
        $script = $this->build_assets(['style', 'page', 'form'], 'javascript');
        // assign in 'assets' variable
        $data['assets'] = $style . $script;
        // send to template/view
        $this->load->view('ViewTemplate', $data);
    }
    

    <强> &安培;观看代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>CodeIgniter</title>
        <!-- CSS and JavaScript -->
        <?php echo isset($assets) ? $assets : '' ?>
        <!-- End Here -->
    </head>
    <body>
       <di class="welcome">Say Hello to CodeIgniter!!!</di> 
    </body>
    </html>