123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?php
- namespace app\admin\model\cms;
- use fast\Date;
- use think\Model;
- /**
- * 搜索引擎来访
- * Class SpiderLog
- * @package app\admin\model\cms
- */
- class SpiderLog extends Model
- {
- // 表名
- protected $name = 'cms_spider_log';
- // 自动写入时间戳字段
- protected $autoWriteTimestamp = false;
- // 定义时间戳字段名
- protected $createTime = false;
- protected $updateTime = false;
- protected $deleteTime = false;
- // 追加属性
- protected $append = [
- 'type_text',
- 'firsttime_text',
- 'lasttime_text'
- ];
- public function getTypeList()
- {
- return ['index' => __('Index'), 'archives' => __('Archives'), 'page' => __('Page'), 'special' => __('Special'), 'channel' => __('Channel'), 'diyform' => __('Diyform'), 'tag' => __('Tag'), 'user' => __('User')];
- }
- public function getTypeTextAttr($value, $data)
- {
- $value = $value ? $value : (isset($data['type']) ? $data['type'] : '');
- $list = $this->getTypeList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- public function getLastdataTextAttr($value, $data)
- {
- $lastdataArr = explode(',', $data['lastdata']);
- foreach ($lastdataArr as $index => &$item) {
- $item = date("Y-m-d H:i:s", $item);
- }
- return implode(',', $lastdataArr);
- }
- public function getFirsttimeTextAttr($value, $data)
- {
- $value = $value ? $value : (isset($data['firsttime']) ? $data['firsttime'] : '');
- return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
- }
- public function getLasttimeTextAttr($value, $data)
- {
- $value = $value ? $value : (isset($data['lasttime']) ? $data['lasttime'] : '');
- return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
- }
- protected function setFirsttimeAttr($value)
- {
- return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
- }
- protected function setLasttimeAttr($value)
- {
- return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
- }
- /**
- * 渲染来访记录
- * @param mixed $list
- * @param string $type
- */
- public static function render(&$list, $type)
- {
- if (!$list) {
- return;
- }
- $ids = [];
- foreach ($list as $index => $item) {
- $ids[] = $item['id'];
- }
- $config = get_addon_config('cms');
- $spiderDict = $config['spiders'] ?? [];
- $spiderFollowArr = array_filter(explode(',', $config['spiderfollow'] ?? ''));
- if (!$spiderFollowArr) {
- return;
- }
- $today = Date::unixtime();
- $spiderLogList = \addons\cms\model\SpiderLog::where('type', $type)
- ->where('aid', 'in', $ids)
- ->where('name', 'in', $spiderFollowArr)
- ->field('aid,name,lasttime')
- ->select();
- $logs = [];
- $spiderLogList = $spiderLogList ? collection($spiderLogList)->toArray() : [];
- foreach ($spiderLogList as $index => $item) {
- $logs[$item['aid']] = $logs[$item['aid']] ?? [];
- $logs[$item['aid']][$item['name']] = $item['lasttime'];
- }
- foreach ($list as $index => &$row) {
- $spiders = [];
- foreach ($spiderFollowArr as $key => $name) {
- $status = !isset($logs[$row['id']][$name]) ? 'none' : ($logs[$row['id']][$name] > $today ? 'today' : 'pass');
- $date = !isset($logs[$row['id']][$name]) ? '' : $logs[$row['id']][$name];
- $spiders[$name] = ['name' => $name, 'title' => isset($spiderDict[$name]) ? $spiderDict[$name] . (stripos($spiderDict[$name], '搜索') === false ? '搜索' : '') : '未知', 'status' => $status, 'date' => $date ? date("Y-m-d", $date) : ''];
- }
- $row['spiders'] = array_values($spiders);
- }
- return;
- }
- }
|