phpcms V9 栏目管理
关于phpcms V9框架系统后台管理之栏目管理,请参见下文的源码分析(添加栏目和修改栏目):
参照添加栏目的界面图示,便于对源代码的理解:
1 <?php 2 3 // 文件路径:phpcms/modules/admin/category.php 控制器,主要用来控制栏目相关的操作 4 5 defined('IN_PHPCMS') or exit('No permission resources.'); 6 pc_base::load_app_class('admin','admin',0); // 加载admin模块下的admin.class.php类库文件 7 8 class category extends admin 9 { 10 private $db; 11 public $siteid; 12 function __construct() 13 { 14 parent::__construct(); // 调父类构造 即admin.class.php文件中类的构造函数 15 $this->db = pc_base::load_model('category_model'); // 加载模型数据库 16 $this->siteid = $this->get_siteid(); // 调用父类方法获取当前站点ID 17 } 18 /** 19 * 管理栏目 20 */ 21 public function init () 22 { 23 $show_pc_hash = ''; 24 $tree = pc_base::load_sys_class('tree'); //加载树型类,可以生产任何的树型结构,返回一个树型的实例化对象。 25 $models = getcache('model','commons'); //获取"caches/caches_commons/caches_data/model.cache.php"中缓存的模型相关数据 26 $sitelist = getcache('sitelist','commons');//获取"caches/caches_commons/caches_data/sitelist.cache.php"中缓存数据 27 $category_items = array(); // 定义数组 28 foreach ($models as $modelid=>$model) //模型id=>模型信息(模型:文章模型、下载模型、图片模型) 29 { 30 //当前模型id下所有栏目是否有子栏目,1-有 0-无 31 $category_items[$modelid] = getcache('category_items_'.$modelid,'commons'); 32 } 33 $tree->icon = array(' │ ',' ├─ ',' └─ '); // 树状结构图 34 $tree->nbsp = ' '; //   注意这个为空格。此句意思即三个空格。 35 $categorys = array(); 36 //读取缓存 37 $result = getcache('category_content_'.$this->siteid,'commons'); //当前站点ID下所有栏目的详细配置信息 38 $show_detail = count($result) < 500 ? 1 : 0; 39 $parentid = $_GET['parentid'] ? intval($_GET['parentid']) : 0; //此时$parentid=0,代表顶级分类 40 $html_root = pc_base::load_config('system','html_root'); //生成静态文件的路径 ,默认为"/html" 41 //0-内部栏目、1-<font color="blue">单网页</font> 、2-<font color="red">外部链接</font> 42 $types = array(0 => L('category_type_system'),1 => L('category_type_page'),2 => L('category_type_link')); 43 if(!empty($result)) 44 { 45 foreach($result as $r) 46 { 47 $r['modelname'] = $models[$r['modelid']]['name']; //空、文章模型、下载模型、图片模型 48 $r['str_manage'] = ''; 49 if(!$show_detail) 50 { 51 if($r['parentid']!=$parentid) 52 continue; 53 $r['parentid'] = 0; 54 $r['str_manage'] .= '<a href="?m=admin&c=category&a=init&parentid='.$r['catid'].'&menuid='.$_GET['menuid'].'&s='.$r['type'].'&pc_hash='.$_SESSION['pc_hash'].'">'.L('manage_sub_category').'</a> | '; 55 } 56 //添加子栏目的url链接 $r['type']:1-单网页 0-有子栏目的分类 57 $r['str_manage'] .= '<a href="?m=admin&c=category&a=add&parentid='.$r['catid'].'&menuid='.$_GET['menuid'].'&s='.$r['type'].'&pc_hash='.$_SESSION['pc_hash'].'">'.L('add_sub_category').'</a> | '; 58 //修改、删除、批量移动 的url链接 59 $r['str_manage'] .= '<a href="?m=admin&c=category&a=edit&catid='.$r['catid'].'&menuid='.$_GET['menuid'].'&type='.$r['type'].'&pc_hash='.$_SESSION['pc_hash'].'">'.L('edit').'</a> | <a href="javascript:confirmurl(\'?m=admin&c=category&a=delete&catid='.$r['catid'].'&menuid='.$_GET['menuid'].'\',\''.L('confirm',array('message'=>addslashes($r['catname']))).'\')">'.L('delete').'</a> | <a href="?m=admin&c=category&a=remove&catid='.$r['catid'].'&pc_hash='.$_SESSION['pc_hash'].'">'.L('remove','','content').'</a>'; 60 //0-内部栏目、1-单网页、2-外部链接 61 $r['typename'] = $types[$r['type']]; 62 //是否在导航显示:1-显示 2-不显示 注意:不显示时会出现一个不在导航显示的小图标 63 $r['display_icon'] = $r['ismenu'] ? '' : ' <img src ="'.IMG_PATH.'icon/gear_disable.png" title="'.L('not_display_in_menu').'">'; 64 //如果为单网页或无子分类 65 if($r['type'] || $r['child']) 66 { 67 $r['items'] = ''; // 数据量 68 } 69 else 70 { 71 $r['items'] = $category_items[$r['modelid']][$r['catid']]; 72 } 73 $r['help'] = ''; 74 //将字符串转换为数组:$r['setting']-添加分类时的配置项,是一个字符串 75 $setting = string2array($r['setting']); 76 if($r['url']) 77 { 78 if(preg_match('/^(http|https):\/\//', $r['url'])) 79 { 80 //分类目录名称 81 $catdir = $r['catdir']; 82 //是否生成到根目录 83 $prefix = $r['sethtml'] ? '' : $html_root; 84 if($this->siteid==1) 85 { 86 //分类目录:"html/父级目录名称/当前目录名称" 87 $catdir = $prefix.'/'.$r['parentdir'].$catdir; 88 } 89 else 90 { 91 $catdir = $prefix.'/'.$sitelist[$this->siteid]['dirname'].$html_root.'/'.$catdir; 92 } 93 if($r['type']==0 && $setting['ishtml'] && strpos($r['url'], '?')===false && substr_count($r['url'],'/')<4) $r['help'] = '<img src="'.IMG_PATH.'icon/help.png" title="'.L('tips_domain').$r['url'].' '.L('directory_binding').' '.$catdir.'/">'; 94 } 95 else 96 { // 分站点 97 $r['url'] = substr($sitelist[$this->siteid]['domain'],0,-1).$r['url']; 98 } 99 // 访问 100 $r['url'] = "<a href='$r[url]' target='_blank'>".L('vistor')."</a>"; 101 } 102 else 103 { 104 $r['url'] = "<a href='?m=admin&c=category&a=public_cache&menuid=43&module=admin'><font color='red'>".L('update_backup')."</font></a>"; 105 } 106 // 分类信息 107 $categorys[$r['catid']] = $r; 108 } 109 } 110 $str = "<tr> 111 <td align='center'><input name='listorders[\$id]' type='text' size='3' value='\$listorder' class='input-text-c'></td> 112 <td align='center'>\$id</td> 113 <td >\$spacer\$catname\$display_icon</td> 114 <td>\$typename</td> 115 <td>\$modelname</td> 116 <td align='center'>\$items</td> 117 <td align='center'>\$url</td> 118 <td align='center'>\$help</td> 119 <td align='center' >\$str_manage</td> 120 </tr>"; 121 $tree->init($categorys); 122 //生成分类树相关的html代码 123 $categorys = $tree->get_tree(0, $str); 124 //模版文件 125 include $this->admin_tpl('category_manage'); 126 } 127 128 /** 129 * 添加栏目 130 */ 131 public function add() 132 { 133 // 点击”提交“按钮 134 if(isset($_POST['dosubmit'])) 135 { 136 pc_base::load_sys_func('iconv'); 137 $_POST['info']['type'] = intval($_POST['type']); //0-内部栏目 1-单网页 2-外部链接 138 139 //如果不是批量添加栏目名称 140 if(isset($_POST['batch_add']) && empty($_POST['batch_add'])) 141 { 142 if($_POST['info']['catname']=='') //如果单条添加栏目名称为空,则给出提示 143 showmessage(L('input_catname')); 144 $_POST['info']['catname'] = safe_replace($_POST['info']['catname']); 145 $_POST['info']['catname'] = str_replace(array('%'),'',$_POST['info']['catname']); 146 if($_POST['info']['type'] != 2) //如果不是外部链接 147 { //如果英文目录为空,则给出提示信息 148 if($_POST['info']['catdir']=='') 149 showmessage(L('input_dirname')); 150 if(!$this->public_check_catdir(0,$_POST['info']['catdir'])) showmessage(L('catname_have_exists')); 151 } 152 } 153 154 $_POST['info']['siteid'] = $this->siteid; //当前站点ID 155 $_POST['info']['module'] = 'content'; //content模块 156 $setting = $_POST['setting']; 157 if($_POST['info']['type']!=2) //如果不是外部链接 158 { 159 //栏目生成静态配置 160 if($setting['ishtml']) //如果栏目生成HTML 161 { 162 $setting['category_ruleid'] = $_POST['category_html_ruleid']; //栏目页的url规则 163 } 164 else 165 { 166 $setting['category_ruleid'] = $_POST['category_php_ruleid']; 167 $_POST['info']['url'] = ''; //绑定域名 168 } 169 } 170 171 //内容生成静态配置 172 if($setting['content_ishtml']) //如果内容生成HTML 173 { 174 $setting['show_ruleid'] = $_POST['show_html_ruleid'];//内容页的url规则 175 } 176 else 177 { 178 $setting['show_ruleid'] = $_POST['show_php_ruleid']; 179 } 180 if($setting['repeatchargedays']<1) //重复收费设置,如:一天内不重复收费 181 $setting['repeatchargedays'] = 1; 182 $_POST['info']['sethtml'] = $setting['create_to_html_root']; //是否生成到根目录 183 $_POST['info']['setting'] = array2string($setting); //将这些设置项转化为一个字符串 184 185 $end_str = $old_end = '<script type="text/javascript">window.top.art.dialog({id:"test"}).close();window.top.art.dialog({id:"test",content:\'<h2>'.L("add_success").'</h2><span style="fotn-size:16px;">'.L("following_operation").'</span><br /><ul style="fotn-size:14px;"><li><a href="?m=admin&c=category&a=public_cache&menuid=43&module=admin" target="right" οnclick="window.top.art.dialog({id:\\\'test\\\'}).close()">'.L("following_operation_1").'</a></li><li><a href="'.HTTP_REFERER.'" target="right" οnclick="window.top.art.dialog({id:\\\'test\\\'}).close()">'.L("following_operation_2").'</a></li></ul>\',width:"400",height:"200"});</script>'; 186 if(!isset($_POST['batch_add']) || empty($_POST['batch_add'])) 187 { 188 //目录的名称必须是gbk编码格式 189 $catname = CHARSET == 'gbk' ? $_POST['info']['catname'] : iconv('utf-8','gbk',$_POST['info']['catname']); 190 $letters = gbk_to_pinyin($catname); //将gbk编码格式的中文目录名称转化为拼音 191 $_POST['info']['letter'] = strtolower(implode('', $letters)); 192 //将数据插入到category数据表,并返回刚插入的栏目id,注意:insert函数在libs/classes/model.class.php类库中 193 $catid = $this->db->insert($_POST['info'], true); 194 //更新角色权限 195 $this->update_priv($catid, $_POST['priv_roleid']); 196 //更新会员组权限 197 $this->update_priv($catid, $_POST['priv_groupid'],0); 198 } 199 else 200 {//批量添加 201 $end_str = ''; 202 $batch_adds = explode("\n", $_POST['batch_add']); //批量添加栏目,以\n分割多个栏目名称 203 foreach ($batch_adds as $_v) 204 { 205 if(trim($_v)=='') 206 continue; 207 $names = explode('|', $_v); //以"|"分割栏目中文名称与栏目英文名称 208 $catname = $names[0]; 209 $_POST['info']['catname'] = trim($names[0]); //栏目中文名称 210 $letters = gbk_to_pinyin($catname); //栏目的拼音 211 $_POST['info']['letter'] = strtolower(implode('', $letters)); 212 //如果栏目英文名称存在,则使用英文名称作为英文目录,否则使用拼音作为英文目录 213 $_POST['info']['catdir'] = trim($names[1]) ? trim($names[1]) : trim($_POST['info']['letter']); 214 // 若不存在目录 215 if(!$this->public_check_catdir(0,$_POST['info']['catdir'])) 216 { 217 $end_str .= $end_str ? ','.$_POST['info']['catname'].'('.$_POST['info']['catdir'].')' : $_POST['info']['catname'].'('.$_POST['info']['catdir'].')'; 218 continue; 219 } 220 $catid = $this->db->insert($_POST['info'], true); 221 $this->update_priv($catid, $_POST['priv_roleid']); 222 $this->update_priv($catid, $_POST['priv_groupid'],0); 223 } 224 $end_str = $end_str ? L('follow_catname_have_exists').$end_str : $old_end; 225 } 226 $this->cache(); //更新缓存 227 showmessage(L('add_success').$end_str); //添加成功提示信息 228 } 229 else 230 { 231 /* 232 * 获取站点模板信息 233 */ 234 //加载global.func.php文件 235 pc_base::load_app_func('global'); 236 237 $template_list = template_list($this->siteid, 0); 238 foreach ($template_list as $k=>$v) 239 { 240 //$template_list['default']='默认模板' 241 $template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname']; 242 unset($template_list[$k]); 243 } 244 $show_validator = ''; 245 if(isset($_GET['parentid'])) //添加子栏目 246 { 247 $parentid = $_GET['parentid']; 248 $r = $this->db->get_one(array('catid'=>$parentid)); 249 if($r) extract($r,EXTR_SKIP); 250 $setting = string2array($setting); 251 } 252 //加载form.class.php类库 253 pc_base::load_sys_class('form','',0); 254 $type = $_GET['s']; //添加子栏目时会传递此参数:0-内部栏目、1-单网页、2-外部链接 255 if($type == 0) //0-内部栏目 256 { 257 $exists_model = false; //模型是否存在的标识 258 $models = getcache('model','commons'); //获取默认的三种模型信息:文章模型、下载模型、图片模型 259 foreach($models as $_m) 260 { 261 if($this->siteid == $_m['siteid']) //如果这默认的三种模型属于当前站点ID 262 { 263 $exists_model = true; //将模型是否存在标识赋值给true 264 break; 265 } 266 } 267 if(!$exists_model) 268 showmessage(L('please_add_model'),'?m=content&c=sitemodel&a=init&menuid=59',5000); 269 include $this->admin_tpl('category_add'); // 模版文件category_add.tpl.php 270 } 271 elseif ($type==1) 272 { 273 include $this->admin_tpl('category_page_add'); // 模版文件category_page_add.tpl.php 274 } 275 else 276 { 277 include $this->admin_tpl('category_link');// 模版文件category_link.tpl.php 278 } 279 } 280 } 281 /** 282 * 修改栏目 283 */ 284 public function edit() 285 { 286 if(isset($_POST['dosubmit'])) 287 { 288 pc_base::load_sys_func('iconv'); 289 $catid = 0; 290 $catid = intval($_POST['catid']); 291 $setting = $_POST['setting']; 292 //上级栏目不能是自身 293 if($_POST['info']['parentid']==$catid) 294 { 295 showmessage(L('operation_failure'),'?m=admin&c=category&a=init&module=admin&menuid=43'); 296 } 297 //栏目生成静态配置 298 if($_POST['type'] != 2) 299 { 300 if($setting['ishtml']) 301 { 302 $setting['category_ruleid'] = $_POST['category_html_ruleid']; 303 } 304 else 305 { 306 $setting['category_ruleid'] = $_POST['category_php_ruleid']; 307 $_POST['info']['url'] = ''; 308 } 309 } 310 //内容生成静态配置 311 if($setting['content_ishtml']) 312 { 313 $setting['show_ruleid'] = $_POST['show_html_ruleid']; 314 } 315 else 316 { 317 $setting['show_ruleid'] = $_POST['show_php_ruleid']; 318 } 319 if($setting['repeatchargedays']<1) 320 $setting['repeatchargedays'] = 1; 321 $_POST['info']['sethtml'] = $setting['create_to_html_root']; 322 $_POST['info']['setting'] = array2string($setting); 323 $_POST['info']['module'] = 'content'; 324 $catname = CHARSET == 'gbk' ? safe_replace($_POST['info']['catname']) : iconv('utf-8','gbk',safe_replace($_POST['info']['catname'])); 325 $catname = str_replace(array('%'),'',$catname); 326 $letters = gbk_to_pinyin($catname); 327 $_POST['info']['letter'] = strtolower(implode('', $letters)); 328 329 //应用权限设置到子栏目 330 if($_POST['priv_child']) 331 { 332 $arrchildid = $this->db->get_one(array('catid'=>$catid), 'arrchildid'); 333 if(!empty($arrchildid['arrchildid'])) 334 { 335 $arrchildid_arr = explode(',', $arrchildid['arrchildid']); 336 if(!empty($arrchildid_arr)) 337 { 338 foreach ($arrchildid_arr as $arr_v) 339 { 340 $this->update_priv($arr_v, $_POST['priv_groupid'], 0); 341 } 342 } 343 } 344 } 345 346 //应用模版到所有子栏目 347 if($_POST['template_child']) 348 { 349 $this->categorys = $categorys = $this->db->select(array('siteid'=>$this->siteid,'module'=>'content'), '*', '', 'listorder ASC, catid ASC', '', 'catid'); 350 $idstr = $this->get_arrchildid($catid); 351 if(!empty($idstr)) 352 { 353 $sql = "select catid,setting from phpcms_category where catid in($idstr)"; 354 $this->db->query($sql); 355 $arr = $this->db->fetch_array(); 356 if(!empty($arr)) 357 { 358 foreach ($arr as $v) 359 { 360 $new_setting = array2string( 361 array_merge(string2array($v['setting']), array('category_template' => $_POST['setting']['category_template'],'list_template' => $_POST['setting']['list_template'],'show_template' => $_POST['setting']['show_template']) 362 )); 363 $this->db->update(array('setting'=>$new_setting), 'catid='.$v['catid']); 364 } 365 } 366 } 367 } 368 369 $this->db->update($_POST['info'],array('catid'=>$catid,'siteid'=>$this->siteid)); 370 $this->update_priv($catid, $_POST['priv_roleid']); 371 $this->update_priv($catid, $_POST['priv_groupid'],0); 372 $this->cache(); //更新缓存 373 //更新附件状态 374 if($_POST['info']['image'] && pc_base::load_config('system','attachment_stat')) 375 { 376 $this->attachment_db = pc_base::load_model('attachment_model'); //加载附件数据库模型 377 $this->attachment_db->api_update($_POST['info']['image'],'catid-'.$catid,1); 378 } 379 showmessage(L('operation_success').'<script type="text/javascript">window.top.art.dialog({id:"test"}).close();window.top.art.dialog({id:"test",content:\'<h2>'.L("operation_success").'</h2><span style="fotn-size:16px;">'.L("edit_following_operation").'</span><br /><ul style="fotn-size:14px;"><li><a href="?m=admin&c=category&a=public_cache&menuid=43&module=admin" target="right" οnclick="window.top.art.dialog({id:\\\'test\\\'}).close()">'.L("following_operation_1").'</a></li></ul>\',width:"400",height:"200"});</script>','?m=admin&c=category&a=init&module=admin&menuid=43'); 380 } 381 else 382 { 383 //获取站点模板信息 384 pc_base::load_app_func('global'); 385 $template_list = template_list($this->siteid, 0); 386 foreach ($template_list as $k=>$v) 387 { 388 $template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname']; 389 unset($template_list[$k]); 390 } 391 392 $show_validator = $catid = $r = ''; 393 $catid = intval($_GET['catid']); 394 pc_base::load_sys_class('form','',0); 395 $r = $this->db->get_one(array('catid'=>$catid)); 396 if($r) 397 extract($r); 398 $setting = string2array($setting); 399 400 $this->priv_db = pc_base::load_model('category_priv_model'); 401 $this->privs = $this->priv_db->select(array('catid'=>$catid)); 402 403 $type = $_GET['type']; 404 // 依据类型选择模版文件 0-内部栏目、1-单网页、2-外部链接 405 if($type == 0) 406 { 407 include $this->admin_tpl('category_edit'); 408 } 409 elseif ($type == 1) 410 { 411 include $this->admin_tpl('category_page_edit'); 412 } 413 else 414 { 415 include $this->admin_tpl('category_link'); 416 } 417 } 418 }
系统包含模块,模块包括栏目,栏目绑定模型,模型指定模板。
Good Good Study, Day Day Up.
顺序 选择 循环 总结
转载于:https://www.cnblogs.com/Braveliu/p/5103688.html
phpcms V9 栏目管理相关推荐
- v9php 碎片信息,phpcms v9碎片管理及调用技巧分享
今天在这里将分享下Phpcms V9碎片管理及调用技巧.这是关于模板数据自定义.方便客户在后台管理数据调用的一个技巧. 在给客户定制模板的时候,往往会涉及到的一个问题就是:有些数据(图片文字,比如LO ...
- phpcms v9 栏目伪静态完全自定义为栏目英文目录名
1,后台增加url规则,增加后.导航上,或分页号上,会自动替换为静态的样式.类似www.abc.com/news/2/ 2表示页码 phpcms v9 的后台扩展,url规则,添加两个规则,一个是名称 ...
- phpcms v9 实现外部栏目链接在新窗口打开
phpcms v9 栏目导航的外部链接默认在本地窗口打开,要实现外部链接在新窗口打开,可以修改模板文件heard.html,在a标签内添加一个if函数. 例如: <div cla ...
- 用PHPcms V9四步完成WAP手机站搭建
用PHPCMS最新发布的V9搭建了ONOW中文网,WEB网站(www.onow.cn)完成后,有用户提供手机访问的问题, 于是着手搭建ONOW手机WAP站(3g.onow.cn).用PHPCMS V9 ...
- PHPCMS V9 学习总结(转)
转自:http://www.cnblogs.com/Braveliu/p/5074930.html 在实现PHPCMS网站过程中,根据业务需求,我们遇到很多问题,特此总结如下,以便大家参考学习. [1 ...
- phpcms V9的各种功能总结
[1]PHPCMS V9系统目录简析 在研究所有问题之前,请先了解一下系统的文件目录结构,具体如下图所示: [2]想修改默认的模板风格怎么办? PHPCMS V9默认的网页模板在phpcms目录下的t ...
- phpcms V9 整合 Discuz! X2 标准教程
整合原理: UCenter 作服务端:phpsso 与 Discuz! 分别作 UCenter 的客户端应用:phpsso 与 Discuz! 通过 UCenter 发生交互. phpcms 通过 p ...
- phpcms v9和discuz X3.1实现同步登陆退出论坛(已实现)
网络上文章很多,按步骤配置好了之后phpcms可以同步登录dz,但是dz登录后状态却无法同步到phpcms,网络上找了很多资料都大同小异,头大.只能自己调试了,废话不多说了. 以下网络上抄的安装步骤, ...
- PhpCms V9 调用栏目推荐位的解决办法
PhpCms V9 调用栏目推荐位的解决办法 http://www.veryhuo.com 2011-05-09 烈火学院 投递稿件 我有话说 PhpCms V9 调用栏目推荐位的解决办法 在栏目页/ ...
最新文章
- 22张深度学习精炼图笔记总结
- flutter 键盘遮挡输入框问题_flutter插件推荐之 keyboard_avoider - 解决输入时的键盘遮挡问题...
- escplise使用教程_eclipse使用教程
- SaltStack 学习笔记 - 第六篇: 详解Pillar
- STM32F103:二.(2)串口控制LED
- python3.5安装教程linux_安装Python 3.6在Ubuntu 16.04上
- java 当前时间 15分钟_怎么用java 获取15分钟以前的时间
- lable 标签右对齐
- APP支付宝登录第三方授权如何签约入口在哪里
- 创业和创业团队的感想感悟
- python的socket
- Linux电池电量信息读取,linux内核 – 如何在Linux内核模块中获取电池电量?
- 如何用outlook添加qq邮箱账户
- 赚钱套路分享:降维打击,报团取暖的玩法
- html水平线 虚线
- JSPX使用的几点注意
- 地平线:面向规模化量产的智能驾驶系统和软件开发
- 简单保护动物网页制作stu-works.com学生保护动物网页设计作品HTML 濒危动物静态网页成品下载
- 人工神经网络持续学习的脑激励重放
- 商品价格监控接口,超详细的介绍
热门文章
- 常见花材的固定的方法有哪些_什么是zeta电位?常见zeta电位分析方法有哪些?...
- win安装 lua php 扩展,window平台搭建Lua开发环境
- vue使用ajax库,Vue 中使用Ajax请求
- python可视化编程实战代码_Python数据可视化编程实战——导入数据
- java timer指定线程池_Java 定时器(Timer)及线程池里使用定时器实例代码
- MySQL 基数的定义
- IP与以太网的包收发操作
- Ad-Hoc Query入门
- PE学习.动手写PE.见缝插针
- ZKWeb网页框架2.1正式发布