给Typecho文章管理增加批量修改公开程度的功能

虽然Typecho确实很好用,但是有些细节方面还是欠缺的。

当需要批量修改文章公开度的时候,那么问题来了,Typecho居然只有一个功能,就是批量删除……

manage-posts.php

这个文件位于/admin目录下
找到

<div class="row typecho-page-main" role="main">
    ...
    <ul class="dropdown-menu">

在其中新增4个项目

<li><a lang="<?php _e('你确认要标记这些文章为公开吗?');?>" href="<?php $security->index('/action/contents-post-edit?do=ediVisibility-publish');?>"><?php _e('公开');?></a></li>
<li><a lang="<?php _e('你确认要标记这些文章为隐藏吗?');?>" href="<?php $security->index('/action/contents-post-edit?do=ediVisibility-hidden');?>"><?php _e('隐藏');?></a></li>
<li><a lang="<?php _e('你确认要标记这些文章为私密吗?');?>" href="<?php $security->index('/action/contents-post-edit?do=ediVisibility-private');?>"><?php _e('私密');?></a></li>
<li><a lang="<?php _e('你确认要标记这些文章为待审核吗?');?>" href="<?php $security->index('/action/contents-post-edit?do=ediVisibility-waiting');?>"><?php _e('待审核');?></a></li>

Edit.php

这个文件位于/var/Widget/Contents/Post目录下
首先在文件末尾,绑定动作中增加对应manage-posts.php中的动作

public function action() {
    ···    
    /* 新增的一些Action */
    $this->on($this->request->is('do=ediVisibility-publish'))->ediVisibility('publish');
    $this->on($this->request->is('do=ediVisibility-hidden'))->ediVisibility('hidden');
    $this->on($this->request->is('do=ediVisibility-private'))->ediVisibility('private');
    $this->on($this->request->is('do=ediVisibility-waiting'))->ediVisibility('waiting');
 
    $this->response->redirect($this->options->adminUrl);
}

接下来在该方法上面新增一个方法

/**
 * 设置公开度的方法(新增)
 *
 * @author Aria
 * @access public
 * @return void
 */
public function ediVisibility($status = 'publish') {
 
    // 状态
    // publish       公开
    // hidden        隐藏
    // private       私密
    // waiting       待审核
 
    // 获取Action涉及的文章cid的Array
    $posts = $this->request->filter('int')->getArray('cid');
 
    $deleteCount = 0;
    foreach ($posts as $post) {
        $contents['status'] = $status;
        $this->update($contents, $this->db->sql()->where('cid = ?', $post));
        $deleteCount++;
    }
    /** 设置提示信息 */
    $this->widget('Widget_Notice')->set($deleteCount > 0 ? _t('操作成功') : _t('没有操作'),
        $deleteCount > 0 ? 'success' : 'notice');
 
    /** 返回原网页 */
    $this->response->goBack();
}

保存覆盖这两个文件即可。

tag(s): Typecho
show comments · back · home
Edit with Markdown