<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[danger] 碎片模塊主要實現的功能是在對應的地方執行一個片段的代碼,碎片本質其實就是在對應的地方放一個鉤子,在這個鉤子上動態關聯多個行為的過程,那么鉤子就是碎片的分類,行為就是要實現的碎片代碼。 >[info] 在COWCMS系統中默認放了一些系統的鉤子,比如管理員登錄(admin\_login),管理員退出(admin\_quit)等,了解更多的系統碎片鉤子 [點擊這里](http://doc.cowcms.com/950402)。 > 使用場景:管理員登錄的時候,在 **A** 模塊中要實現-寫入管理員登錄記錄,在 **B** 模塊要實現-記錄管理員登錄次數。 > 因為在管理員登錄的時候,系統默認監聽了管理員登錄鉤子(admin\_login),我們只需要給這個鉤子關聯( **A** 模塊和 **B** 模塊)中實現功能的2碎片代碼就可以,當程序執行到管理員登錄的時候,程序自動會執行他所關聯的行為碎片。 >[danger] 實例如下: >第一步:創建模塊,在 application 目錄下,創建一個 **A** 模塊 和一個 **B** 模塊。 >第二步:關聯行為, 在 **A B** 模塊下分別創建 exec 目錄,在這個目錄下分別創建 event.php,結構如下: A/exec/event.php ~~~php return [ 'action_0_0'=>['name'=>'A_record','order_num'=>0,'hook_name'=>'admin_login','install_module'=>'A','describe'=>'寫入管理員登錄記錄','class_name'=>''], ]; ~~~ B/exec/event.php ~~~php return [ 'action_0_0'=>['name'=>'B_record','order_num'=>0,'hook_name'=>'admin_login','install_module'=>'B','describe'=>'記錄管理員登錄次數','class_name'=>''], ]; ~~~ key為action\_0\_0的值,表示要在某個鉤子上關聯碎片(行為) * [x] name:行為的名稱,也就是函數的名稱 * [x] order\_num:顯示和執行的順序,如一個鉤子關聯多個行為,先執行那個行為 * [x] describe:行為說明 * [x] install\_module:這個行為屬于那個模塊安裝的 * [x] hook\_name:鉤子的標識,如hook\_name為admin\_login,就表示在管理員登錄的時候執行該碎片(行為) * [x] class\_name:行為執行的代碼片段的位置 >第三步:編寫行為代碼,第二步關聯了對應的行為,但是這個時候還沒有編寫行為代碼, 上邊關聯的行為代碼的位置為: A模塊關聯的代碼在 /application/A/event/A.php B模塊關聯的代碼在 /application/B/event/B.php 代碼如下: ``` namespace app\A\event; class A { /*此處的函數名稱,正是在關聯行為時填寫的 key為name的 值*/ public function A_record($admin) { // $admin : 登錄管理員的信息,每個鉤子所對應的參數是不一樣的,具體參數請到到鉤子預覽表中去查看 // 此處編寫需要的代碼 $adminId = $admin['id']; ............................................. } //以下的代碼為A模塊關聯的其它鉤子的行為,和本實例沒關系,可以直接刪除 public function actionName() { //代碼段 } } ``` ``` namespace app\B\event; class B { //此處的函數名稱,正是在關聯行為時填寫的 key為name的 值 public function B_record() { // $admin : 登錄管理員的信息,每個鉤子所對應的參數是不一樣的,具體參數請到到鉤子預覽表中去查看 // 此處編寫需要的代碼 $adminId = $admin['id']; ............................................. } } ``` #### 這樣當 A B模塊被安裝后,在有管理員登錄的時候,就會執行對應的 A_record B_record 這2個方法了 >[danger]如果有些模塊在關聯行為的時候,并不是關聯的本模塊種的行為,如在登錄的時候,A模塊關聯了一個行為,這個行為是想讓他執行B模塊中的B_record行為,我們可以做如下關聯, A/exec/event.php ~~~php return [ 'action_0_0'=>['name'=>'B_record','order_num'=>0,'hook_name'=>'admin_login','install_module'=>'A','describe'=>'寫入管理員登錄記錄','class_name'=>'\\app\\B\\event\\B'], ]; ~~~ 這樣在管理員登錄的時候,就會執行B模塊下的B_record方法,其實這個原來很簡單。 >[danger] 鉤子行為執行的原理,分為幾個步驟:注意:install_module為安裝模塊名 > 第一步:當程序執行到鉤子處,檢測鉤子是否啟用,如果啟用執行,沒啟用將跳過 > 第二步:去數據表中查找和該鉤子關聯的行為 > 第三步:如果行為中 class_name值為真 , 執行 $hook = new $class_name(); $hook->name(); > 第四步:如果 class_name不為真,執行 $hook = new \\app\\install_module\\event\\install_module(); $hook->name(); 所以 class_name 可以為任何可執行的類(注意命名空間) >[danger] **注意:如果系統預設的鉤子無法滿足時,如何給自己的模塊添加鉤子** 第一步:首先在模塊的exec目錄里創建event.php,在文件中按格式寫入自己的鉤子 ~~~php return [ 'hook_0'=>['name'=>'app_init','title'=>'模塊初始化','order_num'=>0,'describe'=>"在模塊中開始執行時執行行為",'class'=>1,'install_module'=>'A'], ]; ~~~ 第二步:在模塊開始運行的代碼處放入如下代碼 ``` //代碼段 $param = [$moduleName] eventAdd("app_init",$param) ``` >[info]eventAdd第一個參數為鉤子的標識(name),第二個參數為數組,是鉤子調用行為時傳遞的參數,比如為$moduleName為模塊名稱,那么在行為的中第一個參數就可以獲得$moduleName變量值。這樣當有人安裝了這個模塊后,就可以在任何模塊中針對app_init鉤子編寫行為了 key為hook\_0的值,表示要添加的碎片的分組(鉤子),這個主要作用是當系統預設的鉤子無法滿足需求時,在模塊中要添加自己的鉤子時,可以這樣寫 * [x] title:鉤子的名稱,如管理登錄,管理員退出,只是方便管理,在程序中無作用 * [x] name:鉤子標識,監聽鉤子時用到的標識,如果管理員登錄時為(admin\_login) * [x] order\_num:鉤子顯示的排序,只使用于后臺顯示,方便關聯 * [x] describe:鉤子說明 * [x] class:必填為1,區分時鉤子還是行為 * [x] install\_module:這個鉤子屬于那個模塊安裝的
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看