星期一, 十月 30, 2006

xoops的Criteria类

CriteriaElement类的作用是标准化你的SQL查询语句中的查询子句
CriteriaElementCriteria类和CriteriaCompo的基类。
Criteria的构造函数如下:
function Criteria($column, $value='', $operator='=', $prefix = '', $function = '') 
其中$column是列名称, $value是子句中要查询的列的值,$operator是查询操作,缺省是“”, $prefix是前缀,通常是表的名字,一般可以省略, $function 是操作函数,规定查询条件中的函数。这个类的使用通常是调用renderWhere()函数,通常会返回一个 where COLUMN = VALUE 这样的子句。function的话似乎要写成这样:比如ABS(),要写成 ABS(%s),其实是对$column的运算。返回的子句如下:where ABS( COLUMN )= VALUE

CriteriaCompo是一个子句的组合,其构造函数如下:
 function CriteriaCompo($ele=null, $condition='AND')
其中$ele是一个CriteriaElement对象,$condition是合并条件。

CriteriaCriteriaCompo中都有一个 renderLdap(),函数,是做LDAP查询时候的子句。

星期五, 十月 27, 2006

xoops_getmodulehandler方法

XOOPS系统中,xoops_getmodulehandler()方法的函数定义如下:
function &xoops_getmodulehandler($name = null, $module_dir = null, $optional = false)
这个函数会去$module_dir目录下找到$name为名字的那个php文件。这个文件里面通常有两个类的定义。一个以XoopsBaseObject为其基类,一个以XoopsObjectHandler为其基类。XoopsObjectHandler是一个抽象类,构造函数的参数是一个数据库的对象--XoopsDatabaseXoops里面自然多数都是XoopsDB了。每编写一个新的对象都要实现XoopsObjectHandler中定义的方法。

XoopsBaseObject这个类里,定义了一个vars数组,这个类的很多方法是对这个数组的操作。initVar()是初始化数组元素的函数。初始化的时候要指定数据类型
function initVar($key, $data_type,
$value = null, $required = false,
$maxlength = null, $options = '')

define('XOBJ_DTYPE_TXTBOX', 1);
define('XOBJ_DTYPE_TXTAREA', 2)
define('XOBJ_DTYPE_INT', 3);
define('XOBJ_DTYPE_URL', 4);
define('XOBJ_DTYPE_EMAIL', 5);
define('XOBJ_DTYPE_ARRAY', 6);
define('XOBJ_DTYPE_OTHER', 7);
define('XOBJ_DTYPE_SOURCE', 8);
define('XOBJ_DTYPE_STIME', 9);
define('XOBJ_DTYPE_MTIME', 10);
define('XOBJ_DTYPE_LTIME', 11);
vars这个数组是一个关联数组,结构如下:
key=>array(          
value=>
required=>
data_type=>
maxlength=>
changed=>
options=>
)
xoops_getmodulehandler()会返回这个XoopsObjectHandler对象。

xoops更新模版的问题

每次调试模版,需要将整个模块升级。
这样写在xoops_version.php中的定义模版文件的行以及关于block和config的定义都会在数据库里面重新定义。xoops会将数据库中config表和tplfile表中相关项目都删除(delete),再重新插入(insert)。
$modversion['templates'][1]['file'] = 'main_index.html';
$modversion['templates'][1]['description'] = 'Index Page';
这是一个定义模版的例子
$modversion['config'][1]['name'] = 'Enablebandwidth';
$modversion['config'][1]['title'] = '_MI_MY_CONFIG';
$modversion['config'][1]['description'] = '_MI_MY_CONFIG_DES';
$modversion['config'][1]['formtype'] = 'yesno';
$modversion['config'][1]['valuetype'] = 'int';
$modversion['config'][1]['default'] = 0;
这是一个定义config的例子
newblocks表中的数据只是更新(update)。下面是xoops_version.php中定义block的例子。
$modversion['blocks'][1]['file'] = "my_blocks.php";
$modversion['blocks'][1]['name'] = _MI_MY_NEWBLOCK;
$modversion['blocks'][1]['description'] = _MI_MY_NEWBLOCK_DESCRIPTION;
$modversion['blocks'][1]['show_func'] = "b_mynewblock";
$modversion['blocks'][1]['template'] = 'mynew_block.html';
这是一个定义block的例子
block定义的最后一行的模版是会insert到tplfile数据表的。

更新模块后,还要清空模板缓存才可以看到修改的结果。