Typecho文章页面实现长久没有更新文章的提示
2023-01-09
分类: typecho
简介:方法打开主题目录下post.php文件,在适当位置添加如下代码,一般添加在post content后面(表示文章正文开始的地方) <div class="tip inlineBlock share" rel="nofollow"> <p> 本文最后更新于<?php echo date('Y年m月d日' , $this >modified);?>, 已超过<?php echo floor((time() ($this >modified))/86400);?>天没有更新。 如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢! </p> </div>注意:代码引用的css是handsome主题内置的,如果要用在其他主题,请自行把这个css扒下来!
Typecho不同分类文章标题显示不同颜色
2023-01-09
分类: typecho
简介:如果你想在index页面,让文章标题的颜色根据分类显示,那么就打开你的模板文件夹下的index.php文件,将:<h2 class="entry_title"></h2>替换为 <h2 class="entry_title"> <a href="<?php $this >permalink() ?>" class="<?php echo $this >category; ?>"><?php $this >title() ?></a> </h2>这样就会在index页面的每篇文章里加上class=”分类缩略名”,然后我们就可以用这个来修改css样式了。打开你的主题文件夹下style.css文件来定义css,比如我的一个分类是news,想把分类下文章标题都变成红色的,那么添加代码.news{color:red;}同理,你也可以将archives.php,以及post.php等页面都照此法处理。注意如果一篇文章属于多个分类,那么用:<?php echo $this >category; ?>只能输出一个分类缩略名,暂时还没找到更好的办法。
Typecho 评论增加楼层显示
2023-01-06
分类: typecho
简介:代码: <span style="margin left:5px;color:#617d0e;font size:12px"> <?php if($comments >levels == 0): ?> <?php if($comments >sequence == 1): ?>沙发 <?php elseif($comments >sequence == 2): ?>板凳 <?php elseif($comments >sequence == 3): ?>地毯 <?php else: ?> 第<?php $comments >sequence(); ?>楼<?php endif; ?> <?php endif; ?> </span>
记录Typecho纯代码算术验证
2022-12-26
分类: typecho
简介:Typecho的垃圾评论还是比较多的,除了插件外,还可以通过PHP函数实现简单的算术验证码。第一步function.php如下函数//算术验证评论
function themeInit($comment){
$comment = spam_protection_pre($comment, $post, $result);
}
function spam_protection_math(){ $num1=rand(1,49); $num2=rand(1,49); echo "<label for=\"math\">请输入<code>$num1</code>+<code>$num2</code>的计算结果:</label>\n"; echo "<input type=\"text\" name=\"sum\" class=\"text\" value=\"\" size=\"25\" tabindex=\"4\" style=\"width:218px\" placeholder=\"计算结果:\">\n"; echo "<input type=\"hidden\" name=\"num1\" value=\"$num1\">\n"; echo "<input type=\"hidden\" name=\"num2\" value=\"$num2\">";
}
function spam_protection_pre($comment, $post, $result){ $sum=$_POST['sum']; switch($sum){ case $_POST['num1']+$_POST['num2']: break; case null: throw new Typecho_Widget_Exception(_t('对不起: 请输入验证码。<a href="javascript:history.back( 1)">返回上一页</a>','评论失败')); break; default: throw new Typecho_Widget_Exception(_t('对不起: 验证码错误,请<a href="javascript:history.back( 1)">返回</a>重试。','评论失败')); } return $comment;
}第二步comments.php添加函数打开主题comments.php文件,在适当为止插入如下代码:<?php spam_protection_math();?>如果觉得100以内太难了,请修复function.php中添加的代码中rand后面的数字范围。
typecho评论验证码插件
2022-12-24
分类: typecho
简介:很多用户受到垃圾评论的困扰,因为某些国内服务器无法连接到Akismet服务,所以垃圾评论肆虐。有的用户即使启用了Akismet插件,但成千上万条垃圾评论对服务器负载也造成了影响。因此我开发了一个验证码插件,有需要开发类似插件的用户也可以借鉴一下开发方法。使用方法很简单,下载插件解压后,将其上传至/usr/plugins/目录下,先在后台启用插件,然后编辑摸板,在评论的表单位置也就是comments的form标签之间的任何你认为合适的地方,加上如下代码<p><?php Captcha_Plugin::output(); ?></p>[hide]评论验证码插件.zip[/hide]
typecho调用多张缩略图,非插件实现
2022-12-18
分类: typecho
简介:代码如下:
function showThumbnail($widget,$imgnum){ //获取两个参数,文章的ID和需要显示的图片数量 // 当文章无图片时的默认缩略图 $rand = rand(1,20); $random = $widget >widget('Widget_Options') >themeUrl . '/img/rand/' . $rand . '.jpg'; // 随机缩略图路径 $attach = $widget >attachments(1) >attachment; $pattern = '/\<img.*?src\=\"(.*?)\"[^>]*>/i'; $patternMD = '/\!\[.*?\]\((http(s)?:\/\/.*?(jpg|png))/i'; $patternMDfoot = '/\[.*?\]:\s*(http(s)?:\/\/.*?(jpg|png))/i'; //如果文章内有插图,则调用插图 if (preg_match_all($pattern, $widget >content, $thumbUrl)) { echo $thumbUrl[1][$imgnum]; } //没有就调用第一个图片附件 else if ($attach && $attach >isImage) { echo $attach >url; } //如果是内联式markdown格式的图片 else if (preg_match_all($patternMD, $widget >content, $thumbUrl)) { echo $thumbUrl[1][$imgnum]; } //如果是脚注式markdown格式的图片 else if (preg_match_all($patternMDfoot, $widget >content, $thumbUrl)) { echo $thumbUrl[1][$imgnum]; } //如果真的没有图片,就调用一张随机图片 else{ echo $random; }
}调用的代码就是以下这样,从0开始算,数字0则调用第一张<?php showThumbnail($this,0); ?>
新年倒计时代码
2021-07-12
分类: xiuno
简介:<style type="text/css">
.deng box{position:fixed;top: 40px;right: 20px;z index:9999;pointer events:none}
.deng box1{position:fixed;top: 30px;right:10px;z index:9999;pointer events:none}
.deng box2{position:fixed;top: 40px;left: 20px;z index:9999;pointer events:none}
.deng box3{position:fixed;top: 30px;left:10px;z index:9999;pointer events:none}
.deng box1 .deng,.deng box3 .deng{position:relative;width:120px;height:90px;margin:50px;background:#d8000f;background:rgba(216,0,15,.8);border radius:50% 50%; webkit transform origin:50% 100px; webkit animation:swing 5s infinite ease in out;box shadow: 5px 5px 30px 4px #fc903d}
.deng{position:relative;width:120px;height:90px;margin:50px;background:#d8000f;background:rgba(216,0,15,.8);border radius:50% 50%; webkit transform origin:50% 100px; webkit animation:swing 3s infinite ease in out;box shadow: 5px 5px 50px 4px #fa6c00}
.deng a{width:100px;height:90px;background:#d8000f;background:rgba(216,0,15,.1);margin:12px 8px 8px 8px;border radius:50% 50%;border:2px solid #dc8f03}
.deng b{width:45px;height:90px;background:#d8000f;background:rgba(216,0,15,.1);margin: 4px 8px 8px 26px;border radius:50% 50%;border:2px solid #dc8f03}
.xian{position:absolute;top: 20px;left:60px;width:2px;height:20px;background:#dc8f03}
.shui a{position:relative;width:5px;height:20px;margin: 5px 0 0 59px; webkit animation:swing 4s infinite ease in out; webkit transform origin:50% 45px;background:orange;border radius:0 0 5px 5px}
.shui b{position:absolute;top:14px;left: 2px;width:10px;height:10px;background:#dc8f03;border radius:50%}
.shui c{position:absolute;top:18px;left: 2px;width:10px;height:35px;background:orange;border radius:0 0 0 5px}
.deng:before{position:absolute;top: 7px;left:29px;height:12px;width:60px;content:" ";display:block;z index:999;border radius:5px 5px 0 0;border:solid 1px #dc8f03;background:orange;background:linear gradient(to right,#dc8f03,orange,#dc8f03,orange,#dc8f03)}
.deng:after{position:absolute;bottom: 7px;left:10px;height:12px;width:60px;content:" ";display:block;margin left:20px;border radius:0 0 5px 5px;border:solid 1px #dc8f03;background:orange;background:linear gradient(to right,#dc8f03,orange,#dc8f03,orange,#dc8f03)}
.deng t{font family:华文行楷,Arial,Lucida Grande,Tahoma,sans serif;font size:3.2rem;color:#dc8f03;font weight:700;line height:85px;text align:center}
.night .deng box,.night .deng box1,.night .deng t{background:0 0!important}@ moz keyframes swing{0%{ moz transform:rotate( 10deg)}50%{ moz transform:rotate(10deg)}100%{ moz transform:rotate( 10deg)}}@ webkit keyframes swing{0%{ webkit transform:rotate( 10deg)}50%{ webkit transform:rotate(10deg)}100%{ webkit transform:rotate( 10deg)}}
</style> <article> <div class="gn_box wow zoomIn"> <h1> <center><font color=#E80017>2</font><font color=#D1002E>0</font><font color=#BA0045>2</font><font color=#A3005C>1</font><font color=#8C0073>年</font><font color=#75008A> </font><font color=#5E00A1>新</font><font color=#4700B8>年</font><font color=#3000CF>倒</font><font color=#1900E6>计</font><font color=#0200FD>时</font> </center> </h1> <center> <div id="CountMsg" class="HotDate" style="margin bottom: 10px;"> <font color="red"><span id="t_d">* 天</span></font> <font color="red"><span id="t_h">* 时</span></font> <font color="red"><span id="t_m">* 分</span></font> <font color="red"><span id="t_s">* 秒</span></font> </div> </center> <script type="text/javascript"> function getRTime() { var EndTime = new Date("2021/02/11 00:00:00"); var NowTime = new Date(); var t = EndTime.getTime() NowTime.getTime(); var d = Math.floor(t / 1000 / 60 / 60 / 24); var h = Math.floor(t / 1000 / 60 / 60 % 24); var m = Math.floor(t / 1000 / 60 % 60); var s = Math.floor(t / 1000 % 60); document.getElementById("t_d").innerHTML = d + " 天"; document.getElementById("t_h").innerHTML = h + " 时"; document.getElementById("t_m").innerHTML = m + " 分"; document.getElementById("t_s").innerHTML = s + " 秒"; } setInterval(getRTime, 1000); </script> </div> </article> <! 新年倒计时结束 >
Xiuno BBS 模板风格开发参考
2021-07-11
分类: xiuno
简介:修罗BBS系统可以用来搞CMS,可以通过自己做模版的方式搞一下文章系统下面是从零开发模版所需要用到的信息首先Xiuno的模板是要放在 plugin 文件夹下, 当做一个插件来使用的关于默认风格的参考模板在 view 文件夹下, 其中 htm 文件夹是主要模板文件如果在原默认模板的基础上开发修改, 就直接复制view/htm这个文件夹到 plugin/你的主题/overwrite/view 下就行样式什么的可以在htm文件里重新定义下overwrite文件夹的意思就是将这里的文件覆盖原始模板, 这个官方文档里有提到.模板文件index.htm : 首页模板
header.inc.htm : 头部模板
footer.inc.htm : 尾部模板
thread_list.inc.htm : 帖子列表模板 (循环)
thread.htm : 帖子内容模板
post_list.inc.htm : 留言列表模板 (循环)
post.htm : 发布帖子模板
forum.htm : 板块模板
user_create.htm : 用户注册模板
user_login.htm : 用户登录模板
my.htm : 个人中心模板
my_profile.htm : 个人中心 – 资料 模板
user_profile.htm : 用户个人中心 – 资料 模板 browser.htm : 浏览器提示信息属性网站头部必须引用( header.inc.htm )<?php $conf = G(‘conf’);?>
<?php $header = G(‘header’);?>
<?php $user = G(‘user’);?>
<?php $uid = G(‘uid’);?>
<?php $gid = G(‘gid’);?>
<?php $fid = G(‘fid’);?>
<?php $tid = G(‘tid’);?>
<?php $pid = G(‘pid’);?>
<?php $route = G(‘route’);?>
<?php $forumlist_show = G(‘forumlist_show’);?> <?php $static_version = $conf[‘static_version’];?>
header.inc.htm : 头部模板常用属性
<?php echo $header[‘title’];?> : 网站名称
<?php echo $header[‘keywords’];?> : 网站关键词
<?php echo $header[‘description’];?> : 网站描述
<?php%20echo%20url(‘user login’);?> : 网站登录链接地址
<?php%20echo%20url(‘user create’);?> : 网站注册链接地址
<?php%20echo%20url(‘user logout’);?> : 注销地址
<?php%20echo%20url(‘my’);?> : 个人中心链接地址 <?php echo $user[‘username’];?> : 当前登录用户名
thread_list.inc.htm : 帖子列表模板常用属性
<?php echo $_thread[‘forumname’];?> : 帖子板块名称
<?php%20echo%20url(“forum $_thread[fid]”);?> : 板块链接地址
<?php%20echo%20url(“thread $_thread[tid]”);?> : 帖子链接地址
<?php echo $_thread[‘subject’];?> : 帖子标题
<?php echo $_thread[‘username’];?> : 作者名字
<?php%20echo%20url(“user $_thread[uid]”);?> : 作者个人中心链接地址
<?php echo $_thread[‘create_date_fmt’];?> : 帖子发布时间( 格式为 几分钟前, 几小时前, 几天前.. )
<?php echo $_thread[‘views’];?> : 帖子浏览数
<?php echo $_thread[‘posts’];?> : 帖子回复数
<?php if($_thread[‘top’] > 0) { ?>[置顶]<?php } ?> : 如果是置顶帖子, 则显示”[置顶]”
<?php if($_thread[‘files’] > 0) { ?>[附件]<?php } ?> : 如果是带有附件的帖子, 则显示”[附件]” <?php if($_thread[‘closed’] > 0) { ?>[锁定]<?php } ?> : 如果是锁定的帖子, 则显示”[锁定]”
thread.htm : 帖子内容模板常用属性
<?php echo $forum[‘name’];?> : 帖子板块名称
<?php%20echo%20url(“forum $thread[fid]”);?> : 板块链接地址
<?php%20echo%20url(‘thread create ‘.$fid);?> : 发布帖子链接地址
<?php echo $thread[‘subject’];?> : 帖子标题
<?php echo $thread[‘username’];?> : 作者名字
<?php%20echo%20url(“user $thread[uid]”);?> : 作者个人中心链接地址
<?php echo $thread[‘create_date_fmt’];?> : 帖子发布时间( 格式为 几分钟前, 几小时前, 几天前.. )
<?php echo $thread[‘views’];?> : 帖子浏览数
<?php echo $thread[‘posts’];?> : 帖子回复数
<?php if($thread[‘top’] > 0) { ?>[置顶]<?php } ?> : 如果是置顶帖子, 则显示”[置顶]”
<?php if($thread[‘files’] > 0) { ?>[附件]<?php } ?> : 如果是带有附件的帖子, 则显示”[附件]” <?php if($thread[‘closed’] > 0) { ?>[锁定]<?php } ?> : 如果是锁定的帖子, 则显示”[锁定]” post_list.inc.htm : 留言列表模板头部引用<?php
empty($allowupdate) AND $allowupdate = 0;
empty($allowdelete) AND $allowdelete = 0;
empty($allowpost) AND $allowpost = 0; ?>
<?php echo $_post[‘pid’];?> : 回复ID
<?php echo $_post[‘username’];?> : 回复人的名称
<?php%20echo%20url(“user $_post[uid]”);?> : 回复人的个人中心链接地址
<?php echo $_post[‘floor’];?> : 回复楼数
<?php echo $_post[‘subject’];?> : 引用文字
<?php echo $_post[‘message_fmt’];?> : 回复内容 <?php echo post_file_list_html($_post[‘filelist’]);?> : 附件
方法
循环显示论坛板块
<?php foreach($forumlist_show as $_forum) { ?>
<div fid=”<?php echo $_forum[‘fid’];?>”>
<a href=”<?php%20echo%20url(“forum $_forum[fid]”);?>”><?php echo $_forum[‘name’];?></a>
</div> <?php } ?>引用( footer.inc.htm ) 其中 bootstrap.js 是必不可少的, 牵扯到实时回帖..<script src=”lang/<?php%20echo%20$conf[‘lang’];?>/bbs.js<?php%20echo%20$static_version;?>”></script>
<script src=”<?php%20echo%20$conf[‘view_url’];?>js/jquery 3.1.0.js<?php%20echo%20$static_version;?>”></script>
<script src=”<?php%20echo%20$conf[‘view_url’];?>js/tether.js<?php%20echo%20$static_version;?>”></script>
<script src=”<?php%20echo%20$conf[‘view_url’];?>js/bootstrap.js<?php%20echo%20$static_version;?>”></script>
<script src=”<?php%20echo%20$conf[‘view_url’];?>js/bootstrap plugin.js<?php%20echo%20$static_version;?>”></script>
<script src=”<?php%20echo%20$conf[‘view_url’];?>js/async.js<?php%20echo%20$static_version;?>”></script>
<script src=”<?php%20echo%20$conf[‘view_url’];?>js/xiuno.js<?php%20echo%20$static_version;?>”></script>
<script src=”<?php%20echo%20$conf[‘view_url’];?>js/form.js<?php%20echo%20$static_version;?>”></script>
<script>
var debug = DEBUG = <?php echo DEBUG; ?>;
var url_rewrite_on = <?php echo $conf[‘url_rewrite_on’];?>;
var forumarr = <?php echo xn_json_encode($forumarr);?>;
var fid = <?php echo $fid;?>;
</script>
<script src=”<?php%20echo%20$conf[‘view_url’];?>js/bbs.js<?php%20echo%20$static_version;?>”></script>
typecho美化小功能,添加后台开关
2021-07-07
分类: typecho
简介:开启关闭按钮有时候我们发现一个好玩的效果将它放在自己的博客里,但是过一段时间看腻了又把它删掉了,然后再过一段时间又脑残的又想要那种效果,于是再添加进来,这样不用就删,用了再添加非常的麻烦。不如直接弄了开启关闭的按钮,用的时候点开启,不用的时候点关闭,这样就简单的多了,那么怎么实现呢?在主题文件夹中找到functions.php文件,在里面最下面添加以下代码: $xiaxue(可以是英文、数字、组合等,比如我弄个下雪的开启关闭按钮就写成下雪的拼音:xiaxue) = new Typecho_Widget_Helper_Form_Element_Select('xiaxue(和前面的英文标识要一致)',array(0=>'不开启',1=>'开启'),0,'按钮功能标题','按钮功能介绍'); $form >addInput($xiaxue(和前面的英文标识要一致));接着在需要展示的特效代码前面加以下代码: <?php if($this > options > xiaxue(和前面的英文标识要一致) == '1'): ?> 特效代码 <?php endif; ?>自定义内容有时候想在博客里加一些自定义内容,如运行时间,公告,提醒等等,该怎么实现呢?还是在主题文件夹中找到functions.php文件,在里面最下面添加以下代码: $gonggao(可以是英文、数字、组合等,比如我弄个公告的内容按钮就写成公告的拼音:gonggao) = new Typecho_Widget_Helper_Form_Element_Text( 'gonggao(和前面的英文标识要一致)', NULL, NULL, '内容说明', '内容介绍' ); $form >addInput($gonggao(和前面的英文标识要一致));然后在需要些内容的地方加入以下代码: <?php if ($this >options >gonggao(和前面的英文标识要一致)) : ?> <?php $adContent1 = $this >options >JADContent1; $adContent1Counts = explode("||", $adContent1); ?> 特效代码中需要输出内容的地方替换成<?php echo $adContent1Counts[0] ?>,如果需要写多处内容的话可以用<?php echo $adContent1Counts[1] ?>、<?php echo $adContent1Counts[2] ?>、<?php echo $adContent1Counts[3] ?>表示 <?php endif; ?>上面的内容用||隔开,例如想加一个图片链接: <?php if ($this >options >gonggao(和前面的英文标识要一致)) : ?> <?php $adContent1 = $this >options >JADContent1; $adContent1Counts = explode("||", $adContent1); ?> <a href="<?php echo $adContent1Counts[1] ?>"> <img src="<?php echo $adContent1Counts[0] ?>"> </a> <?php endif; ?>内容写:图片地址||链接地址 如:https://2025ly.cn/img/ico.png||https://2025ly.cn/自定义宽度隐藏有的时候我们放一段特效代码希望只在电脑端显示,手机端不显示(或者手机端显示,电脑都不显示),该如何实现呢?首先要确保改特效代码有class属性,如果没有的话就新建一个class。如:我像要一张图片在电脑端显示,手机端不显示,那就先在图片代码里加一个class,如下: <img class="haha(随便写,只要和其他CLASS重复就可以)" src="图片地址" >然后在主题的style.CSS文件(不同的主题CSS文件不一样,如JOE主题的CSS文件是在assets/css/joe.min.css)里最下面加以下代码: @media (max width: 768px) { .haha(和上面的class标识一致) { display: none !important; } }{alert type="info"}以上代码中768px是最大宽度,意思是大于768px显示代码,小于768px就不显示,可以根据自己的情况修改宽度,当然也可以改成高度:max width{/alert}