首页 » 建站手册 » Typecho利用评论实现每日动态的功能

Typecho利用评论实现每日动态的功能

谷歌已收录,更新于2019年07月10日; 如遇到问题,请留言及时通知站长; 欢迎加入 三生三世,讨论各种问题!

说明

今天,给各位分享个Typecho实现最新动态、轻语、或者叫每日新语、或者每日语录、闲言碎语、站长杂谈之类。主要是利用评论实现,而且可以在其他地方调用每日动态页面下的评论,可以叫做公告之类吧。

新建php文件

在主题目录下,新建一个php文件,命名为cross.php。然后,在里面加入如下内容:

<?php
/**
 * 每日动态
 * 
 * @package custom
 *
 */
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
?>
<?php $this->need('header.php'); ?>
<div class="row">
<div class="col-md-9 page-content archive-page clearfix">
<header class="entry-header"> <h1 class="entry-title page-title"><?php $this->title() ?></h1> </header>
  <!--如果允许评论,会出现评论框和个人信息的填写-->
  <?php if($this->allow('comment')): ?>
  <!--判断是否登录,只有登陆者才有权利发表说说-->
  <?php if($this->user->hasLogin()): ?>
  <!-- 输入框组 -->
<div id="<?php $this->respondId(); ?>" class="respond">
        <form id="new_comment_form" method="post" action="<?php $this->commentUrl() ?>" _lpchecked="1">
        <div class="new_comment"><textarea name="text" rows="3" class="textarea_box" style="height: auto;" placeholder="人生在世,难免会写点错别字,没事儿~"></textarea></div>
        <div class="comment_triggered" style="display: block;">
            <div class="input_body">
                <ul class="ident">
                    <li>
                        <input type="text" name="author" placeholder="昵称*" value="<?php $this->remember('author'); ?>">
                    </li>
                    <li>
                        <input type="mail" name="mail" placeholder="邮件*" value="<?php $this->remember('mail'); ?>">
                    </li>
                    <li>
                        <input type="text" name="url" placeholder="网址" value="<?php $this->remember('url'); ?>">
                    </li>
                </ul>

            <input type="submit" value="提交评论" class="comment_submit_button c_button">
            </div>
        </div>
        </form>
</div>
  <?php else: ?>
  <!--如果没有登录则什么操作按钮都不会显示-->
  <?php endif; ?>
  <?php else: ?>
    <div class="notice">
        <div class="twitter">
        <div class=" icol">
            <i class="layui-icon" style="font-size: 1.2em">&#xe645;</i>
        </div>
            抱歉,此处评论已关闭。
        </div>
    </div>
  <?php endif; ?>
        <?php $this->comments()->to($comments); ?>
        <?php if ($comments->have()): ?>
        <h4 class="comments-title"><span><?php $this->commentsNum(_t('博主暂无发布动态'), _t('目前博主只发布了一天动态说说'), _t('已有 %d 条动态,n 条广告')); ?></span></h4>
        <ul class="twiter">
        <?php $this->comments()->to($comments); ?>
        <?php $counter=0; ?>
        <?php while($comments->next()): ?>
        <li class="twiter_list"> 
        <section class="comments">
        <article class="comment"> 
        <a class="comment-img" href="#non"> <img src="<?php $this->options->blogme(); ?>" width="50" height="50"> </a>
         <div class="comment-body">
              <div class="text"> 
            <p><?php $comments->content(); ?></p> 
            <p class="twiter_info"><span class="twiter_author"><i class="icon-user"></i> <?php $this->author->screenName(); ?></span>
            <time class="twiter_time"><i class="icon-clock"></i> <?php $comments->date('Y.m.d G:i'); ?></time></p>
            </div>
            </div>
            </article>
            </section>
        </li>
        <?php endwhile; ?>
        <?php endif; ?>
    </ul>
    <?php $comments->pageNav('←','→','2','...'); ?>
</div> 
</div>
</div> 
<style type="text/css">
.twiter{overflow:hidden;padding:5em 0;border-bottom:1px solid #ddd;margin:0 0 1em}
.twiter .comment-img{float:left;margin-right:30px;border-radius:5px;overflow:hidden}
.twiter .comment-img img{display:block;border:1px solid #e6e6e6;border-radius:5px}
.twiter .comment-body{overflow:hidden}
.twiter .comment .text{padding:10px;border:1px solid #e5e5e5;border-radius:5px;background:#fff;margin-right:5px;}
.twiter .comment .text p:last-child{margin:0}
.twiter .comment .attribution{margin:.5em 0 0;font-size:14px;color:#666}
.twiter .comment{overflow:hidden;padding:0 0 1em;margin:0 0 1em;border-bottom:0;background:0}
.comments,.twiter .comment{position:relative}
.twiter .comment .text:before,.twiter .comment:before,.twiter .comments:before{content:"";position:absolute;top:0;left:65px}
.twiter .comments:before{width:2px;top:-20px;bottom:-20px;background:rgba(0,0,0,.1)}
.twiter .comment:before{width:14px;height:14px;border:3px solid #fff;border-radius:100px;margin:16px 0 0 -6px;box-shadow:0 1px 1px rgba(0,0,0,.2),inset 0 1px 1px rgba(0,0,0,.1);background:#ccc}
.twiter .comment .text:before{top:18px;left:76px;width:9px;height:9px;border-width:0 0 1px 1px;border-style:solid;border-color:#e5e5e5;background:#fff;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}
.twiter_list{margin-bottom:1px;overflow:hidden;margin-left:14px}
.twiter_avatar{display:block;width:50px;height:50px;border:1px solid #e6e6e6;margin:10px 0 0 -60px;float:left}
.twiter_content{line-height:25px}
.twiter_content img{display:inline-block;margin-top:-3px;padding:0 2px}
.twiter_img a{display:inline-block;border:1px solid #e6e6e6;border-radius:3px}
.twiter_img a img{padding:2px}
.twiter_info{color:#999;font-size:12px;padding-top:13px}
.twiter_author,.twiter_reply_btn,.twiter_time{display:inline-block;margin-right:10px;text-transform:uppercase}
.clear,.cls{clear:both}
.twiter .comment:hover:before{background:orange}
</style>
<?php $this->need('footer.php'); ?>

注①:这段代码已适配我自己的主题,代码中已自带样式。
注②:你需要按照这段代码,适配到你自己的主题。
注③:php文件编码请设置为utf-8

代码中的第13行-到第79行为核心php代码,82行到106行为style样式。这些代码一般不用修改,就可以完美适配。你只需将其他代码简单修改到跟你主题其他页面保持一致即可。

新建页面

进入typecho网站后台,新建一个页面,命名为cross.html,自定义模板选择每日动态,然后发布页面。然后访问你的该页面,看是否能显示,然后在页面内发一条评论试试?

注:管理员才可以在该页面发布评论,所以登录账号后,才可以在该页面发布评论。

每日动态页面

function.php调用

编辑主题的function.php文件,在第二行插入如下代码,即可自动获取每日动态页面的第一条评论,即最新动态,或者公告吧。

//最新动态
function cross(){
     //$comments->listComments(); 
    $slug = 'cross';//页面缩略名,指的是.php页面的文件名这里是cross.php,所以他就是cross
    $limit = 1;//调用数量
    $length = 100;//截取长度
    $ispage = true;//true 输出slug页面评论,false输出其它所有评论
    $isGuestbook = $ispage ? " = " : " <> ";
     
    $db = Typecho_Db::get();
    $options = Typecho_Widget::widget('Widget_Options');//Typecho_Widget::widget('Widget_Options');
     
    $page = $db->fetchRow($db->select()->from('table.contents')
    ->where('table.contents.status = ?', 'publish')
    ->where('table.contents.created < ?', $options->gmtTime)
    ->where('table.contents.slug = ?', $slug));
     
    if ($page) {
    $type = $page['type'];
    $routeExists = (NULL != Typecho_Router::get($type));
    $page['pathinfo'] = $routeExists ? Typecho_Router::url($type, $page) : '#';
    $page['permalink'] = Typecho_Common::url($page['pathinfo'], $options->index);
     
    $comments = $db->fetchAll($db->select()->from('table.comments')
    ->where('table.comments.status = ?', 'approved')
    ->where('table.comments.created < ?', $options->gmtTime)
    ->where('table.comments.type = ?', 'comment')
    ->where('table.comments.cid ' . $isGuestbook . ' ?', $page['cid'])
    ->order('table.comments.created', Typecho_Db::SORT_DESC)
    ->limit($limit));
     
    foreach ($comments AS $comment) {
     echo $comment['text'];
    }
    } else {
        echo '目前博主还没有发布动态说说';

        }
}

最新动态调用

在你想要显示最新动态或最新公告的地方,插入如下代码即可。

<?php cross(); ?>

最新动态调用

后续说明

就到这里吧,这篇文章的主要意义可能就是,有了这个你不用每天更新文章,发几条动态就拉倒了。emmm,好笑不好笑。对啦,你可以点击访问本站每日动态页面,查看实际效果

一个只会魔改主题,而不会制作主题的站长,专业扒各种网站的各种样式。希望每一位来到这里的访客,都能拿到你们需要的资源!

发表评论

已有 4 条评论

  1. fly fly说道:

    弄好了,但是我首页 放出来也只是纯文字 ............毫无美感 伤心

    1. 枂下 枂下说道:

      没办法,每个主题都不太相同,适配比较麻烦的

  2. fly fly说道:

    你动态还带广告的…………

    1. 枂下 枂下说道:

      怎么可以放过任何可以加广告的地方

返回主页看更多
赏杯咖啡给站长 支付宝 扫一扫