1. 程式人生 > >ThinkPHP3.2中引入JS,CSS檔案路徑配置

ThinkPHP3.2中引入JS,CSS檔案路徑配置

在ThinkPHP3.2框架中,預設已經沒有Public檔案夾了。其中對於__PUBLIC__的定義也需要重新定義。這給筆者造成了很長時間的困擾,現在這個問題終於解決,分享出來給大家參照一下。
在ThinkPHP中config檔案中進行一下配置即可。

//重定義網站的一些URL地址
    /* 模板相關配置 */
    'TMPL_PARSE_STRING' => array(
        '__PUBLIC__' => __ROOT__ . '/Public',
        '__JS__' => __ROOT__ . '/Public/Js',
        '__CSS__'
=> __ROOT__ . '/Public/Css', '__IMAGE__' => __ROOT__ . '/Public/Image', '__DATA__' => __ROOT__ . '/Data/' ),

在ThinkPHP3.2中其中__ROOT__ 預設找到專案的根路徑,利用這種方式即可定義網站後臺各級資料夾的路徑,便於更好的查詢相關檔案。

修改:實質上在ThinkPHP3.2中有__PUBLIC__常量的設定。
__ROOT__ php常量在Thinkphp/ThinkPHP.php中定義
__PUBLIC__ 模板常量在ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php 檔案中定義

<?php
namespace Behavior;
/**
 * 系統行為擴充套件:模板內容輸出替換
 */
class ContentReplaceBehavior {

    // 行為擴充套件的執行入口必須是run
    public function run(&$content){
        $content = $this->templateContentReplace($content);
    }

    /**
     * 模板內容替換
     * @access protected
     * @param string $content 模板內容
     * @return
string */
protected function templateContentReplace($content) { // 系統預設的特殊變數替換 $replace = array( '__ROOT__' => __ROOT__, // 當前網站地址 '__APP__' => __APP__, // 當前應用地址 '__MODULE__' => __MODULE__, '__ACTION__' => __ACTION__, // 當前操作地址 '__SELF__' => __SELF__, // 當前頁面地址 '__CONTROLLER__'=> __CONTROLLER__, '__URL__' => __CONTROLLER__, '__PUBLIC__' => __ROOT__.'/Public',// 站點公共目錄 ); // 允許使用者自定義模板的字串替換 if(is_array(C('TMPL_PARSE_STRING')) ) $replace = array_merge($replace,C('TMPL_PARSE_STRING')); $content = str_replace(array_keys($replace),array_values($replace),$content); return $content; } }

可以看出其中已經定義好了__PUBLIC__路徑,假如需要重新定義,在相關的配置檔案中定義TMPL_PARSE_STRING 模板就會自動完成相同名稱的替換。

在ThinkPHP的模板中使用已定義的路徑,可以使用C方法

C('TMPL_PARSE_STRING.PUBLIC')

附錄:關於ThinkPHP中的U方法
U方法用於完成對URL地址的組裝,特點在於可以自動根據當前的URL模式和設定生成對應的URL地址,格式為:

U('地址','引數','偽靜態','是否跳轉','顯示域名');

在模板中使用U方法而不是固定寫死URL地址的好處在於,一旦你的環境變化或者引數設定改變,你不需要更改模板中的任何程式碼。
在模板中的呼叫格式需要採用 {:U('地址', '引數'…)} 的方式

基本用法
U方法的用法示例:

U('User/add') // 生成User模組的add操作地址

也可以支援分組呼叫:

U('Home/User/add') // 生成Home分組的User模組的add操作地址

當然,也可以只是寫操作名,表示呼叫當前模組的

U('add') // 生成當前訪問模組的add操作地址

除了分組、模組和操作名之外,我們也可以傳入一些引數:

U('Blog/read?id=1') // 生成Blog模組的read操作 並且id為1的URL地址

U方法的第二個引數支援傳入引數,支援陣列和字串兩種定義方式,如果只是字串方式的引數可以在第一個引數中定義,下面幾種方式都是等效的:

U('Blog/cate',array('cate_id'=>1,'status'=>1))
U('Blog/cate','cate_id=1&status=1')
U('Blog/cate?cate_id=1&status=1')

但是不允許使用下面的定義方式來傳引數:

U('Blog/cate/cate_id/1/status/1')

根據專案的不同URL設定,同樣的U方法呼叫可以智慧地對應產生不同的URL地址效果,例如針對:

U('Blog/read?id=1')

這個定義為例。
如果當前URL設定為普通模式的話,最後生成的URL地址是:

http://serverName/index.php?m=Blog&a=read&id=1

如果當前URL設定為PATHINFO模式的話,同樣的方法最後生成的URL地址是:

http://serverName/index.php/Blog/read/id/1

如果當前URL設定為REWRITE模式的話,同樣的方法最後生成的URL地址是:

http://serverName/Blog/read/id/1

如果你同時還設定了PATHINFO分隔符的話:

'URL_PATHINFO_DEPR'=>'_'

就會生成

http://serverName/Blog_read_id_1

如果當前URL設定為REWRITE模式,並且設定了偽靜態字尾為html的話,同樣的方法最後生成的URL地址是:

http://serverName/Blog/read/id/1.html

如果設定了多個偽靜態支援,那麼會自動取第一個偽靜態字尾新增到URL地址後面,當然你也可以手動在U方法裡面指定要生成的偽靜態字尾,例如:

U('Blog/read','id=1','xml')

就會生成

http://serverName/Blog/read/id/1.xml

路由支援
U方法還可以支援路由,如果我們定義了一個路由規則為:

'news/:id\d'=>'News/read'

那麼可以使用

U('/news/1')

複製程式碼
最終生成的URL地址是:

http://serverName/index.php/news/1

域名支援
如果你的應用涉及到多個子域名的操作地址,那麼也可以在U方法裡面指定需要生成地址的域名,例如:

U('Blog/[email protected]','id=1');

@後面傳入需要指定的域名即可。

此外,U方法的第5個引數如果設定為true,表示自動識別當前的域名,並且會自動根據子域名部署設定APP_SUB_DOMAIN_DEPLOYAPP_SUB_DOMAIN_RULES自動匹配生成當前地址的子域名。
如果開啟了URL_CASE_INSENSITIVE,則會統一生成小寫的URL地址。
錨點支援
3.1.2版本開始,U方法還可以支援生成URL地址中的錨點,例如:

U('Blog/read#comment','id=1','html')

就會生成

http://serverName/Blog/read/id/1.html#comment

如果域名和錨點同時使用的話,注意順序為先錨點後域名,例如:

U('Blog/read#[email protected]','id=1');

相關推薦

ThinkPHP3.2引入JSCSS檔案路徑配置

在ThinkPHP3.2框架中,預設已經沒有Public檔案夾了。其中對於__PUBLIC__的定義也需要重新定義。這給筆者造成了很長時間的困擾,現在這個問題終於解決,分享出來給大家參照一下。 在ThinkPHP中config檔案中進行一下配置即可。 /

關於WEB-INF目錄不提供外部訪問及JSP引用 jscss 檔案路徑問題

在 web 專案開發過程中,我們常常使用到 JSP,以及對靜態資源,js,css 等引用,但是我們應該把這些資原始檔放在哪個目錄下面咧,怎麼引用。當然如果是前後端分離的專案倒不用考慮這些。WEB-INF:出於安全性的考慮,這個目錄是禁止外部直接訪問的,所以 JSP 頁面放在這

SpringMVC框架下前端jsp頁面引入jscssimg等檔案失敗的問題

初學mvc,今天在做一個小模組的時候發現jsp前端頁面寫的jquery語句無效,查了之後在發現要在jsp的page屬性里加上一個isELIgnored="false"    的屬性,然而加上之後還是用不了引入的.js,  .css, .jpg等格式的檔案,怎麼辦呢,又去查資料

Maven專案引入JScss檔案的問題

今天在專案中引入JS,CSS檔案遇到的問題,路徑明明是對的,但就是沒有效果,專案結構如下所示: 查資料發現,需要做如下配置,首先在web.xml中進行攔截配置:     <servlet-mapping>      <servlet-name >de

django1.9引入jscss文件

AS tails base detail 不同 files load rip cti settings.py STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR,

在HTML引入多個css檔案

在HTML中引入css的兩個方法:匯入式和連結式。 匯入式和連結式的目的都是將一個獨立的css檔案引入一個檔案中,二者的區別不大,事實上,二者最大的區別在於連結式使用html的標記引入外部css檔案,而使用匯入式則是使用css規則引入外部css檔案。因此它們的語法也不同。 1. 連結式

vue引入js然後new js裡的方法

阿里雲Web播放器Web端使用SDK說明:https://help.aliyun.com/document_detail/51991.html?spm=5176.11065259.1996646101.searchclickresult.15a92458LoTQhA   vue專案中要使用阿里雲

關於SpringMVC下無法引用外部的jscss檔案錯誤

環境Spring Tool suite。 spring 3.2.9 +hibernate 3 問題描述: 需要在一個頁面引用bootstrap這個外掛(這是一個做頁面的吧,我也採用,感覺逼格挺高啊),然後在引用的時候總是會出現 No mapping f

struts2匯入jscss檔案無法生效

1.在jsp檔案中 匯入jss檔案 ../表示上一級目錄 但是引入外部css總是沒有效果,通過火狐除錯臺,發現js與css檔案狀態碼為404,得出是路徑問題, struts2由於是轉發路徑,jsp檔案

jsp.html引入js.css檔案的問題以及檔案路徑詳解。

首先我把檔案的位置已截圖的形式發出(eclipse工作欄), 看清楚各個檔案路徑的位置。 </pre>其中test1.css中寫了一個測試程式碼:</p><p><pre name="code" class="html">.AA

在php模版檔案和html檔案引入js,css檔案錯誤解決

1,html檔案引入js一些資原始檔時候:可以寫相對路徑來引入,<script src="../lib/layer/layer.js"></script>     <script  src="../lib/jquer.min.js">&l

在專案使用Ext需要引入JsCss檔案

<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" /> <script typ

web.xml的dispatchservlet後jscss甚至gif都不能正常顯示

startup view details article 的人 核心 默認 href com 這個可以說是很多初學Springmvc的人都會碰到一個令人頭痛的問題 那就是為什麽我配置好web.xml中的dispatchservlet後,js,css,甚至gif都不能正常顯示

專案引入JS檔案的方法

在單個的Vue檔案中,寫入一些體積比較大的方法,顯得很累贅,就把這些放到一個JS中,然後再引入 引入的過程中出現了一些小問題,比如我們在 src/publicMethod/tool.js中,寫入了一個方法 //宣告一個方法 function test(){ ... } //將其暴露

Go語言開發:在HTML模板引入js及其他靜態檔案

問題: 用go語言開發,在html頁面中,引入js檔案無效,寫在js檔案中的函式無法呼叫,也沒有報錯;js程式碼直接寫html頁面中,可以呼叫,但是看起來太亂了,不舒服。這個問題困擾了好久,在網上搜了好多資料都無法解決問題,今天終於解決了,TND,看到答案的時候,原來這麼簡單。 參考

SpringMVC訪問靜態檔案如:jpgjscss標籤的使用

 如何你的DispatcherServlet攔截 *.do這樣的URL,就不存在訪問不到靜態資源的問題。如果你的DispatcherServlet攔截“/”,攔截了所有的請求,同時對*.js,*.jpg的訪問也就被攔截了。 目的:可以正常訪問靜態檔案,不要找不到靜態

根據正則表示式匹配頁面jscss檔案

          // 匹配           List<string> srcList = new List<string>();           List<string> linkList = new List<string>();   

用了springmvc為何JSCSS檔案就是訪問不到

這個可以說是很多初學Springmvc的人都會碰到一個令人頭痛的問題 那就是為什麼我配置好web.xml中的dispatchservlet後,js,css,甚至gif都不能正常顯示了 我們來看看我們配置的web.xml <!-- 核心控制器 --> <s

web-inf 目錄下的jsp怎麼引用外部檔案jscss

在非spring MVC攔截“/“的情況下: web-inf是受保護的,不能直接訪問 下面是解決方法<c:set value="${pageContext.request.contextPath}" var="path" scope="page"/> <

iOS 專案本地匯入html檔案jscss檔案顯示不出來

最近一直在做h5相關,發現本地html模板匯入進專案後,js和css並顯示不出來 然後找了很多資料,發現是路徑的問題 一個是 Create groups for any added folders (建立虛擬結構-包結構) 一個是 Create folder r