首页
微语
统计
友链
留言
memos
圈子
图床
推荐
相册
网站监控
VPS监控
Search
1
实现typecho微信时光机功能的图文教程
45,562 阅读
2
为Typecho添加webp解析
43,230 阅读
3
emlog数据成功迁移到typecho
26,856 阅读
4
Memos备忘录,记录瞬间想法
25,931 阅读
5
Jasmine - 简约、美观的博客主题
24,586 阅读
手机达人
免费资源
电脑网络
娱乐休闲
网站建设
威言威语
Typecho
Emlog
WordPress
服务器
主题
插件
排行榜    
登录
/
注册
Search
标签搜索
wordpress
发布
插件
免费
教程
typecho
EMlog
PHP
代码
CSS
华为
图片
代码修改
安装
评论
手机
诺基亚
微信
文章
智能
Chen'mo
累计撰写
1,266
篇文章
累计收到
375
条评论
首页
栏目
手机达人
免费资源
电脑网络
娱乐休闲
网站建设
威言威语
Typecho
Emlog
WordPress
服务器
主题
插件
页面
微语
统计
友链
留言
memos
推荐
相册
网站监控
VPS监控
搜索到
21
篇与
的结果
2023-06-07
Typecho 1.2.1 更新了
此版本主要是一个安全更新,建议所有用户升级。XSS 漏洞主要是 #1535, #1539, #1545, #1560 这几个 ISSUE 提到的错误。由于参数和对提交数据的过滤不严,造成了站点会被攻击者利用的漏洞。此次修复后你可以安全地打开已经被攻击者污染的评论数据,当然我们建议你删除它们。对 MySQL 的 SSL 支持在某些运行环境中你可能需要通过 SSL 来连接 MySQL 数据库,目前我们已经加上了这一支持。更多的小更新对 PHP 8.1 的更多支持其它 Bug 修复感谢各位贡献者的无私工作。具体更新请见:https://github.com/typecho/typecho/releases/tag/v1.2.0正式版下载:https://github.com/typecho/typecho/releases/latest/download/typecho.zip[attach]1426[/attach]
2023年06月07日
13,278 阅读
0 评论
0 点赞
2022-11-20
32MB 起航教程 小内存VPS搭建typecho博客教程
第一步 买 VPShttps://securedragon.net/clients/cart.php?a=add&pid=299发工单让客服改成 32MB第二步 配置基础环境换系统,换成Alpine,这个真的很省资源wget https://www.moerats.com/usr/shell/alpine.sh && bash alpine.sh安装 Lighttpd,别试 Caddy 了,虽然 Caddy 配置 SSL 方便,但是实际没有 Lighttpd 省资源apk add lighttpd rc-update add lighttpd default rc-service lighttpd restart安装 PHP,这个年头了,当然要 PHP 7啦,毕竟 Typecho 都迁移到 PHP 7.2 + 了apk add php7 php7-ctype php7-curl php7-dom php7-fpm php7-iconv php7-gd php7-json php7-openssl php7-pdo php7-pdo_sqlite php7-sqlite3 php7-xml php7-xmlreader php7-phar php7-posix php7-ftp php7-session php7-bcmath php7-mcrypt php7-sockets php7-mbstring php7-tokenizer修改 PHP 配置sed -i 's@^;date.timezone.*@date.timezone = Asia/Shanghai@' /etc/php7/php.inised -i "s@^memory_limit.*@memory_limit = 12M@" /etc/php7/php.inised -i "s|;cgi.fix_pathinfo=.|cgi.fix_pathinfo=1|i" /etc/php7/php.ini修改 Lighttpd 配置,启用 FastCGI、SSL、rewrite、redirectsed -i 's/# include "mod_fastcgi.conf"/ include "mod_fastcgi.conf\ninclude "mod_ssl.conf""/g' /etc/lighttpd/lighttpd.confsed -i 's/# "mod_rewrite","/ "mod_rewrite","/g' /etc/lighttpd/lighttpd.confsed -i 's/# "mod_redirect","/ "mod_redirect","/g' /etc/lighttpd/lighttpd.confrc-service lighttpd restartcat > /etc/lighttpd/mod_ssl.conf <<EOFserver.modules += ("mod_openssl")server.modules += ("mod_setenv")$HTTP["scheme"] == "https" {setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; ")}第三步 配置虚拟主机先使用 acme.sh申请SSL证书,Lighttpd要求SSL证书和私钥放在一个文件里mkdir -p /web/32mb.cc chown -R lighttpd.lighttpd /web/32mb.cc export DP_Id=xxx export DP_Key=xxx acme.sh --issue --dns dns_dp -d 32mb.cc -d *.32mb.cc acme.sh --install-cert -d 32mb.cc \ --key-file /web/32mb.cc.key \ --fullchain-file /web/32mb.cc.crt \ --reloadcmd "cat /web/32mb.cc.key /web/32mb.cc.crt > /web/32mb.cc.pem; service lighttpd restart"新增虚拟主机,修改 /etc/lighttpd/lighttpd.conf,在最后一行之前加入# virtual host $HTTP["host"] =~ "^(www.)?32mb.cc" { server.document-root = "/web/32mb.cc" accesslog.filename = "/web/32mb.cc.log" $HTTP["scheme"] == "http" { # redirect to https, port 443: url.redirect = (".*" => "https://%0$0") } } $SERVER["socket"] == ":443" { ssl.engine = "enable" ssl.pemfile = "/web/32mb.cc.pem" $HTTP["host"] =~ "(^|www\.)32mb.cc" { ssl.pemfile = "/web/32mb.cc.pem" # 这是 typecho 的伪静态规则,其他程序自行修改 url.rewrite-if-not-file = ( "^/(admin|usr)/(.*)" => "/$1/$2", "^/(.*)$" => "/index.php/$1" ) } }然后就是安装 Typecho 啦
2022年11月20日
13,042 阅读
0 评论
0 点赞
2022-11-18
64M小内存成功安装Apline+Caddy+PHP8+Sqlite3+typecho
接上文,继续折腾64M的小鸡。大点内存就不放静态网站了,搭个typecho吧。一、后台系统重装为Apline3.15版本,结果SSH不上了,老是拒绝密码。只能VNC进去,编辑vi /etc/ssh/sshd_config 修改 PermitRootLogin yes如果没有这个文件,先安装SSHapk add opensshrc-update add sshd/etc/init.d/sshd start 连接SSH后,编辑 vi /etc/resolv.conf 修改nameserver 2a03:7900:2:0:31:3:104:161二、安装PHP8apk add php8 php8-fpm php8-opcache php8-ctype php8-pdo_sqlite php8-session php8-curl php8-pdo_pgsql php8-sqlite3 php8-mbstring三、安装Caddy2apk add caddy四、配置网站vi /etc/caddy/Caddyfile64m.513513.xyz { root * /www encode gzip php_fastcgi localhost:9000 file_server }五、启动caddy php8rc-service caddy restart rc-service php8-fpm restart六、安装typecho七、探针:https://64m.513513.xyz/tz.php感想:目前伪静态没解决。速度个人觉得还能接受。
2022年11月18日
14,077 阅读
0 评论
0 点赞
2022-11-07
Typecho 评论验证插件 hCaptcha
最近的博客收到的垃圾邮件越来越多,虽然设置了简单的算术验证,但对于 bot 来说形同虚设,每天都能收到 10+ 的垃圾邮件,不得不上一些更有效的验证手段。研究了一圈网上能搜到的评论验证插件,基本上都是年久未修,最后准备使用 reCAPTCHAv3 这个插件,但考虑到 reCaptcha 在国内几乎不可用,所以在此基础上修改为了使用 hCaptcha 验证虽然在不少地区的体验也很糟糕。使用方法Github 地址:https://github.com/scenery/typecho-pluginsTypecho 版本:>= 1.2.0本站备份下载:[attach]1357[/attach]a. 注册 hCaptcha 账号,在 Sites 菜单栏里点击 New Site 添加一个网站获取 Site Key,点击你的头像 - Settings 获取 Secret Key。b. 下载插件,文件夹命名为 hCaptcha 后上传到网站 /usr/plugins/ 路径下。c. 进入网站后台-控制台-插件,点击启用:Site Key:第一步中获取的 Site KeySecret Key:第一步中获取的 Secret KeyWidget Theme:主题颜色,可设置 Light 或者 DarkWidget Size:样式大小,可设置 Normal 或者 Compact设置好后点击保存。d. 打开 /usr/themes/ 你的主题目录下 comments.php 文件,在提交按钮前面/后面插入下面代码:<?php hCaptcha_Plugin::output(); ?>*e. 网站管理员登录后不用进行验证,可直接提交评论。如果用户/游客提交评论失败,可能是开启了评论反垃圾保护导致,在网站后台-设置-评论里关闭,或者在主题目录下的 functions.php 文件中找到 function themeInit() 函数,里面添加:$options = Helper::options(); $options -> commentsAntiSpam = false;完成设置启用后,应该可以摆脱大部分垃圾评论了,后期可能会整合评论审核过滤和邮件提醒功能进去但 93.23% 的概率会鸽。
2022年11月07日
18,448 阅读
0 评论
0 点赞
2022-09-26
Joe主题-壁纸代码改造
前言Joe主题有写好的壁纸模版,直接启用即可。刚开始博主感觉分类太多了,有些分类也不是自己喜欢的。就没有启用,最近有时间研究了一下代码。改造了一下,只留下自己感兴趣的分类。核心代码主要是core/route.php文件内的两个函数,调用了360的壁纸接口,原版如下/* 获取壁纸分类 已测试 √ */ function _getWallpaperType($self) { $self->response->setStatus(200); $json = _curl("http://cdn.apc.360.cn/index.php?c=WallPaper&a=getAllCategoriesV2&from=360chrome"); $res = json_decode($json, TRUE); if ($res['errno'] == 0) { $self->response->throwJson([ "code" => 1, "data" => $res['data'] ]); } else { $self->response->throwJson([ "code" => 0, "data" => null ]); } } /* 获取壁纸列表 已测试 √ */ function _getWallpaperList($self) { $self->response->setStatus(200); $cid = $self->request->cid; $start = $self->request->start; $count = $self->request->count; $json = _curl("http://wallpaper.apc.360.cn/index.php?c=WallPaper&a=getAppsByCategory&cid={$cid}&start={$start}&count={$count}&from=360chrome"); $res = json_decode($json, TRUE); if ($res['errno'] == 0) { $self->response->throwJson([ "code" => 1, "data" => $res['data'], "total" => $res['total'] ]); } else { $self->response->throwJson([ "code" => 0, "data" => null ]); } }优化主要优化 _getWallpaperType 函数,去掉不想要的分类/* 获取壁纸分类 已测试 √ */ function _getWallpaperType($self) { $self->response->setStatus(200); $json = _curl("http://cdn.apc.360.cn/index.php?c=WallPaper&a=getAllCategoriesV2&from=360chrome"); $res = json_decode($json, TRUE); //$file=dirname(__FILE__).'/debug.log'; //保留喜欢的分类 $ilike = ['6', '12', '13', '22']; $re_arr = array(); foreach ($res['data'] as $key => $value) { if (in_array($value['id'], $ilike, true)){ //file_put_contents($file, $value['name']."\n",FILE_APPEND); array_push($re_arr, $value); } } if ($res['errno'] == 0) { $self->response->throwJson([ "code" => 1, "data" => $re_arr ]); } else { $self->response->throwJson([ "code" => 0, "data" => null ]); } }效果首页美女发现是固定的,又懒得翻页。加了个随机,每次刷新都是不同的。/* 获取壁纸列表 已测试 √ */ function _getWallpaperList($self) { $self->response->setStatus(200); $cid = $self->request->cid; //前50页随机显示图片 if (($cid == 6)&&($self->request->start < 2400)) { $start = $self->request->start + rand(1,4800); }else { $start = $self->request->start; } $count = $self->request->count; //$file=dirname(__FILE__).'/debug.log'; //file_put_contents($file, $cid."|".$start."|".$count."\n",FILE_APPEND); $json = _curl("http://wallpaper.apc.360.cn/index.php?c=WallPaper&a=getAppsByCategory&cid={$cid}&start={$start}&count={$count}&from=360chrome"); $res = json_decode($json, TRUE); if ($res['errno'] == 0) { $self->response->throwJson([ "code" => 1, "data" => $res['data'], "total" => $res['total'] ]); } else { $self->response->throwJson([ "code" => 0, "data" => null ]); } }
2022年09月26日
6,373 阅读
0 评论
0 点赞
在文章中添加地图
有些文章需要使用到地图,比如题主博客中的“有声”分类下的文章,例如 http://www.lopwon.com/1925.html可以通过以下介绍的方法,添加!一、在主题适当位置(比如footer.php末端)添加以下百度地图开放平台提供的服务代码。其中,把“我的秘钥”四个字替换为自己的百度地图API秘钥(AK),申请如下:1. 访问百度地图开放平台 https://lbsyun.baidu.com/ 注册后登陆“控制台”。2. 应用管理》我的应用》创建应用,需要实名认证!3. 除“应用类型”选择“浏览器端”外,其他可以默认。4. 完成创建后,会生成一串API秘钥(AK)。代码: <script src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=我的秘钥"></script> <script> var map = new BMapGL.Map('map'); //创建地图,map对应div中的ID,可自定义,必选 map.centerAndZoom(new BMapGL.Point(<?php $this->fields->location(); ?>), 13); //设置地图中心坐标location和缩放级别13,必选 var marker = new BMapGL.Marker(new BMapGL.Point(<?php $this->fields->location(); ?>)); //创建标记坐标location,必选 map.addOverlay(marker); //添加标记点,必选 map.enableScrollWheelZoom(true); //添加鼠标滚轮缩放控件,可选 map.addControl(new BMapGL.NavigationControl({type: BMAP_NAVIGATION_CONTROL_SMALL})); //添加放大缩小控件,可选 map.addControl(new BMapGL.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP,BMAP_SATELLITE_MAP,BMAP_HYBRID_MAP]})); //添加地图类型,可选 </script>二、如果不想把以上JS在全局使用,可以使用以下代码包裹,只在需要时加载:代码: <?php if (($this->fields->location !== null) && ($this->is('post'))): //文章页post有自定义字段location的坐标值时加载以下JS ?> 这里是百度地图服务代码 <?php endif; ?>三、在编辑文章时,把以下代码添加到文中适当位置,当然也可以自定义CSS。如果不想每次都添加,可以直接放入主题post.php的适当位置(比如文末content)代码: <div id="map" style="width:720px;height:240px"></div>四、在编辑文章时,新增自定义字段location(也可以自定义字段名,注意要统一替换以上JS中所有的location)。之后,字段值填入地点坐标,可以访问拾取坐标系统 http://api.map.baidu.com/lbsapi/getpoint/index.html 获取坐标。格式为(经度,纬度),例116.403963,39.915119五、如果觉得操作麻烦,有款现成的Typecho“我的足迹”独立页模板可以选用,功能不同是把文章直接添加到地图中,详见 http://www.lopwon.com/lopwon-footprint.html1. 访问拾取坐标系统(http://api.map.baidu.com/lbsapi/getpoint/index.html)获取坐标。2. 在需要标记文章的自定义字段里新增字段,其中,字段名称必须填入 here,乱填无效!字段值填入之前获取的坐标。格式为(经度,纬度),例116.403963,39.915119
2022年09月23日
6,336 阅读
0 评论
0 点赞
2021-03-08
typehco 插件加上更新提醒github版本检测
直接上教程:第一步你得有个github仓库吧,在仓库右侧有个release这个就是说我们需要给作品发布一个新版本的时候,就release一个。点击 release -> Drafr a new release我们可以给我们的版本添加一些信心。Tag version这里,建议填写数字版本号,比如 1.0.0,title可以填写和tag 一样。description就写一些描述。在下面附件栏那里。如果不上传的话,github 会自动打包你 push 的最新代码,如果手动上传的话,那么最后就会显示你上传的附件。这里假设我已经 release 了一个 1.0.0 的版本。编写更新检测代码var wxfversion = "1.0.0"; function update_detec() { var container = document.getElementById("wxfans"); if (!container) { return } var ajax = new XMLHttpRequest(); container.style.display = "block"; ajax.open("get", "https://api.github.com/repos/gogobody/WxFans/releases/latest"); ajax.send(); ajax.onreadystatechange = function() { if (ajax.readyState === 4 && ajax.status === 200) { var obj = JSON.parse(ajax.responseText); var newest = obj.tag_name; if (newest > wxfversion) { container.innerHTML = "发现新主题版本:" + obj.name + '。下载地址:<a href="' + obj.zipball_url + '">点击下载</a>' + "<br>您目前的版本:" + String(wxfversion) + "。" + '<a target="_blank" href="' + obj.html_url + '">查看新版亮点</a>' } else { container.innerHTML = "您目前的版本:" + String(wxfversion) + "。" + "您目前使用的是最新版主题。" } } } }; update_detec();需要改动的有两处:var wxfversion = "1.0.0";//修改为自己的当前版本号 ajax.open("get", "https://api.github.com/repos/gogobody/WxFans/releases/latest"); // 主要修改gogobody/WxFans为你的 github用户名/你的仓库repo名字这样代码会自动去检测你的 repo 的release 的最新版本,并对 tag version 做比较。嵌入 typecho 插件首先我们要对刚刚的js进行压缩,也就是压缩成一行,不然放进插件换行会被替换为导致代码失效。js压缩的网址有很多: 比如 菜鸟js压缩工具通常一个typecho插件 plguin.php 的顶部注释说明是这样,以下为模板可以直接套用,将压缩后的 js 放入后即可。/** * 我是插件说明 * <div class="wxFansSet"><a style="width:fit-content" id="wxfans">版本检测中..</div> </div><style>.wxFansSet{margin-top: 5px;}.wxFansSet a{background: #ff5a8f;padding: 5px;color: #fff;}</style> * <script>在这里插入压缩后的代码</script> * @package 我是插件名字 * @author <a href="https://www.ijkxs.com">即刻学术<br> gogobody</a> * @version 1.0.0 * @link https://www.ijkxs.com */这样就完成了一个在插件页检测 github 更新的功能。typecho 插件里获取插件版本号/** * 我是插件说明 * @package 我是插件名字 * @author <a href="https://www.ijkxs.com">即刻学术<br> gogobody</a> * @version 1.0.0 * @link https://www.ijkxs.com */ 在typecho 插件头部说明注释中声明了 version 之后,在插件内部如何获取这个 version 呢?可以通过以下代码获取:public static function get_plugins_info(){ $plugin_name = 'WxFans'; //改成你的插件名 Typecho_Widget::widget('Widget_Plugins_List@activated', 'activated=1')->to($activatedPlugins); $activatedPlugins = json_decode(json_encode($activatedPlugins),true); $plugins_list = $activatedPlugins['stack']; $plugins_info = array(); for ($i=0;$i<count($plugins_list);$i++){ if($plugins_list[$i]['title'] == $plugin_name){ $plugins_info = $plugins_list[$i]; break; } } if(count($plugins_info)<1){ return false; }else{ return $plugins_info['version']; } }
2021年03月08日
8,819 阅读
0 评论
0 点赞
2021-02-22
Typecho 主题点赞功能实现
有人问到点赞功能,这里抽取代码分享一下,因为去掉了部分敏感信息,可能需要调试一下。我的设计思路是使用自定义字段来存储点赞次数。和市面上的方案不一样,不过大同小异。增加接口首先要修改functions.php的themeInit函数,加入点赞接口function themeInit($archive) { if ($archive->is('single')) { if ($archive->request->isPost()) { if ($archive->request->is('themeAction=promo')) { promo($archive); } } } } 接着要加入点赞核心函数,下面的函数可以扩展/** * Post Action AJAX接口 * * @param Widget_Archive $widget * @return void * @date 2020-05-04 */ function promo($widget) { $user = $widget->widget('Widget_User'); $db = Typecho_Db::get(); $fields = unserialize($widget->fields); $allowOperates = array('get', 'set', 'inc', 'dec'); // 这里可以扩展操作,建议屏蔽get/set $allowFields = array('likes'); // 这里可以扩展修改字段 // 获取操作 $operate = $widget->request->get('operate'); $field = $widget->request->get('field'); $value = $widget->request->filter('int')->get('value'); $value = $value === null ? 100 : $value; // 100 起步 $result = array('cid' => $widget->cid); if ($operate === "get") { $result['operate'] = 'get'; if (array_key_exists($field, $fields)) { $result[$field] = $fields[$field]; } else { $result[$field] = -1; } $widget->response->throwJson(array('status' => 1, 'msg' => _t('已获取参数'), 'result' => json_encode($result))); } elseif ($operate === "set") { $result['operate'] = 'set'; if ($value > 0) { $widget->setField($field, 'str', $value, $widget->cid); } else { $db->query($db->delete('table.fields') ->where('cid = ? AND name = ?', $widget->cid, $field)); } $widget->response->throwJson(array('status' => 1, 'msg' => _t('已完成操作'), 'result' => json_encode($result))); } elseif ($operate === "inc") { $result['operate'] = 'inc'; $value = intval($fields[$field]) + 1; $widget->setField($field, 'str', $value, $widget->cid); $result[$field] = $value; $widget->response->throwJson(array('status' => 1, 'msg' => _t('已完成操作'), 'result' => json_encode($result))); } elseif ($operate === "dec") { $result['operate'] = 'dec'; $value = intval($fields[$field]) - 1; $result[$field] = $value; if ($value > 0) { $widget->setField($field, 'str', $value, $widget->cid); } else { $db->query($db->delete('table.fields') ->where('cid = ? AND name = ?', $widget->cid, $field)); } $widget->response->throwJson(array('status' => 1, 'msg' => _t('已完成操作'), 'result' => json_encode($result))); } } Post 请求参数说明operate:操作 field: 操作字段 value:操作值,inc/dec 操作用不到 前端方面这里我给出我的参考 js 代码,实际建议自己写一下,使用 jq 也不复杂。function likesCallback(count) { $("#likesPostCount").value(count); } $("#likesPost").click(function () { posturl = $(location).attr("href").split("?")[0] + "?themeAction=promo"; $.ajax({ url: posturl, type: "POST", data: { operate: "inc", field: "likes" }, dataType: "json", success: function (result) { if (1 == result.status) { result = JSON.parse(result.result) likes = undefined === result.likes ? -1 : result.likes; likesCallback(result.likes); } else { // 提醒错误消息 alert( undefined === result.msg ? '点赞失败' : result.msg ); } }, error: function (xhr, ajaxOptions, thrownError) { alert('点赞失败' + ajaxOptions); }, }); }); 输出因为使用自定义字段存储,所以输出和普通自定义字段一样<?php echo $this->fields->likes; ?>
2021年02月22日
5,614 阅读
0 评论
7 点赞
2021-01-24
Typecho如何获取文章图片数量?
该功能适合那些壁纸博客站,非常实用的一个小功能,显示文章内图片的数量,实现起来也非常的简单,有2种方法。方法一在主题function.php里添加代码如下(joe主题放在core/core.php里):function imgNum($content){ $output = preg_match_all('#<img(.*?) src="([^"]*/)?(([^"/]*)\.[^"]*)"(.*?)>#', $content,$s); $cnt = count( $s[1] ); return $cnt; }调用方法:<?php echo ''.imgNum($this->content).'' ; ?>适用于图片型主题.仅计算文章内使用的img标签数量.应用环境为:文章列表方法二在主题function.php里添加代码如下(joe主题放在core/core.php里):function imgNum($content){ $output = preg_match_all("/<img.<em>?src="(.</em>?)"<sup id="fnref-1"><a href="#fn-1" class="footnote-ref">1</a></sup>*>/i", $content,$matches); $cnt = count( $matches[1] ); return $cnt; }调用方法:<?php echo ''.imgNum($this->content).'' ; ?>
2021年01月24日
7,105 阅读
0 评论
0 点赞
2021-01-24
Typecho非插件实现首页隐藏单个或多个分类的文章
思路大概是:在模板中添加设置项->欲隐藏的分类ID(用英文逗号分割取多个)在index.php重新给文章列队(置顶文章同理)。最后通过分类与文章的关系(typecho文章分类是另外一个表)进行分类筛选。以下是index.php加入的代码: //首页隐藏某分类文章 if($this->options->cidId && $this->is('index')){ $this->row = []; $this->stack = []; $this->length = 0; $order = ''; //清空文章队列 $db = Typecho_Db::get(); $restPostSelect = $this->select('table.contents.cid', 'table.contents.title', 'table.contents.slug', 'table.contents.created', 'table.contents.authorId','table.contents.modified', 'table.contents.type', 'table.contents.status', 'table.contents.text', 'table.contents.commentsNum', 'table.contents.order','table.contents.template', 'table.contents.password', 'table.contents.allowComment', 'table.contents.allowPing', 'table.contents.allowFeed','table.contents.parent')->where('table.contents.type = ? and table.contents.status = ? and table.contents.created < ?', 'post','publish',time())->group('table.contents.cid'); $restPostSelect = $restPostSelect->join('table.relationships','table.relationships.cid = table.contents.cid','right')->join('table.metas','table.relationships.mid = table.metas.mid','right')->where('table.metas.type=?','category'); $cidId = explode(',', $this->options->cidId);//分割文本 $cidcount = 0; foreach($cidId as $i => $cid) { $cidcount = $cidcount + count($db->fetchAll($db->select('cid')->from('table.relationships')->where('mid = '.intval($cid)))); $restPostSelect->where('table.relationships.mid != '.intval($cid))->group('cid'); } $endSelect = $restPostSelect->order('table.contents.created', Typecho_Db::SORT_DESC); $rest_posts = $db->fetchAll($restPostSelect->order('table.contents.created', Typecho_Db::SORT_DESC)->page($this->_currentPage, $this->parameter->pageSize)); foreach($rest_posts as $rest_post) { $this->push($rest_post); } $this->setTotal($this->getTotal()-count($cidcount));//重新设置文章数 }在functions.php同样要加模板设置$cidId = new Typecho_Widget_Helper_Form_Element_Text('cidId', NULL, NULL, _t('首页列表不显示的分类ID'), _t('在这里填入欲隐藏的分类ID,使用半角逗号“,”填入多个,如:1,2,留空不显示')); $form->addInput($cidId);
2021年01月24日
6,298 阅读
1 评论
0 点赞
2021-01-22
Typecho 文章按最后编辑排序
typecho默认的文章排序方式是按照文章发布的时间来排序的,有的时候我们可能写了某篇文章没写完,或者需要及时修改某篇文章已更新其内容的时效性,这时候可能我们就需要文章的排列是通过最后修改文章的时间来排序。偶然在jdeal大大的博客中发现了以下方法,修改后可根据最后编辑时间排序文章,下面是修改教程。打开根目录下/var/Widget/Archive.php文件,在源码1387-1393行处,可以看到如下的文章排序代码:/** 仅输出文章 */ $this->_countSql = clone $select; $select->order('table.contents.created', Typecho_Db::SORT_DESC) ->page($this->_currentPage, $this->parameter->pageSize); $this->query($select); }将上面代码中table.contents.created改成table.contents.modified就可以了
2021年01月22日
6,700 阅读
0 评论
0 点赞
2020-08-30
Typecho 评论中嵌入图片
有时发表评论需要添加图片,Typecho本身支持在评论中开启嵌入图片,但是还需要手工补全<img src= />来实现图片插入,比较麻烦。其实可以学习 v2ex 自动把图片后缀的文件自动转换为图片链接。首先在functions.php中添加转换函数function parseComment($comment) { $size = auto; $comment = preg_replace(array('#(http://([^\s]*)\.(jpg|gif|png|JPG|GIF|PNG))#', '#(https://([^\s]*)\.(jpg|gif|png|JPG|GIF|PNG))#'), '<img src="$1" alt="评论" style="width:' . $size . '; height:' . $size . '" />', $comment); return $comment; }如果你的主题有评论自定义,那么请找到 threadedComments 函数,在里头把$comments->content();修改为echo pareseComment($comments->content);没有的话你还要参照Typecho官方文档自定义评论才行。来源:https://xiamp.net/archives/embed-pictures-in-typecho-comments.html
2020年08月30日
8,570 阅读
0 评论
0 点赞
2020-08-30
Typecho 统计最近更新文章数量
我最近又换主题了,每年不换十几个主题,心里总觉得不痛快,小灯泡的主题很好,我想改,但是一更新,我又麻烦了,所以就干脆自己搞吧。废话说了这么多,这个主题有个最近更新文章数量的统计,见下图:那么怎么实现呢?代码如下://统计多少天内发布的文章数量 function getNumPosts($days){ $db = Typecho_Db::get(); $st_days= time()-$days*24*60*60; $result = $db->fetchAll($db->select()->from('table.contents') ->where('status = ?','publish') ->where('type = ?', 'post') ->where('modified >= ?', $st_days) //统计时间 ); $total_posts = count($result); return $total_posts; }怎么调用呢?在你需要显示文章数的地方插入下面代码:<?php echo getNumPosts(1); ?>括号里面的1,表示1天内,可以自己根据需要修改天数。来源:https://pangsuan.com/p/typecho-posts-count.html
2020年08月30日
7,138 阅读
0 评论
0 点赞
2020-06-07
Typecho 评论中嵌入图片
有时发表评论需要添加图片,Typecho本身支持在评论中开启嵌入图片,但是还需要手工补全<img src= />来实现图片插入,比较麻烦。其实可以学习 v2ex 自动把图片后缀的文件自动转换为图片链接。首先在functions.php中添加转换函数function parseComment($comment) { $size = auto; $comment = preg_replace(array('#(http://([^\s]*)\.(jpg|gif|png|JPG|GIF|PNG))#', '#(https://([^\s]*)\.(jpg|gif|png|JPG|GIF|PNG))#'), '<img src="$1" alt="评论" style="width:' . $size . '; height:' . $size . '" />', $comment); return $comment; }如果你的主题有评论自定义,那么请找到 threadedComments 函数,在里头把$comments->content();修改为echo pareseComment($comments->content);没有的话你还要参照Typecho官方文档自定义评论才行。
2020年06月07日
9,198 阅读
1 评论
0 点赞
2020-04-19
Typecho非插件实现首页隐藏单个或多个分类的文章
思路大概是:在模板中添加设置项->欲隐藏的分类ID(用英文逗号分割取多个)在index.php重新给文章列队(置顶文章同理)。最后通过分类与文章的关系(typecho文章分类是另外一个表)进行分类筛选。以下是index.php加入的代码://首页隐藏某分类文章 if($this->options->cidId && $this->is('index')){ $this->row = []; $this->stack = []; $this->length = 0; $order = ''; //清空文章队列 $db = Typecho_Db::get(); $restPostSelect = $this->select('table.contents.cid', 'table.contents.title', 'table.contents.slug', 'table.contents.created', 'table.contents.authorId','table.contents.modified', 'table.contents.type', 'table.contents.status', 'table.contents.text', 'table.contents.commentsNum', 'table.contents.order','table.contents.template', 'table.contents.password', 'table.contents.allowComment', 'table.contents.allowPing', 'table.contents.allowFeed','table.contents.parent')->where('table.contents.type = ? and table.contents.status = ? and table.contents.created < ?', 'post','publish',time())->group('table.contents.cid'); $restPostSelect = $restPostSelect->join('table.relationships','table.relationships.cid = table.contents.cid','right')->join('table.metas','table.relationships.mid = table.metas.mid','right')->where('table.metas.type=?','category'); $cidId = explode(',', $this->options->cidId);//分割文本 foreach($cidId as $i => $cid) { $restPostSelect->where('table.relationships.mid != '.intval($cid))->group('cid'); } $endSelect = $restPostSelect->order('table.contents.created', Typecho_Db::SORT_DESC); $rest_posts = $db->fetchAll($restPostSelect->order('table.contents.created', Typecho_Db::SORT_DESC)->page($this->_currentPage, $this->parameter->pageSize)); foreach($rest_posts as $rest_post) { $this->push($rest_post); } $this->setTotal($this->getTotal()-count($cidId));//重新设置文章数 }在functions.php同样要加模板设置: $cidId = new Typecho_Widget_Helper_Form_Element_Text('cidId', NULL, NULL, _t('首页列表不显示的分类ID'), _t('在这里填入欲隐藏的分类ID,使用半角逗号“,”填入多个,如:1,2,留空不显示')); $form->addInput($cidId);
2020年04月19日
3,563 阅读
0 评论
0 点赞
2020-04-18
改造 typecho 上传地址 URL
前言typecho 附件上传我是一直看着难受usr/uploads/2020/04/xxxxx.jpg太长了于是我直接修改了上传部分将其规范为usr/uploads/xxxxx.jpg这样来说好处是避免目录套目录看着舒服修改方法打开 var/widget/upload.php 大约在84行处备份后替换 uploadHandle 函数即可代码public static function uploadHandle($file) { if (empty($file['name'])) { return false; } $result = Typecho_Plugin::factory('Widget_Upload')->trigger($hasUploaded)->uploadHandle($file); if ($hasUploaded) { return $result; } $ext = self::getSafeName($file['name']); if (!self::checkFileType($ext) || Typecho_Common::isAppEngine()) { return false; } $path = Typecho_Common::url(defined('__TYPECHO_UPLOAD_DIR__') ? __TYPECHO_UPLOAD_DIR__ : self::UPLOAD_DIR, defined('__TYPECHO_UPLOAD_ROOT_DIR__') ? __TYPECHO_UPLOAD_ROOT_DIR__ : __TYPECHO_ROOT_DIR__); //创建上传目录 if (!is_dir($path)) { if (!self::makeUploadDir($path)) { return false; } } //获取文件名 if (isset($file['tmp_name'])) { $fileName = time(). '.' . $ext; $path = $path . '/' . $fileName; //移动上传文件 if (!@move_uploaded_file($file['tmp_name'], $path)) { return false; } } else if (isset($file['bytes'])) { $fileName = time(). '.' . $ext; $path = $path . '/' . $fileName; //直接写入文件 if (!file_put_contents($path, $file['bytes'])) { return false; } } else { return false; } return array( 'name' => $file['name'], 'path' => (defined('__TYPECHO_UPLOAD_DIR__') ? __TYPECHO_UPLOAD_DIR__ : self::UPLOAD_DIR) . '/' . $fileName, 'size' => $file['size'], 'type' => $ext, 'mime' => Typecho_Common::mimeContentType($path) ); }我比较喜欢在23行处修改usr/uploads 目录
2020年04月18日
3,936 阅读
1 评论
0 点赞
2018-07-23
64M NAT小鸡安装apache2+php5+sqlite+typecho博客建站
刚接触NAT小鸡,一开始比较蒙B,不晓得端口怎么映射的。折腾好久,现记录一下具体安装过程。以Debian8为例安装,64M内存就只能装个apache2+php5+sqlite这个组合了。开通ANT小鸡后,获得内网IP地址,比如我的:10.0.1.137访问:http://myserver.group/ports.php 得到SSH登陆端口及应用范围端口。修改登陆SSH端口:apt-get updateapt-get upgradeapt-get install apache2 php5 php-pear php5-gd sqlite3 php5-sqlite修改apache2默认80端口为11378vi /etc/apache2/ports.confvi /etc/apache2/sites-available/000-default.conf 重启apache2:service apache2 restart访问nat1.xbber.cn:11378 应该就可以打开apache2的默认主页了。如果没看到默认主页说明安装出错,先百度问题在进行下一步。接下来安装typecho博客就简单了。cd /usr/wwwwget http://typecho.org/downloads/1.1-17.10.30-release.tar.gztar -zxvf 1.1-17.10.30-release.tar.gzcd buildmv * /usr/www/chmod +R 777 /usr/www/usr接下来就可以访问之前的域名nat1.xbber.cn:11378就进入typechor的安装页业了。最后一步绑定域名,去掉端口显示。因为sfdbv.cn提供了域名绑定功能美滋滋的玩起来。欢迎大家测速:64m.ihaow.cn
2018年07月23日
5,303 阅读
0 评论
0 点赞
2013-12-10
Typecho 0.9 正式版发布
typecho终于发布0.9正式版了,立马装个体验。http://blog.cmphy.comBAE版体验演示网址:phblog.duapp.com来看官方发布原文。 看一看开发日志,距离上一个正式版的Typecho发布已经快2年半了,在这段艰难的时间里我们收到过非议指责,但是更多的是理解和关心。我想说的是无论怎样,这一页随着新版本的发布已经翻过去了。 新版本虽然没有完全重构核心,但是也改进了大量代码结构,而且还完全重构了后台。在开发过程中也得到了大量用户的帮助,在这里一并感谢,就不一一列举了。 版本亮点: 修正了0.8以来的大量bug 新的安装程序支持BAE, SAE, GAE 自动安装 完全重构了后台,自适应手持设备 原生支持Markdown编辑器,实时预览 支持自定义字段 支持自定义独立页面和分类页面链接样式 更多小的更新等待大家去发觉,下面是下载地址,没有更新经验的用户更新前请先看更新文档:http://docs.typecho.org/upgrade https://github.com/typecho/typecho/releases/tag/v0.9-13.12.10-release
2013年12月10日
3,550 阅读
0 评论
0 点赞
2013-11-09
typecho调用作者信息并显示头像
今天在博客里放了一个关于作者部分,需要调用typecho中的作者信息和作者的头像。找了一下,使用如下的代码实现:
2013年11月09日
5,135 阅读
0 评论
0 点赞
2013-11-06
Typecho中实现侧边栏标签云和标签云页面以及彩色标签云
之前在折腾wordpress的时候实现过标签云,同时在麻辣GIS上也实现了类似36氪的标签云效果,所以这次重新整理博客样式的时候也想做上这个效果。具体方法如下:
2013年11月06日
4,675 阅读
0 评论
0 点赞
1
2