2011-05-13 114 views
5

我正在尋找將模塊系統實現到我的應用程序框架中的方法,模塊將是以某種方式更改設計的類文件,以便自動與用戶干預集成。在框架內創建模塊系統

我的框架是一個定製的框架,但非常類似於codeigniter,只是更輕一點。

我已經是模板文件中的想法是對模塊位置打電話,並有模塊自動加載和分析

<html> 
    <head> 
     <title>Welcome to my site</title> 
    </head> 
    <body> 

      <header> 
       .... 
       <?php $this->call_modules('header') ?>; 
      </header> 

      <section> 

       <aside> 
        <?php $this->call_modules('sidebar') ?>; 
       </aside> 

      </section> 

    </body> 
</html> 

所以,下面的模塊將被調用,其內容將在那裏去地點:

/system/applications/admin/modules/header/a.php 
/system/applications/admin/modules/header/b.php 
/system/applications/admin/modules/sidebar/a.php 
/system/applications/admin/modules/sidebar/b.php 

所以這對我來說似乎將工作得很好,但問題是,我從來沒有建立一個模塊系統,我覺得這些都是鉤更入級。

在我的腦子裏,我基本上想要一個簡單的系統,由1類文件和模板,如果需要,CALSS文件很可能是這樣的:

class Module_HelloWorld extends Module 
{ 
    public static function info() 
    { 
     return array(
      'name' => 'Hello Word', 
      'version' => '1.0.0', 
      'description' => 'Dispalys "hello World"', 
      'author' => 'Robert Pitt', 
     ); 
    } 

    public function execute($context,$action) 
    { 
      //$context would be the current view at the point of execution for the view 

      //$action would be header/sidebar 
    } 
} 

所以我概括地說問題會是什麼是爲我的框架設計一個模塊系統的最佳方式,允許3Rd方模塊放在一個目錄中,然後從管理員安裝,而不需要太多的用戶干預?

回答

3

祝你好運,你的mvc和cms。 我前段時間實現了同樣的想法,我的方法很簡單,第一個出現在我的腦海裏。

  1. 將您的系統建立在頁面和模塊(小部件)上。
  2. 頁面信息保存在數據庫表中,如「頁面」。
  3. 模塊(小部件)是一個包含元數據(定義)和業務邏輯的類。
  4. 如果您將一個模塊添加到頁面,其特定信息將保存在數據庫中。
  5. 下一次,如果您希望擁有它的實例,只需將相關參數傳遞給它的類,然後獲得它。
  6. 這樣,您可以在不同的地方和不同的實例中使用單個模塊定義。
  7. 您可以在數據庫中添加儘可能多的頁面。
  8. 用戶可以在單個頁面中添加儘可能多的小部件。
+0

感謝您的回覆,稍後我會看看我能想出什麼,儘管數據庫存儲不是我想要關閉的路徑。 – RobertPitt 2011-05-13 12:21:44

+0

@RobertPitt,它可能適用於你的場景,在一個類和模塊之間有一對一的對應關係,但是數據庫對我來說很合適。 – 2011-05-13 19:04:45

1

我不確定這是否有幫助,但對我來說,我想要一個框架,我可以根據需要擴展模塊方面的功能,但最少量的數據庫交互在存儲有關模塊。所以我有一個設置,我有文件夾中的模塊與設置,CSS,JS和實際的類,必須遵循非常具體的命名約定。添加模塊時,我需要添加該文件夾,然後更新框架基本設置中的模塊列表。

其中一個設置指定模塊需要加載哪個頁面。如果每個頁面都需要模塊,那麼它就是(*)。我的框架基礎控制器檢查模塊列表,然後檢查模塊的頁面設置,看它是否應該加載。

我的框架通過將模板加載到輸出緩衝區並存儲在公共var中,然後可以通過框架中的任何代碼訪問來顯示頁面。因此,我可以簡單地使用str_replace來標識需要加載的部分(例如,模板中存在指定頁面主要內容的接口標記),然後替換爲模塊內容。因此,一個圖庫模塊將會替換圖庫頁面上的圖庫的界面標籤,而一篇文章模塊將在文章頁面的界面標籤上生成一篇文章。

雖然我不這樣做,但我認爲大多數人都會使用smarty標籤進行替換。

我認爲這適用於您需要一個框架,您正在使用個人向客戶提供網站。如果不同的人需要能夠使用你的框架,這可能不會奏效。