luck-draw/app/model/Block.php

148 lines
4.1 KiB
PHP

<?php
namespace app\model;
use think\model\relation\HasOne;
class Block extends Base
{
const BLOCK = 1;//富文本
const TEXT= 2;//纯文本
const IMG = 3;//图片
const GROUP = 4;//多图
const FILE = 5;// 文件
const VIDEO = 6;// 视频
const ING_LIST = 7;// 图文列表
//获取类型键值对
public static function getTypes()
{
return [
self::BLOCK => '富文本',
self::TEXT => '纯文本',
self::IMG => '图片',
self::GROUP => '多图',
self::FILE => '文件',
self::VIDEO => '视频',
self::ING_LIST => '图文列表',
];
}
//根据键值和类目获取数据
public static function getByKeyword($keyword, $categoryId)
{
return self::where('keyword', $keyword)->where('category_id', $categoryId)->findOrEmpty()->toArray();
}
//根据栏目ID获取块列表
public static function getByCategoryId($categoryId)
{
if($categoryId <= 0){
return [];
}
$items = self::where('category_id', $categoryId)
->order('id desc')
->select()
->toArray();
if(empty($items)){
return [];
}
$data = [];
foreach($items as $item){
$data[$item['name']] = $item;
}
return $data;
}
//获取在使用中的文件
public static function getFilesInUse()
{
$items = self::whereIn('type', [self::IMG, self::GROUP, self::VIDEO, self::TEXT])
->select()
->toArray();
$data = [];
foreach($items as $item){
if($item['type'] == self::IMG){
$file = trim($item['value']);
if(!empty($file)){
$key = getKeyByPath($file);
$data[$key] = $file;
}
}elseif($item['type'] == self::GROUP){
$val = trim($item['value']);
if (!empty($val) && $val != '[]' && $val != 'null') {
$files = json_decode($val, true);
foreach($files as $file){
$src = trim($file['src']);
if(!empty($src)){
$key = getKeyByPath($src);
$data[$key] = $src;
}
}
}
}elseif($item['type'] == self::VIDEO){
$video = trim($item['value']);
if(!empty($video)){
$key = getKeyByPath($video);
$data[$key] = $video;
}
$img = trim($item['img']);
if(!empty($img)){
$key = getKeyByPath($img);
$data[$key] = $img;
}
}elseif($item['type'] == self::TEXT){
$imgs = getImageUrlFromText($item['value']);
if(!empty($imgs)){
$data = array_merge($data, $imgs);
}
$videos = getVideoUrlFromText($item['value']);
if(!empty($videos)){
$data = array_merge($data, $videos);
}
}
}
return $data;
}
/**
* 栏目
*
* @return HasOne
*/
public function category(): HasOne
{
return $this->HasOne(ArchivesCategory::class, 'id', 'category_id');
}
/**
* 设置内容
* */
public function setContentAttr($value,$data)
{
if($data['type'] == self::ING_LIST){
$content = array_column($value,null,"sort");
$contentKey = array_keys($content);
sort($contentKey);
$contentData =[];
foreach ($contentKey as $ck){
$contentData[]= $content[$ck];
}
return json_encode($contentData);
}
return $value;
}
/**
* 设置内容
* */
public function getContentAttr($value,$data)
{
if($data['type'] == self::ING_LIST){
return json_decode($value,true);
}
return $value;
}
}