05月31, 2015

onethink集团官网项目笔记整理(2015-05-31)

最近的一个网站项目是制作集团的官网,开始的时候是一起写了静态页面,之后又和同事一起套了onethink的模版页面.用的是公司内部整理的kconethink系统,基于onethink自己做了一些内部的扩展和相关的优化,在制作这个项目的过程中,也是多人合作开发,其中也遇到了不少的问题,正是由于客户的需求不断改变,有不少问题需要考虑,也让自己对这个系统更加的熟悉,学习到了更多的内容.onethink是基于thinkphp写的,其实根本还是得我们熟悉thinkphp的语法和相关基础知识,才能运用的顺手.

公司内部自定义插件

首先,公司内部自己自己扩展了不少的插件和钩子,有导航高亮,百度地图,ajajx分页插件等等.此次制作该官网,页面相关的要求倒是不少,同时要兼容手机端,而且还是双语切换,瀑布流效果等,分页效果基本上都是ajax分页插件实现的(也就是同事@qiang写ajax分页插件).不过在使用的过程中也还是遇到了不少的问题.记忆特表深刻的就是那个瀑布流效果和新闻列表页面的描述截取. 下面整理一下在这个项目中遇到的相关基础知识,进行相关的笔记记录: 1.项目中相关目标文件的配置信息,我们可以在分类管理中,点击编辑进行相关的配置:(如下图)

另外就是导航链接的相关配置,当有二级菜单的时候,我们直接进入二级菜单的第一个子菜单页面.(这里就需要进行相关的链接配置).并且在有二级菜单的选项时候,我们点击对应的栏目进入还要添加对应的二级菜单栏目.(点击的地方是后台的导航管理里面,在对应有二级菜单的地方进行加)

其次是导航栏目的调用部分代码: ##导航栏目部分做的相关判断:

<think:nav name='nav' tree='true'>
    <li>
        <a href="<if condition='!$nav[_]'>{:get_nav_url($nav['url'])}<else/>javascript:;</if>" class="<eq name='key' value='0'>smenu1</eq> snav" child="{:getChildUrl($nav['_'])}">
            <span>{$nav.title}</span>
            <notempty name='nav["_"]'><i class="icong"></i></notempty>
        </a>
        <notempty name='nav["_"]'>
            <div class="sub_menu">
                <div class="submenuContainer">
                    <ul>
                        <volist name="nav['_']" id="sub">
                                <li><a href="{:get_nav_url($sub['url'])}">{$sub.title}</a></li>
                        </volist>
                    </ul>
                </div>
            </div>
        </notempty>
    </li>
</think:nav>

注意事项

另外值得注意一点的是,当有二级下拉的子菜单的时候,点击导航管理,点击对应的导航栏目进去需要继续添加对应栏目的二级菜单,我自己再弄的时候确把这个给搞忘记了...^^^^^^ 另外感觉有一个感觉比较实用的功能就是新建相关的模型,其中有基于文档的模型和独立模型两种,其中可以根据自己的需求建立相关的模型,当新建立了模型后,数据库中就增加了相关对应的数据表,然后我们可以根据模版页面中所需展示的数据来添加对应的字段. ##模型管理里面,当新增模型的时候需要填写的列表定义部分

id:编号
title:标题:article/edit?cate_id=[category_id]&id=[id]
type:类型
update_time:最后更新
status:状态
view:浏览
id:操作:[EDIT]&cate_id=[category_id]|编辑,article/setstatus?status=-1&ids=[id]|删除

模版中进行相关的判断规则:

<if condition="$res[group] eq 1">
11111
<else/>
2222222
</if>

判断:(标签循环的时候添加判断)

<if condition="($key+1)%4 eq 0">class='list last'<else/>class='list'</if>

前台模版中对标题,描述中的html代码相关转义函数使用:前{$content|htmlspecialchars_decode} 前台模版中调用相关的截取函数:{$res.description|msubstr=0,60,'utf-8',true} @zhouzhiqiang修改了ot标签自带的<think:article>标签,使其支持传递参数catename值.

在读取数据的时候,有时候程序没有问题,但是读取的数据条数不对头,这是我们可以查看下查询的条件,看看是否读取了回收站中的数据,对回收站中的数据进行一遍过滤.

网信金融官网邮件发送记录(新建独立模型): 根据相关模板页面中的表单字段进行,在后台直接建立独立模型,然后点击导航栏目的 "系统->左侧菜单管理->新增邮件记录栏目" 然后填写相关的标题和链接. (如果不填写新建独立模型下面的列表定义的话,点击进去就没有进行相关的操作和记录,如果是建立基于文档模型的,如果不填写则无法提交).

点击菜单管理,点击进入邮件记录,进行新增菜单,将会在左侧菜单栏显示. 并且在新建立相关模型的时候,列表定义相关规则关系着相关模型数据的展示. 纠结蛮长时间的还是在处理瀑布流那块.我自己测试的时候,数据加载出来了.

但是就是没有应用上jquery.masonry.min.js插件的效果,最后还是同事修改了ajax分页插件,将数据在解析出来之后进行了处理.才应用上瀑布流效果... 最后新闻列表以及其他ajax分页数据显示部分的截取函数格式写法: 最外面的一层div要添加ajax_data_box的类名. 其次要写上:

<div class="single ajax_data_lists" style="display:none;">
<div class="thumb">
<img src="" class="addons_ajax_titlethumb" pos="titlethumb:src" alt="" style="max-width:198px">
</div>
<div class="text">
<h2><span class="time addons_ajax_create_time">{$res.create_time|date="y-m-d",###}</span><a href="" class="addons_ajax_title addons_ajax_url" pos="url:href">标题</a><img src="" class="addons_ajax_logo" pos="logo:src" width="74" height="30"/></h2>
<p class='addons_ajax_description'>简介</p>
</div>
</div>
<div class="pages">{:Hook('ajaxPage',array('cate_id'=>47,'fields'=>'title;description|msubstr=###,0,100;create_time|date=Y-m-d,###;titlethumb|get_cover_path_thumb;logo|get_cover_path_logo;__DOCUMENT.id as url|getDetailUrl','listRow'=>5,'order'=>'level desc,create_time desc','name'=>'dynamic'))}
<div class="ajax_data_page"></div>
</div>    

thinkphp自带截取字符串函数修复(fixed):

function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {  
if(function_exists("mb_substr")) {  
  if($suffix)  
   {   
        if($str==mb_substr($str, $start, $length, $charset)) 
            {  
                return mb_substr($str, $start, $length, $charset);      
            } 
        else   
            { 
                return mb_substr($str, $start, $length, $charset)."...";  
            }
    }  

else {  return mb_substr($str, $start, $length, $charset);   }   }  
elseif(function_exists('iconv_substr')) { if($suffix)   {  
if($str==iconv_substr($str,$start,$length,$charset)) 
{  return iconv_substr($str,$start,$length,$charset);  }    
else{ return iconv_substr($str,$start,$length,$charset)."..."; }} 
else  {   
    return iconv_substr($str,$start,$length,$charset);   }   }  
    $re['utf-8']  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";  
    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";   $re['gbk']  = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";  
    $re['big5']  = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";   preg_match_all($re[$charset], $str, $match); 
    $slice = join("",array_slice($match[0], $start, $length));  
    if($suffix) return $slice."…";  
return $slice; 
}

模板标签中,标签库中使用where条件

<div class="year year2015">
<think:article catename="fzlcwz" name='development'  where="developyear = 2015" order="developmonth desc" result='res' >
<div class="leftyear">
<if condition="$key eq 0">
<strong class="year">{$res.developyear}年</strong> 
<else/>
<strong class="year" style="opacity:0;filter:alpha(opacity=0); ">{$res.developyear}年</strong>
</if>
</div>
<div class="rightrecord">
<div class="center_info">
<span class="col1 month"><if condition="$res[developmonth] lt 10">0{$res.developmonth}<else/>{$res.developmonth}</if>月</span> 
<div class="listp">
    {$res.neirong}
</div>
</div>
</div>
</think:article>
</div>

本文链接:https://901web.com/post/onethink集团官网项目笔记整理2015-05-31.html

-- EOF --