创新实训(二):博客部分的新增与删除

博客的添加
博客的添加要经历身份的验证,允许拥有博客权限的用户创建、编辑和发布博客文章,博客的文章主要应用了markdown富文本标记的方式
一.新增:
创新实训(二):博客部分的新增与删除

1.在添加博客时,导入和权限验证:

requirePHPLib('form');

if (!UOJContext::hasBlogPermission()) {
    become403Page();
}

requirePHPLib('form'):引入需要的库文件。
UOJContext::hasBlogPermission():检查用户是否有博客权限。如果没有权限,会调用 become403Page() 返回 403 错误页面。
2.博客加载和处理:

if (isset($_GET['id'])) {
    if (!validateUInt($_GET['id']) || !($blog = queryBlog($_GET['id'])) || !UOJContext::isHisBlog($blog)) {
        become404Page();
    }
} else {
    $blog = DB::selectFirst("select * from blogs where poster = '".UOJContext::user()['username']."' and type = 'B' and is_draft = true");
}

3.初始化博客编辑器:

$blog_editor = new UOJBlogEditor();
$blog_editor->name = 'blog';
if ($blog) {
    $blog_editor->cur_data = array(
        'title' => $blog['title'],
        'content_md' => $blog['content_md'],
        'content' => $blog['content'],
        'tags' => queryBlogTags($blog['id']),
        'is_hidden' => $blog['is_hidden']
    );
} else {
    $blog_editor->cur_data = array(
        'title' => '新博客',
        'content_md' => '',
        'content' => '',
        'tags' => array(),
        'is_hidden' => true
    );
}
if ($blog && !$blog['is_draft']) {
    $blog_editor->blog_url = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}");
} else {
    $blog_editor->blog_url = null;
}

创建 UOJBlogEditor 对象并设置其名称。
如果已存在博客,初始化编辑器数据为博客内容,否则初始化为默认新博客数据。
设置博客 URL,如果存在博客且不是草稿,则设置为对应博客的 URL。
4.数据库操作函数:

php
function updateBlog($id, $data) {
    DB::update("update blogs set title = '".DB::escape($data['title'])."', content = '".DB::escape($data['content'])."', content_md = '".DB::escape($data['content_md'])."', is_hidden = {$data['is_hidden']} where id = {$id}");
}
function insertBlog($data) {
    DB::insert("insert into blogs (title, content, content_md, poster, is_hidden, is_draft, post_time) values ('".DB::escape($data['title'])."', '".DB::escape($data['content'])."', '".DB::escape($data['content_md'])."', '".Auth::id()."', {$data['is_hidden']}, {$data['is_draft']}, now())");
}

updateBlog($id, $data):更新指定 ID 博客的数据。
insertBlog($data):插入新博客数据。
5.保存博客逻辑:

php
$blog_editor->save = function($data) {
    global $blog;
    $ret = array();
    if ($blog) {
        if ($blog['is_draft']) {
            if ($data['is_hidden']) {
                updateBlog($blog['id'], $data);
            } else {
                deleteBlog($blog['id']);
                insertBlog(array_merge($data, array('is_draft' => 0)));
                $blog = array('id' => DB::insert_id(), 'tags' => array());
                $ret['blog_write_url'] = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}/write");
                $ret['blog_url'] = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}");
            }
        } else {
            updateBlog($blog['id'], $data);
        }
    } else {
        insertBlog(array_merge($data, array('is_draft' => $data['is_hidden'] ? 1 : 0)));
        $blog = array('id' => DB::insert_id(), 'tags' => array());
        if (!$data['is_hidden']) {
            $ret['blog_write_url'] = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}/write");
            $ret['blog_url'] = HTML::blog_url(UOJContext::user()['username'], "/post/{$blog['id']}");
        }
    }
    if ($data['tags'] !== $blog['tags']) {
        DB::delete("delete from blogs_tags where blog_id = {$blog['id']}");
        foreach ($data['tags'] as $tag) {
            DB::insert("insert into blogs_tags (blog_id, tag) values ({$blog['id']}, '".DB::escape($tag)."')");
        }
    }
    return $ret;
};

逻辑较为复杂,主要处理博客的保存操作,包括新建、更新、发布和标签管理。
如果博客存在且是草稿,根据是否隐藏来决定更新或发布。
如果博客不存在,则插入新博客,并根据是否隐藏设置草稿状态。
处理标签的更新。

6.运行编辑器和页面生成:

php
$blog_editor->runAtServer();

echoUOJPageHeader('写博客');
$blog_editor->printHTML();
echoUOJPageFooter();

runAtServer():在服务器端运行编辑器逻辑。
使用 echoUOJPageHeader 和 echoUOJPageFooter 函数生成页面头部和尾部,并在中间打印博客编辑器的 HTML。
二.删除
创新实训(二):博客部分的新增与删除
创新实训(二):博客部分的新增与删除

<?php
	requirePHPLib('form');
	
	if (!UOJContext::hasBlogPermission()) {
		become403Page();
	}
	if (!isset($_GET['id']) || !validateUInt($_GET['id']) || !($blog = queryBlog($_GET['id'])) || !UOJContext::isHis($blog)) {
		become404Page();
	}
	
	$delete_form = new UOJForm('delete');
	$delete_form->handle = function() {
		global $blog;
		deleteBlog($blog['id']); 
	};
	$delete_form->submit_button_config['class_str'] = 'btn btn-danger';
	$delete_form->submit_button_config['text'] = '是的,我确定要删除';
	$delete_form->succ_href = "/archive";
	
	$delete_form->runAtServer();
?>
<?php echoUOJPageHeader('删除博客 - ' . HTML::stripTags($blog['title'])) ?>
<h3>您真的要删除博客 <?= $blog['title'] ?> 吗?该操作不可逆!</h3>
<?php $delete_form->printHTML(); ?>
<?php echoUOJPageFooter() ?>
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...