Mosets Tree開發筆記

簡述

主要元素有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

mFields的成員函數

$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對象

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

獲得mFieldType對象

$field = $this->fields->getFieldById(字段ID);

fetch field

while( $this->fields->hasNext() ) {
    $field = $this->fields->getField();
    $value = $field->getOutput(2);
    $this->fields->next();
}

plugin輸出圖片

$this->plugin( 'mt_image', $image->filename, '3' );
$this->plugin( 'ahreflistingimage', $link, 'class="image" alt="'.htmlspecialchars($link->link_name).'"' );

分頁

$this->pageNav->getResultsCounter();
$this->pageNav->getPagesLinks();

links field

沒有API能夠直接獲得links的fields,內核是經過assignCommonListlinksVar函數直接給模板對象添加links_fields,裏面的是mFields數組fetch

$savant = new Savant2($savantConf);
assignCommonListlinksVar( $savant, $links, new mtPathWay(), $pageNav );

獲取全部links

$task = 'listall';
$listListing = new mtListListing( $task );
$listListing->setLimitStart( $limitstart );
$listListing->setSubcats( getSubCats_Recursive($cat_id) );
$listListing->prepareQuery();
$links = $listListing->getListings();

使用mAdvancedSearch獲取links

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);

獲取全部links的fields value

$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);

mtree.tools.php API

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){}
相關文章
相關標籤/搜索