CodeIgniter和JS库

时间:2009-11-22 21:03:11

标签: php javascript codeigniter

所以我是这方面的新手 - 我刚开始使用CodeIgniter进行开发,我正在尝试集成javascript库。但是,我设置了.htaccess,以便所有请求都在其前面加上/index.php/,这使得包含文件变得很困难。对于CSS,我只是使用php include来解决这个问题,让它内联,无论如何都要快。但这似乎是javascript库的一个坏主意。

有什么想法?我应该只创建一个index.php /文件夹并将其粘贴在那里吗?

谢谢!
马拉

4 个答案:

答案 0 :(得分:8)

您可以通过向其添加条件来避免重写规则:

RewriteCond $1 !^(index\.php|images|scripts|styles|robots\.txt)

然后,您可以将所有脚本,图像等放在docroot中。

有关详细信息,请参阅Apache Rewrite docs

答案 1 :(得分:1)

我实际上使用资源控制器来引入所有外部文件:

 class Resources extends Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function javascript()
    {
        $arr = func_get_args();
        if( sizeof( $arr ) == 0 )
        {
            show_404();
            return;
        }
        if( is_numeric( $arr[ sizeof( $arr ) - 1 ] ) )
        {
            array_pop( $arr );
        }
        $name = implode( "/", $arr );
        $this->load->view( "javascript", array( "importscript" => $name ) );
    }
    public function css()
    {
        $arr = func_get_args();
        if( sizeof( $arr ) == 0 )
        {
            show_404();
            return;
        }
        if( is_numeric( $arr[ sizeof( $arr ) - 1 ] ) )
        {
            array_pop( $arr );
        }
        $name = implode( "/", $arr );
        $this->load->view( "css", array( "importscript" => $name ) );
    }
    public function image()
    {
        $arr = func_get_args();
        if( sizeof( $arr ) == 0 )
        {
            show_404();
            return;
        }
        if( is_numeric( $arr[ sizeof( $arr ) - 1 ] ) )
        {
            array_pop( $arr ); 
            // if the last item is a number, that means it was 
            // automatically generated to prevent caching
        }
        $name = implode( "/", $arr );
        $this->load->view( "images", array( "importscript" => $name ) );
    }
}

不同的观点都是这样的:

$import = dirname( __FILE__ ) . "/javascript/$importscript";
if( !showjs( $import ) && is_dir( $import ) )
{
    if( !showjs( "$import/$importscript" ) )
    {
        show_404();
    }
}

function showjs( $imp )
{
    if( is_file( "$imp.js" ) )
    {
        header('Content-type: application/javascript');
        echo "/*----- Imported into PHP so JavaScript can all be dynamically declared -----*/\n\n";
        echo file_get_contents( "$imp.js" );
        return true;
    }
    elseif( is_file( "$imp.php" ) )
    {
        header('Content-type: application/javascript');
        echo "/*----- Imported into PHP so JavaScript can all be dynamically declared -----*/\n\n";
        include_once( "$imp.php" );
        return true;
    }
    return false;
}

如您所见,控制器将文件名传递给视图。然后视图查看是否存在与importscript变量关联的js文件或php文件。如果有,它会设置标题然后显示文件。

答案 2 :(得分:1)

如果您使用的是mod_rewrite,只需在RewriteRule前添加RewriteCond即可。 例如:

RewriteCond %{REQUEST_URI} !\.(css|js|jpe?g|png|gif)$
RewriteRule ^([^/]+)/([^/]+)/? index.php?ctrl=$1&event=$2 [L,QSA]

答案 3 :(得分:0)

也许我很想念一些东西,但为什么不包括带有绝对网址的javascript库

<script type="text/javascript" src="/js/javascript.js"></script>

与CSS相同

<link rel="stylesheet" type="text/css" href="/css/main.css">

如果您使用/从doc根开始,那么找到文件就不会有任何问题。