sugarCRM文檔翻譯1

2018-3-9 14:42:14 星期五javascript

本文分兩部分:php

第一部分是從index.php入口開始的代碼執行的部分流程html

第二部分是對官方文檔的翻譯java

第一部分: 流程:linux

入口文件: index.phpajax

->加載 include/entryPoint.phpsql

entryPoin.php:數據庫

->加載配置文件 config.php ($sugar_config 數據庫配置, 郵件配置, 語種, 日誌配置, 默認module/action等等 )  config_override.phpjson

->加載安全相關類, DB工廠類, autoloader, 本地化, 郵件, 日誌 windows

->加載權限認證類, 鉤子, SugarApplaction類

->設置session_id, 實例化Localization, 獲取管理員信息

->sugarApplication()->execute()

exectute():

-> 獲取module名字

-> 加載controller.php 查找順序:

  custom/modules/moduleNameController/controller.php

  modules/moduleNameController/controller.php

  custom/include/MVC/Controller/SugarController.php::CustomSugarController.php

  include/MVC/controller/SugarController.php

-> 檢查權限認證信息, 設置主題, -> 設置數據庫查詢超時, 查詢最大鏈接等資源

->controller->execute()

 注意:

action=index時, 默認是listView: SugarController->remap_action

加載模板:

以SugarController.php爲例

SugarController->execute()->procesView()->ViewFactory::loadView()

loadview優先級(當action=index時):

1.當URL參數中有target_module時

custom/modules/{$target_module}/views/view.list.php > modules/{$target_module}/views/view.list.php

2.檔URL參數中沒有target_module時

  custom/modules/{$module}/views/view.list.php 

  modules/{$module}/views/view.list.php

  custom/include/MVC/View/views/view.list.php

  include/MVC/View/views/view.list.php

loadView():

ViewFactory::_buildFormFile()-> new SugarView() (或者_buildClass()) -> ViewFactory::_loadConfig() -> process()

注意: view.list.php是一個公用的模板文件, 他最終的渲染內容是會根一些配置文件, 數據文件有關的

 

第二部分: 翻譯:

Dashlets:

他就是首頁頁面上的一個功能模塊(一個橫條) 參考

自定義模塊的相關文件: 

custom/modules/xxx/Dashlets/xxx/xxx.meta.php : 定義一個數組變量, 裏邊有模塊的名字,描述, 圖標, 歸屬哪一個模塊

custom/modules/xxx/Dashlets/xxx/xxx.php : 定義一個類, 裏邊有顯示模塊內容的方法display()

custom/modules/xxx/Dashlets/xxx/xxx.en_us.lang.php : xxx.meta.php中的title, description使用(沒有就直接使用xxx.meta.php數組中定義的值)

單個dashlets要繼承自Dashlet.php,

list dashlets繼承自DashletGeneric.php,

圖表dashlets繼承自DashletGenericChart.php

全部的dashlets信息存放在user_preferences表, 每一個dashlets都有一個ID

dashlets種類:

1. 展現modules數據 2. 訂閱其餘網站的數據 3.圖表展現 4. 工具(日曆, 記事本, 時鐘等) 5. 其餘

javascript:

位置: ./include/JavaScript/Dashlets.js

功能: 提交表單(postForm), 請求數據(callMethod: 調用dashlet類的方法, 或者調用外部接口,如谷歌地圖)

 Databases

支持MySQL和mssql, 高級版本還支持db2和oracle, 沒有使用觸發器和存儲過程, 方便編碼和抽象

索引: 放在系統模塊或者自定義模塊目錄下的vardefs.php, 鍵名叫indices (注意vardef文件, 和metadata文件, 前者是描述數據庫表的信息, 後者是描述html樣式和佈局的配置文件)

主鍵: sugar用create_guid()方法生成全局的惟一值(GUID)當作全部表的主鍵, 一共36位的字符串: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee, 沒有使用自增值是爲了防止在數據同步時產生主鍵衝突

Entry Point 入口文件

/cron.php  windows/linux 計劃任務入口

/index.php  框架入口

/service/{v1版本號}/soap.php

/service/{v1版本號}/rest.php

./include/MVC/Controller/entry_point_registry.php

URL訪問方式: http://{sugar url}/index.php?entryPoint={entry point name}

自定義入口: 分 6.3版本以前和以後

6.3以後: 入口文件寫在/custom/Extension/application/Ext/EntryPointRegistry/中, 而後經過編譯生成到: /custom/application/Ext/EntryPointRegistry/entry_point_registry.ext.php

6.3以前: 要建立/custom/include/MVC/Controller/entry_point_registry.php文件 定義入口(仍然兼容, 但不推薦)

入口信息是一個數組, 每一項是一個入口點, 每一項中包含兩個值一個是入口文件的路徑, 另外一個是bool值,表示是否進行權限驗證

File cache  文件緩存

主要緩存模板文件和語言字符串

默認放在/cache目錄下邊, 若是須要更改位置, 則須要需改 config.php 或者 config_override.php

打開文件緩存: 系統管理 > 系統 > 系統設置 > 高級 > 開發模式

Quick Search

Sugar QuickSearch (SQS)

Suagr Bean

數據庫操做:

增:

$bean = BeanFactory::newBean($module);
$bean->name = 'Example Record';
$bean->save();
$record_id = $bean->id;

改:

$bean = BeanFactory::getBean($module, $id);
$bean->name = 'Updated Name';
$bean->save();

經過bean的fetched_rows 屬性能夠確認一條記錄是新建的仍是已經存在的 原文

 

Module Framework (module/下的代碼結構, 與之對應的是 Application Framework 指application/下的代碼結構)

一個module一般包含的文件:

1. Vardefs文件, 定義了數據庫的表, 字段, 數據類型和關聯關係的信息

2. SugarBean文件, 實現了增刪改查的功能, 每一個模塊都繼承自SugarBean, 並添加了適用本模塊的方法和變量

3. MetaData文件, 定義頁面佈局和內容信息: (ListView, DetialView, EditeView, SubPanels(跟其餘module的關係), Popups(跟其餘記錄關聯的數據列表))

MVC

主要流程: SugarApplication -> ControllerFactory::getController() -> SugarController() -> SugarController::execute()::process()::processView() -> ViewFactory() -> view -> view::process -> SugarView -> SugarView::display()

Model:

SugarBean 以及其子類, 用來操做數據庫, 許多普通的module也會繼承自SugarObject

內置的六種SugarObject: Basic, Person, issue, Company, File, Sale

View:

Views, otherwise known as actions are typically used to render views or to process logic

或者叫Action, 他不只能夠輸出HTML數據, 也能夠輸出json數據或其餘結構的數據, 有一個內置的/默認的SugarView類, 他實現了不少view所須要的基礎功能, 例如處理HTML頭部和底部信息, 

自定義的view文件, 應該放在 /your_module/views/view.<view_name>.php 而其類名應該是駝峯式命名: <Modulename>View<Viewname>, 首字母大寫, 其他字母小寫, 自定義視圖文件能夠繼承自SugarView或其餘View

view分類:

1. DatilView, 一般從ListView頁面進入, 他顯示了自身的一些數據以及關聯的條目(子面板), 子面板是在詳情頁顯示的與之有關的列表性質的信息

./<module>/metadata/detailviewdefs.php定義了詳情頁的佈局  ./<module>/metadata/subpaneldefs.php定義了詳情頁顯示的子面板

2, EditView, 新添加或者編輯都屬於他, ./<module>/metadata/editviewdefs.php 中存放編輯頁面的佈局

3, ListView, 他包含了搜索表單, 搜索結果, 能夠 刪除, 導出, 批量更新數據, 也能夠點擊去查看詳情

4, Save,

5, Delete

view 方法:

1, preDidplay() 當一個視圖繼承了其餘視圖的時候就能夠使用這個函數了, 

2, display()  展現數據, 將邏輯都寫在這裏邊

加載視圖:

ViewFactory 按照如下順序去加載vew文件:

./custom/modules/<module>/views/view.<view>.php
./modules/<module>/views/view.<view>.php
./custom/include/MVC/View/view.<view>.php
./include/MVC/Views/view.<view>.php

視圖的配置文件:

ViewFactory在渲染頁面的時候, 會從下邊文件中找到一些配置信息, 去控制視圖的顯示

./customs/modules/<module>/views/view.<view>.config.php
./modules/<module>/views/view.<view>.config.php
./custom/include/MVC/View/views/view.<view>.config.php
./include/MVC/View/views/view.<view>.config.php

Controller

Sugar主要的控制器是 SugarController, 若是想繼承他, 就要在本身的模塊中建立一個controller.php, 並把類名定義爲<ModuleName>Controller, 而類的action的命名方式是 action_functionName

有許多細粒度的控制機制能夠被開發者利用, 去重寫controller的處理流程, 例如:

若是你想重寫Save功能, 你可能要重寫三個地方: 

1, action_save: 處理保存的邏輯

2, pre_save: 處理來自表單的數據

3, post_save: 這裏能夠設置跳轉連接, 或者保存後的一些處理邏輯, 或者展現一個新的view

自定義controller

自定義的controller要麼繼承自已經存在於/<module>/controller.php的類, 要麼繼承自SagurController, 但都要放在 ./custom/modules/<module>/controller.php 爲了升級的時候不會被覆蓋

包含控制器的文件:

./include/MVC/Controller/SugarController.php
./include/MVC/Controller/ControllerFactory.php
./modules/<MyModule>/Controller.php
./custom/modules/<MyModule>/controller.php

action

控制器中的方法能夠直接寫在控制器類中, 也能夠經過 $action_file_map 去找到對應的代碼文件去執行, $action_file_map的加載順序以下, 後邊的變量會覆蓋前邊的同名變量

./include/MVC/Controller
./modules/<module>
./custom/modules/<module>
./custom/include/MVC/Controller

自定義的 $action_file_map 文件須要放在 ./custom/modules/<module>/action_file_map.php 路徑中, 確保安全升級

Controller執行流程:

1, 從index.php開始, 加載SugarApplication實例

2, SugarApplication實例化 SugarControllerFactory

3, SugarControllerFactory加載對應的Controller

4, 檢查 ./custom/modules/<module>/Controller.php 是否存在

  1, 若是不存在, 檢查./modules/<module>/Controller.php是否存在

  2, 若是還不存在, 就加載SugarController.php

5, 調用對應的action

  1, 檢查./custom/modules/<module>/<action>.php是否存在, 若是找到了, 而且./custom/modules/<module>/views/view.<action>.php不存在, 那就用這個view ???wtf

  2, 若是不存在 ./custom/modules/<module>/<action> 就去查找 modules/<module>/<action>.php, 若是找到了, 而且./modules/<module>/views/view.<action>.php不存在, 就使用modules/<module>/<action>.php

  3, 若是不存在 modules/<module>/<action>.php 就在控制器裏查找 action_<action> 方法

  4, 若是控制器中不存在這個方法, 就去加載 action_file_mapping, 並查找

  5, 仍是沒有找到, 就報錯"Action is not defined"

Metadata (用於頁面佈局的配置信息)

背景: Metadata定義爲數據的信息 , 框架會利用這些文件去表達/抽象系統中頁面怎麼顯示或者業務是怎樣的邏輯, Metadata存在於定義性質的php文件中, 並由php進行處理, 這些處理一般包括, 1. Smarty 模板渲染頁面, 2. JavaScript庫處理(調用)一些影響顯示的邏輯,或者對輸入進行驗證等

概念: Metadata是一個定義了嵌套數組的php文件, 他描述了視圖中的按鈕, hidden input標籤, 字段佈局等等的信息, 

Application級別的Metadata

全部可用的應用模塊都定義在 /include/moudules.php 其中:

$moduleList 定義了用於在界面頂部顯示的tabs的名字, 他是個索引數組, 每一項的值都用複數形式 (so??)

$beanList 定義了可用的beans(modules), 他是一個關聯數組, 鍵是複數形式, 值是單數形式, 值還跟$beanFiles關聯

$beanFiles 定義了modules文件位置

$modInvisList 定義了能夠在界面上顯示的modues

$adminOnlyList 定義了在admin頁面能夠被admin看到的modules

 Module級別的Metadata

路徑: modules/[module]/metadata

additionalDetails.php 定義了當用戶鼠標滑過listView的一行時的顯示效果
editviewdefs.php 編輯頁面如何渲染
detailviewdefs.php 詳情頁面如何渲染
listviewdefs.php 列表頁面如何渲染
metafiles.php 從新定義詳情, 編輯, 列表須要的metadata文件的路徑
popupdefs.php 渲染搜索表單和列表頁面時使用
searchdefs.php 顯示modules的基礎和高級搜索時使用
sidecreateviewdefs.php 在快捷面板上建立表單時使用
subpaneldefs.php 在詳情頁面的字面板展現

 

這些metadata文件的路徑也能夠在metafiles.php中被從新定義

搜索表單(Search Form)的Metadata

文件名是searchdefs.php, 裏邊是一個多維數組, 定義了某個模塊的表單怎麼顯示

好比Accounts模塊的表單( $searchDefs['Accounts']), 這個表單有多少列, 每個表單項的文字寬度是多少百分比, input框多少百分比, input的name屬性的值等等

其中$searchDefs['Accounts'] 中的Accounts是在 include/modules.php::$moduleList 變量中定義的鍵名

當一個模塊的list視圖被渲染的時候, 就會引入searchdefs.php文件, 在view.list.php中會檢查modules中是否存在SearchForm.html

若是存在, 就會以Classic模式, 用include/SearchForm/SearchForm.php去處理搜索表單, (Classic Mode是指5.x版本以前, 目前是MVC/Metadata模式)

若是不存在, 就會用include/SearchForm/SearchForm2.php去處理搜索表單, 此時 就會在 custom/modules/[module]/metadata/ 和 modules/[module]/metadata 中依次尋找searchdefs.php文件

EditView 和 DetailView  的 Metadata

metadata文件也以經過studio interface(手工拖動?)去自動建立, 這種狀況下, metadata會放在 custom/modules/[module]/metadata/目錄下

當第一次訪問一個view的時候, preDisplay()方法會去嘗試加載正確的metadata文件, 一般狀況下metadata文件會在/modules/[module]/metadata/目錄下

metadata也可能放在其餘路徑下邊, 他們的路徑能夠在metafiles.php中找到

生成html文件/渲染視圖

當按照上邊的約定加載完metadata後,  preDisplay()方法還會建立一個EditView object(以EditView爲例), 檢查是否須要根據metadata區構建一個smarty模板, EditView object會作大量的工做:

 建立模板, 賦值, 權限等級判斷等等, 

在view代碼中調用完preDisplay()方法後就會去調用display()->EditView object()::process()->EditView object()::display()->將生成的html數據放到buffer中輸出

舉例

加入有一個詳情頁的請求:  index.php?action=DetailView&module=Opportunities&record=46af9843-ccdf-f489-8833

1. 程序先去是否有一個 modules/Opportunity/DetailView.php 若是有就會去觸發 Classic 模式的渲染方式

若是沒有這個文件, 程序就會去找modules/Opportunity/views/view.detail.php

若是兩個都沒有, 程序就會加載include/DetailView/DetailView.php,  此時是 MVC模式,  include/MVC/View/views/views.detail.php 會建立一個DetailView的實例 -> 加載smarty -> setup() -> process() -> display();

2. 其中setup()會建立一個 TemplateHandler 實例, 他在建立最終的詳情視圖時會去檢查加載哪一個detailviewdefs.php, 若是setup()中傳入了metadata參數就用這個參數, 沒有的話, 就去作其餘檢查

TemplateHandler 實例 也會去作一些 ajax, javascript驗證有關的事情

3. process()方法會根據metadata去計算頁面展現時HTML元素之間的距離, 字段個數, 以及每列所佔的百分比等等

4. display()方法會把變量賦值到Smarty模板上去, 並返回最終要輸出的內容

5. 在輸出前, TemplateHandler 實例會去檢查緩存目錄中有沒有對應的文件(cache/modules/Opportunity/DetailView.tpl), 若是沒有, 就會調用Sugar_Smarty::fetch()去生成緩存文件, 這一步很耗費資源, 另外, 經過 studio interface 方法生成的模板確定會刷新緩存

Sugar Fields

sugar 根據metadata文件(例如listviewdefs.php)vardefs.php中定義的字段信息, 能夠在include/SugarFields/Fields中找到sugar Fields文件

在 include/SugarFields/Fields/Base 中你會找到渲染  DetailView, EditView, ListView, 和 Search Forms 這些基礎視圖的模板(例如, DetailView.tpl)

目錄結構:

./include/SugarFields/Fields/
./include/SugarFields/Fields/<Type>/DetailView.tpl  //Type: 好比Bool, Enum, Text, URL, Readonly... 
./modules/MyModule/vardefs.php
./modules/MyModule/metadata/defs.php

字段類型以及關聯信息(好比是枚舉類型, 他就會有多個值) 去自動生成HTML標籤

Type: 也有group類型的好比 Address, Datetime, Parent, Relate

大多數的Sugar Field包含了一堆Smarty tpl文件

一些 Sugar Fields 還包含了 SugarFieldBase  的子類, 用來覆蓋原有的方法去作一些額外的處理, 子類的名字要這樣寫: SugarField[Sugar Field Type] 其中後邊的英文單詞首字母要大寫

例如:

enum類型的SugarField(會被渲染成 select 標籤)的代碼, 放在 ./include/SugarFields/Fields/Enum/SugarFieldEnum.php中,

這個代碼中你能夠看到, 枚舉類型是是怎麼使用6個Smarty模板中的一個取決於

1. view是什麼(edit, detail or search)

2. enum vardef 的定義中是否有一個 'function' 屬性去調用php函數去渲染字段的內容

例子, 添加一個視頻input

Vardefs

他(Variable Definitions) 給Application提供了SugarBean的信息, 若是一個moudles包含了SugarBean, 那麼就會有一個vardefs文件,

該文件用來描述表中的每一個字段的信息, beans之間的關係, bean的索引信息, 關聯表/字段信息等等

 

 還有一頁

相關文章
相關標籤/搜索