菜仔卢 Typecho • 3月19日

《typecho使用过程问题及解决方法记录》

文章编辑页附件图片显示

//admin/file-upload.php第19行下面加上
<img src="<?php echo $attachment->attachment->isImage ? $attachment->attachment->url : $options->siteUrl.'usr/themes/caizilu_park/img/file.png';?>" style="width:38px;height:38px;padding-right:5px;float:left;-o-object-fit:cover;object-fit:cover;">
//admin/file-upload-js.php第107行下面加上
+ '<img src="' + (data.isImage ? data.url : '<?php $options->siteUrl(); ?>usr/themes/caizilu_park/img/file.png') + '" style="width:38px;height:38px;padding-right:5px;float:left;-o-object-fit:cover;object-fit:cover;">'

微语内容显示调整

//css样式
.t_text {overflow: hidden;}
.t_more {display: none;}
.t_img img {width: 100px;height: 90px;max-width: 100%;margin: 0px 5px 5px 0;-o-object-fit: cover;object-fit: cover;}
//html部分
<div class="tweet">
    <div class="t_text"><?php $this->content()?></div>
    <span class="t_more">全文</span>
    <div class="t_img"></div>
</div>
//通过js调整内容
$('.tweet').each(function(){
    $(this).find('img').next('br').remove(); //移除图片后多余的换行,以避免多出很多空行
    $(this).find('.t_text img').appendTo($(this).find('.t_img')); //将所有图片放入统一div内
    $(this).find('.t_img img:eq(3), .t_img img:eq(6)').before("<br>"); //在第4和7张图片前加上<br>
    //文字内容超高后隐藏
    if($(this).find('.t_text').height() > 160){
        $(this).find('.t_text').height('160');
        $(this).find('.t_more').css('display','unset');
        $(this).find('.t_more').click(function(){
                if($(this).html()=='全文'){
                    $(this).prev().height('unset');
                    $(this).html('收起');
                }else{
                    $(this).prev().height('160');
                    $(this).html('全文');
                }
            });
    }else{
        $(this).find('.t_more').css('display','none');
    }
});
//图片点击放大缩小
$('.t_img img').click(function(){
    var $this = $(this);
    if($this.css('width') == '100px'){
        $this.css('width', 'unset');
        $this.css('height', 'unset');
    }else{
        $this.css('width', '100px');
        $this.css('height', '90px');
    }
    $("html,body").animate({scrollTop: $this.offset().top - 22},325);
});

评论列表自定义及层级缩进和@功能

function threadedComments($comments, $options) {
    //自定义评论列表代码
    if ($comments->levels) //缩进
    else //不缩进
}
//评论回复@功能
function atReply($parent) {
    if ($parent == 0) return '';
    $db = Typecho_Db::get();
    $commentInfo = $db->fetchRow($db->select('author,status,mail')->from('table.comments')->where('coid = ?', $parent));
    $link = '@' . $commentInfo['author'];
    return $link;
}

文章通过添加字段增加加密内容

if($this->fields->password){
    $replace  = '<form method="post" class="password">';
    $replace .= '    <input type="password" name="password" placeholder="请输入密码"/>';
    $replace .= '    <input class="passbtn" name="submit" type="submit" value="密码查看"/>';
    $replace .= '</form>';
    if(isset($_POST['password'])){
        if($_POST['password'] == $this->fields->password){
            $replace = '<div class="password">'.$this->fields->passtext.'</div>';
        }
    }
    if(strpos($this->content, "##加密##") == false){
        $this->content .= $replace;
    }else{
        $this->content = str_replace("##加密##", $replace, $this->content);
    }
}

使typecho支持Emoji(阿里云)

//通过命令窗口修改数据库和数据表编码
alter database bdm711633554_db character set utf8mb4
alter table typecho_表名 convert to character set utf8mb4
//修改config.inc.php代码
'charset' => 'utf8mb4',

获取QQ头像及评论邮箱改QQ号

//通过QQ邮箱获取头像
function getAvatar($mail){
    if(strpos($mail, '@qq.com') !== false){
        return 'https://q2.qlogo.cn/headimg_dl?bs='.$mail.'&dst_uin='.$mail.'&dst_uin='.$mail.'&;dst_uin='.$mail.'&spec=100&url_enc=0&referer=bu_interface&term_type=PC';
    }else{
        return 'http://www.gravatar.com/avatar/a49e1d8bb17fe912fb918ab4c0943a73?s=220&r=X&d=mm';
    }
}
//把mail输入框改为hidden,然后加一个qq输入框,qq输入框通过判断是否必须填写邮箱来确定是否必填
<input type="number" id="qq" placeholder="qq" <?php if ($this->options->commentsRequireMail): ?>required<?php endif; ?> />
<input type="hidden" name="mail" id="mail" placeholder="mail" value="<?php $this->remember('mail'); ?>" <?php if ($this->options->commentsRequireMail): ?>required<?php endif; ?> />
//通过js更改对应的value值
var mail = "<?php $this->remember('mail');?>";
$("#qq").val(mail.replace(/@qq.com/, ""));
$("#qq").keyup(function() {
    $("#mail").val($("#qq").val() + '@qq.com');
});
//点击提交时判断QQ号格式(qq为空时不需要判断,第1步里已经判断了是否必须填写)
<input name="sumbit" type="submit" id="cmt-submit" onclick="if($('#qq').val().length && ($('#qq').val().length<5 || $('#qq').val().length>11)){alert('请检查QQ号是否正确...');return false;}" value="提交">