现在的位置: 首页 > 综合 > 正文

织梦之路——织梦自定义函数教程

2012年01月01日 ⁄ 综合 ⁄ 共 1305字 ⁄ 字号 评论关闭

织梦有很多内置函数,比如常见的 mydate、html2text等函数,但这些函数对自定义程度高的项目来说是远远不够的,所以我们需要自己定义函数使用,就像使用mydate一样!

1、找到自定函数文件 ——  include/extend.func.php

2、添加自定义函数(可以使用全局变量 $GLOBALS),我这里写了一个自定义字符等宽度值截取函数,用于样式与字数匹配的函数。

/**
 *  utf-8中文截取,mb_string 截取模式  (自定义函数)
 *
 * @access    public
 * @param     string  $str  需要截取的字符串
 * @param     int  $slen  截取的长度
 * @param     int  $startdd  开始标记处
 * @return    string
 */
function mb_sub($str, $length, $start=0, $encode='')
{
    global $cfg_soft_lang;
    $encode=$cfg_soft_lang;
    if(strlen($str) < $start+1)
    {
        return '';
    }
    if(!function_exists('mb_substr') ){
        return cn_substr_utf8($str, $length, $start=0);
    }
    if($encode!='utf8'){
        $str = mb_convert_encoding($str,'utf8',$encode);
    }
    $osLen = mb_strlen($str);
    if($osLen<=$length){
        return $str;
    }
    $string = mb_substr($str,$start,$length,'utf8');
    $sLen = mb_strlen($string,'utf8');
    $bLen = strlen($string);
    $sCharCount = (3*$sLen-$bLen)/2;
    if($osLen<=$sCharCount+$length){
        $arr = preg_split('/(?<!^)(?!$)/u',mb_substr($str,$length+1,$osLen,'utf8'));
    }else {
        $arr = preg_split('/(?<!^)(?!$)/u',mb_substr($str,$length+1,$sCharCount,'utf8'));
    }
    foreach($arr as $value){
        if(ord($value)<128 && ord($value)>0){
            $sCharCount = $sCharCount-1;
        }else {
            $sCharCount = $sCharCount-2;
        }
        if($sCharCount<=0){
            break;
        }
        $string.=$value;
    }
    if(strlen($str)>strlen($string)){
        $string.='...';
    }
    return $string;
}

文件最后不要画蛇添足的添加文件结束符  ?>

3、直接调用函数:

<p class="l23">[field:description function="mb_sub(Html2Text(@me),68)"/]</p>

完成自定义函数!

抱歉!评论已关闭.