首页
友情链接
统计
关于本站
Search
1
毛玻璃UI-小菜狗同款个人主页
2,103 阅读
2
PHP 实现图片验证码之给 Typecho 评论加上验证码
1,503 阅读
3
Typechho网站美化技巧
990 阅读
4
Typecho Joe主题如何增加页码分页功能
817 阅读
5
Typecho个性主题模板
696 阅读
网站源码
Typecho
划水日常
wordpress
zblog
网络教程
游戏
登录
/
注册
Search
标签搜索
主题
教程
插件
网站美化
php
pjax
个人主页
发卡网
CSS
wordpress自定义字段
seo
HTML
wordpress函数代码
简洁
统计
当面付
要饭
ipv6
教材
打赏
小菜狗
累计撰写
123
篇文章
累计收到
30
条评论
首页
栏目
网站源码
Typecho
划水日常
wordpress
zblog
网络教程
游戏
页面
友情链接
统计
关于本站
搜索到
9
篇与
的结果
2023-10-13
多种排版的免费zblog图片图标主题模板ydiconf
ydiconf主题是一款设计简洁的免费图片网站类型zblog主题,响应式结构,内置有图标样式、大图样式和图文列表样式共三种排版的首页样式及分类列表页面样式,以及带侧边栏和不带侧边栏的文章内容页面样式,可自由选择。主题页面设计较为简洁,主要分为顶部、幻灯片、文章列表、侧边栏和底部,整体展示模块不多,适合不需要很丰富展示功能的图片站点。
2023年10月13日
58 阅读
1 评论
0 点赞
2023-10-13
zblog升级后登录提示非法访问、验证码不显示/报错的解决方法
zblog使用正常的情况下升级至zblog 1.7.3.3260或更高版本后,登录后台提示非法访问、验证码错误以及验证码不显示的问题,可能是因为从zblog 1.7.3.3260版本开始增加了对后台登录的2个保护功能,当主题插件出现兼容性问题或者其它问题,从而导致出现上面的问题。临时解决方法是针对提示在option.php里关掉CSRF保护功能或验证码功能,或者两个都关闭。
2023年10月13日
66 阅读
0 评论
0 点赞
2023-08-10
免费大气的zblog图片集相册展示型主题Jz52_Pictureset
这是一套设计大气的响应式全屏zblog图片网站主题,整体结构简约。左侧为固定导航栏,导航系统导航栏;右侧为主体内容,由大幅Banner图、图片列表和底部关注我们/关注我构成。支持支持图片浮窗观看、QQ、微信、微博等社交平台按钮图标,提供有简易的后台主题配置功能,可对主题进行简单的设置。整体而言,这是一套适合个人作品,摄影作品展示的图片集zblog主题。
2023年08月10日
56 阅读
0 评论
0 点赞
2023-07-10
CMS风格的心诺设计风尚zblog主题Sean_Cms
博客资讯类型的CMS设计风格,设计有幻灯片、24小时最新/热门/热评/随机文章排行榜、置顶推荐模块,提供有简单的后台主题配置面板,可进行幻灯片图片的添加/修改/删除,可设置网站Logo以及基本的SEO描述/关键词设置,另外还提供有一个广告位置。
2023年07月10日
67 阅读
0 评论
0 点赞
2023-06-19
功能完善的蓝色简约zblog免费分类CMS风格模板ydwiki
这个zblog主题具有简约的设计风格和完善的功能,它采用响应式自适应布局结构,免费提供多样化的自定义设置。主题的头部包含网站名称和导航栏,主体部分包括分类文章、最新列表和侧边栏,底部则是友情链接、版权信息和页面列表。尽管主题默认的整体结构比较简单,但通过丰富的自定义设置,用户可以根据需要进行多样化配置。
2023年06月19日
73 阅读
0 评论
0 点赞
2023-05-24
zblog自定义文章列表页分页条组件完整代码
开发zblog主题时,文章列表页面的翻页条习惯性使用{template:pagebar}调用,这个标签的作用是调用主题 template 目录下的 pagebar.php 模板,当使用的主题不存在这个模板,则调用默认 default 的 pagebar.php 模板,如果想稍微自定义一下这个翻页的HTML代码,可以把代码提取出来放在自己的主题上。
2023年05月24日
141 阅读
0 评论
6 点赞
2023-05-05
zblog新增自定义数据库表的方法代码
在zblog主题或插件应用开发中,难免会有新增数据库表的需求,直接手动在数据库中新增对于自用应用影响不大,但对于面向众多用户的收费应用就显得很不友好了,因此,通过代码在应用启用的时间自动创建对应的数据库表就很有必要。下面是小菜狗转自Z-Blog官方文库Wiki的以收藏文章功能为例演示zblog php关于自定义数据库表的教程,介绍了建表与增删改查,较为详细。{message type="success" content="该教程代码只验证了MySQL数据库,其余的需要自行验证。"/}教程声明定义数据表结构function 插件ID_defineDatabase() { $database = array( /** * 收藏表 */ '插件ID_Collect' => array( 'table' => '%pre%插件ID_collect', 'datainfo' => array( 'ID' => array('cc_ID', 'integer', '', 0), 'UID' => array('cc_UID', 'integer', '', 0), 'LogID' => array('cc_LogID', 'integer', '', 0), 'CreateTime' => array('cc_CreateTime', 'integer', '', 0), 'Meta' => array('cc_Meta', 'string', '', ''), ), ), ); foreach ($database as $key => $v) { $table = $v['table']; $datainfo = $v['datainfo']; $GLOBALS['table'][$key] = $table; $GLOBALS['datainfo'][$key] = $datainfo; } return $database; } 插件ID_defineDatabase();这是一个声明插件数据表结构的函数。为什么要在定义函数以后就执行?因为需要在插件运行前,将结构信息赋值到全局变量中,来自于c_system_base.php同类风格的声明结构,并不表示就是固定格式,其中建议以类的名称为数据库表的声明key,方便后期的可读性。字段“table”是数据表的名称,用%pre%+插件ID+数据表名称的方式组成。字段“datainfo”是数据字段的结构,有具体的声明结构,可以在zb_system/function/lib/sql/中查看不同数据库的语句拼接。关于datainfo的声明结构说明:根据声明的顺序,数组第一条在MySQL中会加上索引(PRIMARY KEY)。声明的代码结构array('字段名', '类型', '长度参数(根据类型定义)', '默认值');下面是简单演示常用类型的声明,具体的类型可以自行补充MySQL的基础知识// int array('ID', 'integer', '', 0), // tinyint array('Type', 'integer', 'tinyint', 0), // bigint array('EndTime', 'integer', 'bigint', 0), // char array('Value', 'char', 10, ''), // varchar array('Title', 'string', 250, ''), // longtext array('Content', 'string', '', ''),写一个创建数据库表的方法,在启用主题或插件应用的时候执行function 插件ID_createTable() { global $zbp; $database = 插件ID_defineDatabase(); foreach ($database as $k => $v) { if (!$zbp->db->ExistTable($v['table'])) { $s = $zbp->db->sql->CreateTable($v['table'], $v['datainfo']); $zbp->db->QueryMulit($s); } } } // 删表的方法 具体什么时候删,自行决定 function 插件ID_delTable() { global $zbp; $database = 插件ID_defineDatabase(); foreach ($database as $k => $v) { if ($zbp->db->ExistTable($v['table'])) { $s = $zbp->db->sql->DelTable($v['table']); $zbp->db->QueryMulit($s); } } }在插件的启用函数中调用function InstallPlugin_插件ID() { 插件ID_createTable(); }接下来声明一个类继承Base完成基本的增删改查操作class 插件ID_Collect extends Base { /** * 在构造函数中 * 将定义的数据表名称与数据结构交给父类Base去处理 */ public function __construct() { global $zbp; parent::__construct($zbp->table['插件ID_Collect'], $zbp->datainfo['插件ID_Collect'], __CLASS__); // 因为数据中有一条创建时间字段,提前在此赋予默认值 $this->CreateTime = time(); } }基于这个类,就可以进行基本的curd了操作类进行增删改1、新增一条数据function 插件ID_addCollect($userId, $logId) { $collect = new 插件ID_Collect(); $collect->UID = $userId; $collect->LogID = $logId; $collect->Save(); // 保存后,$collect->ID就能输出这条记录的ID了 echo '添加成功'; }如果不操作类进行增加,也可以使用sql插入数据,参考:function 插件ID_addCollect($userId, $logId){ $dataArr = array( 'UID' = $userId, 'LogID' = $logId ); $sql= $zbp->db->sql->insert($GLOBALS['table']['插件ID_addCollect'],$dataArr); $insert = $zbp->db->insert($sql); if($insert){ echo '添加成功'; die(); }else{ echo '添加失败'; die(); 2、更新一条数据function 插件ID_updateCollect($collectId) { $collect = new 插件ID_Collect(); $status = $collect->LoadInfoByID($collectId); if ($status) { $collect->CreateTime = time(); $collect->Save(); } // 这样收藏的时间就变成了最新的 }3、删除一条数据function 插件ID_delCollect($collectId) { $collect = new 插件ID_Collect(); $status = $collect->LoadInfoByID($collectId); if ($status) { $collect->Del(); } }4、查询数据,单独阐述:已知ID的情况,通过上面演示的LoadInfoByID($ID) 就能通过父类Base的方法读取一条数据,在只知道UID和LogID,就需要组装where语句。function 插件ID_getUserCollect($userId, $logId) { global $zbp; $w = array(); $w[] = array('=', 'cc_UID', $userId); $w[] = array('=', 'cc_LogID', $logId); $sql = $zbp->db->sql->Select($zbp->table['插件ID_Collect'], array('*'), $w); $list = $zbp->GetListType('插件ID_Collect', $sql); if (count($list) > 0) { return $list[0]; } return false; }其它的查询,比如查询某用户的指定数量收藏记录function 插件ID_getUserCollectList($userId, $num = 10) { global $zbp; $w = array(); $w[] = array('=', 'cc_UID', $userId); $num = (int) $num > 0 ? (int) $num : 10; $sql = $zbp->db->sql->Select($zbp->table['插件ID_Collect'], array('*'), $w, null, $num); $list = $zbp->GetListType('插件ID_Collect', $sql); return $list; }扩展:多说插件参考#表名 $table['plugin_duoshuo_comment'] = '%pre%plugin_duoshuo_comment'; ###注意表名要加上%pre%可以区分同一数据库中的不同的程序所生成的表 #表结构 $datainfo['plugin_duoshuo_comment'] = array( 'ID' => array('ds_ID','integer','',0), 'key' => array('ds_key','string',128,''), 'cmtid' => array('ds_cmtid','integer','',0) ); #全局声明 global $zbp; #判断是否已创建,否则新建数据表 if(!$zbp->db->ExistTable($GLOBALS['table']['plugin_duoshuo_comment'])) { $s = $zbp->db->sql->CreateTable($GLOBALS['table']['plugin_duoshuo_comment'],$GLOBALS['datainfo']['plugin_duoshuo_comment']); $zbp->db->QueryMulit($s); }{message type="info" content="有区别,但可参考。"/}
2023年05月05日
117 阅读
0 评论
0 点赞
2023-04-20
zblog获取数组中指定键值元素的函数GetValueInArray()
PHP获取数组中某键值的元素是Z-Blog主题和插件应用开发中常遇到的需求,实现的代码也比较简单。但Z-Blog也内置封装了一个从数组中获取指定键值的元素的函数 GetValueInArray() ,使用内置的函数可以省去 isset 判断,同时内部封装了所需键值是否存在的判断,不存在时则返回指定的参数。函数结构GetValueInArray($array, $name, $default = null)参数说明$array – 数组名,必选$name – 下标key,必选$default – 键值不存在时返回的值,可选,默认为null代码示例$siteInfos = array( "url" => "https://docs.zblogcn.com/php/", "git" => "https://github.com/zblogcn/docs-zblogphp", "engine" => "docsify", ); $siteUrl = GetValueInArray($siteInfos, "url", ""); //或是 $siteUrl = GetValueInArray($siteInfos, 'url'); echo $siteUrl; // https://docs.zblogcn.com/php/函数位置 :zb_system/function/c_system_common.phpZ-Blog Wiki :https://docs.zblogcn.com/php/#/books/dev-25-functions?id=getvalueinarray
2023年04月20日
63 阅读
0 评论
0 点赞
2023-04-19
适合搭建手机APP应用推广下载网站的绿色zblog模板mzaapp
主题介绍mzaapp主题是一款淡绿色色调、CMS排版风格,设计有丰富内容展示模块,采用了响应式自适应式结构布局,支持PC电脑端和移动手机端浏览器访问,整体界面舒适精美,后台功能配置完善,非常适合用来做移动手机应用APP下载网站的zblog主题。主题特色首页设计有轮播图、图片链接、小编推荐、APP列表、新闻资讯等展示模块,各模块都提供有对应的配置功能,可以在后台非常便捷地进行添加修改删除等操作。针对资讯和APP内置两种不同的列表模板及内容模板,且支持自定义不同分类的文章显示数量。自带了最新/热门/热评应用排行列表和最新/热门/热评资讯排行列表共六个侧栏模块,支持多个侧边栏,可以在首页、APP列表页、资讯列表页、APP内容页、资讯内容页分别调用不同的模块。提供有简单易用的后台主题配置面板,拥有基础设置、首页设置、联系信息、轮播图片、图片链接、SEO设置以广告设置共六个配置板块。支持自定义首页、分类页、标签页、文章页和单页面的标题、关键词及描述。APP可以设置应用的语言、大小、版本、作者、星级,可以上传图标、截图、安卓/苹果/鸿蒙安装文件,支持本地上传和APP外链两种方式,根据APP链接自动生成二维码。主题支持电脑、平板和手机访问,兼容PC端和移动端的IE10+、Firefox、Chrome、Safari、Opera等主流浏览器。演示下载演示地址:http://zblog.muziang.com/mzaapp/购买地址: Z-Blog应用中心
2023年04月19日
138 阅读
0 评论
0 点赞