Files
ulthon_information/app/model/Post.php
2023-06-27 00:51:30 +08:00

226 lines
4.8 KiB
PHP

<?php
declare(strict_types=1);
namespace app\model;
use app\common\model\Base;
use app\common\tools\PostBlock;
use app\common\tools\PostShow;
use League\HTMLToMarkdown\Converter\TableConverter;
use League\HTMLToMarkdown\HtmlConverter;
use think\facade\Cache;
use think\facade\Request;
use think\Model;
use think\model\concern\SoftDelete;
use think\Paginator;
/**
* @mixin think\Model
*/
class Post extends Base
{
use SoftDelete;
//
public static $autoClearCache = [
[
'name' => 'top_post'
],
[
'type' => 'tag',
'name' => 'page_cache'
],
];
public static $stausNameList = [
0 => '不发布',
1 => '发布'
];
protected $defaultSoftDelete = 0;
public function categorys()
{
return $this->hasMany(PostCategory::class, 'post_id');
}
public function tags()
{
return $this->hasMany(PostTag::class, 'post_id');
}
public function comments()
{
return $this->hasMany(PostComment::class, 'post_id');
}
public function getCommentCountAttr()
{
return PostComment::getPostCommentsCount($this->getData('id'));
}
public function setPublishTimeAttr($value)
{
return strtotime($value);
}
public function getPublishTimeTextAttr()
{
$value = $this->getData('publish_time');
return date('Y-m-d', $value);
}
public function getPublishTimeDatetimeAttr()
{
$value = $this->getData('publish_time');
return date('Y-m-d H:i:s', $value);
}
public function getCategorysListAttr()
{
$list_post_categorys = $this->getAttr('categorys');
$list = array_column($list_post_categorys->append(['category'])->toArray(), 'category');
$list = array2level($list, 0, 0);
return $list;
}
public function getTagsListAttr()
{
$list_post_tags = $this->getAttr('tags');
$list = array_column($list_post_tags->append(['tag'])->toArray(), 'tag');
return $list;
}
public function getDescAttr($value)
{
if(empty($value)) {
}
return $value;
}
public function getDescShortAttr()
{
$desc = $this->getData('desc');
if (strlen($desc) > 100) {
$desc = mb_substr($desc, 0, 100) . '...';
}
return $desc;
}
public function getDescListAttr()
{
$desc = $this->getData('desc');
if (empty($desc)) {
return '';
}
$list = explode("\n", $desc);
return $list;
}
public function getDescHtmlAttr()
{
$desc = $this->getData('desc');
if (empty($desc)) {
return '';
}
return str_replace("\n", '<br>', $desc);
}
public function getStatusNameAttr()
{
return self::$stausNameList[$this->getData('status')];
}
public function setPubishTimeAttr($value)
{
return strtotime($value);
}
public function setContentHtmlAttr($value)
{
return trim($value);
}
public function getContentMarkdownAttr()
{
$content_html = $this->getAttr('content_html');
$content_html .= PostBlock::copyright($this);
$converter = new HtmlConverter(array('strip_tags' => true));
$converter->getEnvironment()->addConverter(new TableConverter());
$markdown = $converter->convert($content_html);
return $markdown;
}
public function getContentHtmlShowAttr()
{
$content = $this->getAttr('content_html');
return PostShow::handleCopyright($content);
}
public function getPosterAttr($value)
{
if (empty($value)) {
$value = '/static/images/avatar.jpeg';
}
return get_source_link($value);
}
public function getReadUrlAttr()
{
$path = '/index/a' . $this->getData('uid') . '.html';
return Request::domain() . $path;
}
public function getShareTextAttr()
{
$share_text = get_system_config('post_share_text_tpl');
$share_text = str_replace('%post_title%', $this->getAttr('title'), $share_text);
$share_text = str_replace('%post_desc%', $this->getAttr('desc'), $share_text);
$share_text = str_replace('%post_url%', $this->getAttr('read_url'), $share_text);
return $share_text;
}
public function getStartContentAttr()
{
$start_content = '';
$list_post_category_id = $this->getAttr('categorys')->column('category_id');
$list_start_post = Post::where('category_id', 'in', $list_post_category_id)->cache(600)->where('status', 1)->select();
foreach ($list_start_post as $k_start_post => $v_start_post) {
$start_content .= $v_start_post->content_html;
}
return $start_content;
}
}