discuz的資料庫調用機制到底是怎麼回事

來源:互聯網
上載者:User
給100分
最近研究discuz,看到官方包中很多htm模板中沒有調用資料庫的語句,幾乎清一色的全是loop迴圈,這我就有點不明白了, 在調用前沒有sql語句出現,迴圈什麼呢?
但是事實正好相反,它是能調出來的,所以不明白它的調用機制是怎麼回事!

為了更好的說明舉一個例子吧!
比如下面這個loop迴圈:
  • ¥ $trade[price]{lang additional} $trade[credit] {$_G[setting][extcredits][$_G['setting']['creditstransextra'][5]][unit]}{$_G[setting][extcredits][$_G['setting']['creditstransextra'][5]][title]}

    $trade[subject]



  • loop文法是這樣的:If(is_array($abc)) {
    Foreach($abc AS $key => $val) {
    }
    }


    所以上面那段代碼中$trades[$tid]肯定是一個數組了,即然是數組,他就是一個資料表的集合,,那麼這個表php檔案是如何調取的呢,還有就是這個 htm模板怎麼知道它用的是哪個php裡面調取的資料表 呢?
    當然有人會說了:discuz的預設包,官方自己寫的判斷,也許是這樣的,可是別忘了,程式要擴充的,如果使用者自己寫一個表加進去,那怎麼辦呢?當然了,在htm中寫一個sql也是可以的,但是即然官方不這麼寫,我想它肯定有一個規律在裡面,只是官方沒有說明罷了!那麼這個機制是啥呢?
    希望回答時關鍵地方要說明,不要清描淡寫!


    回複討論(解決方案)

    資料庫是在model中串連讀取的,$trades[$tid]已經是一個數組了,當然能直接loop迴圈。

    例如forum.php 就是擷取資料的, forum.html就是view。

    php裡面是沒有loop迴圈,loop是discuz的代碼,模版是預先編輯好的,你可以在discuz根目錄/data/template下看見很多編譯好的檔案,裡面就變成了foreach
    htm模板怎麼知道它用的是哪個php裡面調取的資料表呢?
    這個你可以根據連結來找
    如:forum.php?mod=viewthread&tid=1
    forum.php就是根目錄下的入口檔案(還有home.php)
    mod=viewthread,最後一句引入了另外一個檔案(根據mod可知引入的檔案是/source/module/forum/forum_viewthread.php)
    forum_viewthread.php這個檔案就是邏輯處理的php頁面,查詢資料庫,組織變數...都是在這個檔案中完成的
    組織好資料後用include template引入htm檔案,在裡面執行loop迴圈之類的
    你可以根據上面的方法來追蹤discuz的代碼執行順序

    你也知道你在看的是html模板而不是php指令碼
    百度搜搜DZ的簡單手冊吧,瞭解一下大概部署

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.