鍍金池/ 問答/PHP/ ThinkPHP5.1如何在模版中輸出public/static靜態(tài)資源文件的U

ThinkPHP5.1如何在模版中輸出public/static靜態(tài)資源文件的URL路徑?

因為這個項目有可能不放在WEB根目錄,會放在子目錄中,也有可能會經(jīng)常修改服務器的IP(這個項目在外網(wǎng)和內(nèi)網(wǎng)都有開放,但是外網(wǎng)和內(nèi)網(wǎng)開放的URL不同,甚至還做了虛擬目錄,這個需求確實有點奇怪),所以不能寫死在模版里面

我試過$_SERVER的script_filename,script_name,pathinfo,REQUEST_URI等變量,他們在使用了pathinfo之后,會把pathinfo的信息也帶入進去,導致使用dirname獲取這些變量所在目錄,獲取到的并不是真實的index.php所在的public目錄的URL

而且也不能通過判斷url中的index.php來確定,因為有可能服務器還做了URL重寫,不一定在URL中存在index.php這個字符串,不能通過字符串切割來解決。

假如當前頁面是192.168.1.1/subDir/index.php/index/admin/test,那么直接在模版里面寫static/js/的話會被瀏覽器解析到192.168.1.1/subDir/index.php/index/admin/test/static/js/上,所以這種方法無效

有什么其他辦法能獲取public/static靜態(tài)資源文件的URL路徑嗎?

我試過直接在模版里面寫__STATIC__或者__ROOT__,結果都是直接瀏覽器里面原樣輸出

圖片描述
圖片描述

回答
編輯回答
拮據(jù)

兩種解決方法:
1.修改服務器 default_server 指向 subDir 目錄,ip訪問時就不用添加subDir路徑,局域網(wǎng)和公網(wǎng)訪問方式統(tǒng)一
2.寫一個方法針對局域網(wǎng)、公網(wǎng)訪問方式做判斷,針對兩種情況返回不同的host_name

2017年7月18日 05:33
編輯回答
小曖昧

你可以全局定義一些js變量,像這樣把模板變量放進去就好了
clipboard.png

clipboard.png

2017年3月28日 11:28
編輯回答
柒喵

通過SF.GG官方交流群群友的幫助,最終找到解決方案。

在ThinkPHP的模版配置文件中使用如下配置

'tpl_replace_string'  =>  [
        '__STATIC__'=>$_SERVER['REQUEST_SCHEME'] .'://' . $_SERVER['HTTP_HOST'] . str_replace('/index.php' ,'' ,$_SERVER['SCRIPT_NAME']) . '/static',
    ],

然后在模版中直接使用__STATIC__常量即可,完美適配各種協(xié)議,各種子路徑,以及帶有pathinfo的情況

2017年4月3日 07:32
編輯回答
真難過
    // 視圖輸出字符串內(nèi)容替換
    'view_replace_str'       => [
        '__ADMIN__'=>'/static/admin',
    ],

在config.php 里加個自定義路徑就可以了

clipboard.png

2018年6月13日 01:21