主要元素有Category, listing, field
Category下有多個listing,listing下能夠有多個field,field能夠用於搜索與展現,而每一個field都有字段類型。除了mtree內的核心字段外,能夠加入自定義字段。字段類型類都繼承一個公共類(mFieldType),並實現全部字段功能,後臺也能夠添加新的mFieldType類來知足複雜的需求。也就是說,若是現有字段提供的功能沒有知足需求,能夠修改對應類型的mFields基類,或者添加新的mFieldType類。以自定義方式新建的類型是經過後臺的Manage field types頁來建立類實現,而且代碼將存於數據庫。javascript
各頁面的模板 components/com_mtree/templates/m
字段類型基類 administrator/components/com_mtree/mfields.class.phpphp
$fields->hasNext(): 是否有下一個field,即判斷指針是不是最尾 $fields->next(): 下一個field,即指針加一 $fields->resetPointer(): 重置指針 $fields->getCurrentPointer(): 獲得當前指針值 $fields->getTotal(): field總數 $fields->getField(): 得到當前指針指向的mFieldType對象 $fields->getFieldById($id): 以field ID獲取mFieldType對象 $fields->getFieldByCaption($caption): 以field name獲取mFieldType對象
$field->getSearchHTML($showSearchValue, $showPlaceholder, $idprefix); // 前臺對應字段搜索功能的HTML輸出 $field->getInputHTML(); // 後臺對應字段錄入的HTML輸出 $field->getOutput(); // 前臺對應字段HTML輸出 $field->getJSValidation(); // javascript驗證代碼 $field->getParam('showCounter',1); // 取得參數 $field->getName(); // 取得字段名 $field->arrayFieldElements; // 獲得Elements的值,後臺能夠設置這個值 $field->getValue(); // 取得管理員設置的值 $field->getInputFieldName($count); // 取得表單字段名 $field->getId(); // field ID $field->hasInputField(); $field->getInputValue(); // 獲得值或者默認值,前臺推薦使用這個 $field->hasValue(); // 是否有值 $field->getOutput(1); // 字段完整輸出,如image $field->fieldType == 'image'; // 判斷類型 $field->isCore(); // 判斷是否核心field $field->getDisplayPrefixText(); $field->getDisplaySuffixText();
官方文檔:
http://www.mosets.com/help/kb/mosets-tree/developing-field-type-part-1
http://www.mosets.com/help/kb/mosets-tree/developing-field-type-part-2html
自定義字段邏輯例子:java
Name of the field type: texttype數據庫
class mFieldType_texttype extends mFieldType { function getOutput($view=1) { return $this->getValue(); } function getInputHTML() { $html .= sprintf('<input type="text" name="%s" value="%s" />', $this->getInputFieldName(1), $this->getValue()); return $html; } }
mtree.tools.php中的customFieldsSort函數,用於處理自定義字段排序數組
Savant2爲mtree的模板引擎,使用方法與joomla模板引擎相似函數
global $savantConf; $savant = new Savant2($savantConf); $savant->assign('template_value', value); $savant->display( 'page.tpl.php' );
$this->jconf['live_site'] . $this->mtconf['relative_path_to_listing_small_image'] . $image->filename
relative_path_to_listing_small_image relative_path_to_listing_medium_image relative_path_to_listing_original_image
$field = $this->fields->getFieldById(字段ID);
while( $this->fields->hasNext() ) { $field = $this->fields->getField(); $value = $field->getOutput(2); $this->fields->next(); }
$this->plugin( 'mt_image', $image->filename, '3' ); $this->plugin( 'ahreflistingimage', $link, 'class="image" alt="'.htmlspecialchars($link->link_name).'"' );
$this->pageNav->getResultsCounter(); $this->pageNav->getPagesLinks();
沒有API能夠直接獲得links的fields,內核是經過assignCommonListlinksVar函數直接給模板對象添加links_fields,裏面的是mFields數組fetch
$savant = new Savant2($savantConf); assignCommonListlinksVar( $savant, $links, new mtPathWay(), $pageNav );
$task = 'listall'; $listListing = new mtListListing( $task ); $listListing->setLimitStart( $limitstart ); $listListing->setSubcats( getSubCats_Recursive($cat_id) ); $listListing->prepareQuery(); $links = $listListing->getListings();
global $savantConf, $mtconf; $dbo = JFactory::getDbo(); $advsearch = new mAdvancedSearch( $dbo ); $mtCats = new mtCats( $dbo ); $subcats = $mtCats->getSubCats_Recursive( $cat_id, true ); $subcats[] = $cat_id; $advsearch->limitToCategory( $subcats ); $advsearch->useOrOperator(); $advsearch->addRawCondition('l.link_id = 2'); $advsearch->search(1,1); $links = $advsearch->loadResultList( 0, 9); // attach fields $pageNav = new JPagination($advsearch->getTotal(), 0, $mtconf->get('fe_num_of_links')); $savant = new Savant2($savantConf); assignCommonListlinksVar( $savant, $links, new mtPathWay(), $pageNav ); foreach($links as $key => $link) { $links[$key]->fields = $savant->links_fields; } unset($savant);
$task = 'listall'; $listListing = new mtListListing( $task ); $listListing->setLimitStart( 0 ); $listListing->setSubcats( getSubCats_Recursive($cat_id) ); $listListing->prepareQuery(); $links = $listListing->getListings(); $pageNav = $listListing->getPageNav(); $savant = new Savant2($savantConf); assignCommonListlinksVar( $savant, $links, new mtPathWay(), $pageNav ); $links_fields = $savant->links_fields; unset($savant);
function loadLink( $link_id, &$savantConf, &$fields, &$params ){} function loadFields( $link, $view=1 ){} function getSubCats_Recursive( $cat_id, $published_only=true ){} function getCatsSelectlist( $cat_id=0, &$cat_tree, $max_level=0 ){} function loadCustomTemplate( $cat_id=null, &$savantConf, $template=''){} function getReviews( $links ){} function parse_words($text, $minlength=1){} function getAssignedFieldsID($cat_id){} function getTopLevelCatID($cat_id){} function setTitle($title='', $cat_id=null, $link_id=null){}