2020-11-25 01:07:06 +00:00
|
|
|
<?php
|
|
|
|
namespace app\model;
|
|
|
|
|
|
|
|
class Block extends Base
|
|
|
|
{
|
|
|
|
const BLOCK = 1;
|
|
|
|
const IMG = 2;
|
|
|
|
const TEXT = 3;
|
|
|
|
const GROUP = 4;
|
|
|
|
const VIDEO = 5;
|
|
|
|
const CODE = 6;
|
|
|
|
|
|
|
|
//获取类型键值对
|
|
|
|
public static function getTypes()
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
'1' => 'block',
|
|
|
|
'2' => 'img',
|
|
|
|
'3' => 'text',
|
|
|
|
'4' => 'group',
|
|
|
|
'5' => 'video',
|
|
|
|
'6' => 'code'
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
//根据键值和类目获取数据
|
|
|
|
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 [];
|
|
|
|
}
|
|
|
|
$category = Category::getById($categoryId);
|
|
|
|
if(empty($category)){
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
$items = self::where('category_id', $categoryId)
|
|
|
|
->order('sort asc')
|
|
|
|
->select()
|
|
|
|
->toArray();
|
|
|
|
if(empty($items)){
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
$data = [];
|
|
|
|
foreach($items as $item){
|
|
|
|
$data[$item['keyword']] = $item;
|
|
|
|
}
|
|
|
|
return $data;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function onAfterInsert($item)
|
|
|
|
{
|
|
|
|
$item->sort = $item->id;
|
|
|
|
$item->save();
|
|
|
|
}
|
|
|
|
|
|
|
|
//获取在使用中的文件
|
|
|
|
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;
|
|
|
|
}
|
2020-11-25 10:48:29 +00:00
|
|
|
|
|
|
|
// 解析单页块元素内容,把JSON化的内容转为数组格式
|
|
|
|
public static function analysisBlock(array $items)
|
|
|
|
{
|
|
|
|
$arrayToJsonTypes = [4];
|
|
|
|
if(count($items) > 0) {
|
|
|
|
foreach ($items as &$item) {
|
|
|
|
if(in_array($item['type'], $arrayToJsonTypes)) {
|
|
|
|
$item['value'] = empty($item['value']) ? [] : json_decode($item['value'], true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
unset($item);
|
|
|
|
}
|
|
|
|
return $items;
|
|
|
|
}
|
2020-12-03 05:47:57 +00:00
|
|
|
|
|
|
|
// 按块元素的栏目分类和关键字进行分组
|
|
|
|
public static function convertGroupByCategory(array $items)
|
|
|
|
{
|
|
|
|
$data = [];
|
|
|
|
foreach($items as $item){
|
|
|
|
$data[$item['category_id']][$item['keyword']] = $item;
|
|
|
|
}
|
|
|
|
return $data;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 按块元素的关键字进行分组
|
|
|
|
public static function convertGroupByKeyword(array $items)
|
|
|
|
{
|
|
|
|
$data = [];
|
|
|
|
foreach($items as $item){
|
|
|
|
$data[$item['keyword']] = $item;
|
|
|
|
}
|
|
|
|
return $data;
|
|
|
|
}
|
|
|
|
|
|
|
|
//根据栏目ID获取块列表
|
|
|
|
public static function getByCategoryIds($categoryIds)
|
|
|
|
{
|
|
|
|
if(!is_array($categoryIds) || empty($categoryIds)){
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
$items = self::whereIn('category_id', $categoryIds)
|
|
|
|
->order('category_id', 'asc')
|
|
|
|
->order('sort', 'asc')
|
|
|
|
->select()
|
|
|
|
->toArray();
|
|
|
|
if(empty($items)){
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
return self::convertGroupByCategory($items);
|
|
|
|
}
|
2020-11-25 01:07:06 +00:00
|
|
|
}
|