Mosets Tree开发笔记

简述

主要元素有Category, listing, field
Category下有多个listing,listing下可以有多个field,field可以用于搜索与展示,而每个field都有字段类型。除了mtree内的核心字段外,可以加入自定义字段。字段类型类都继承一个公共类(mFieldType),并实现所有字段功能,后台也可以添加新的mFieldType类来满足复杂的需求。也就是说,如果现有字段提供的功能没有满足需求,可以修改对应类型的mFields基类,或者添加新的mFieldType类。以自定义方式新建的类型是通过后台的Manage field types页来创建类实现,并且代码将存于数据库。

结构

各页面的模板 components/com_mtree/templates/m
字段类型基类 administrator/components/com_mtree/mfields.class.php

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-2

自定义字段逻辑例子:

Name of the field type: texttype

class mFieldType_texttype extends mFieldType {
function getOutput($view=1) {
return $this->getValue();
}

function getInputHTML() {    $html .= sprintf('', $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_imagerelative_path_to_listing_medium_imagerelative_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数组

$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){}

关键字:joomla

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部