更新blog界面
This commit is contained in:
parent
b3a25ceb82
commit
d30a2531a7
@ -5,14 +5,14 @@ declare(strict_types=1);
|
|||||||
namespace app\index\controller\Article;
|
namespace app\index\controller\Article;
|
||||||
|
|
||||||
use app\index\BaseController;
|
use app\index\BaseController;
|
||||||
use app\model\Articles;
|
|
||||||
use app\model\ArticlesCategory;
|
|
||||||
use Symfony\Component\VarDumper\VarDumper;
|
use Symfony\Component\VarDumper\VarDumper;
|
||||||
use think\exception\ValidateException;
|
use think\exception\ValidateException;
|
||||||
use think\facade\Request;
|
use think\facade\Request;
|
||||||
use think\facade\Session;
|
use think\facade\Session;
|
||||||
use think\response\Json;
|
use think\response\Json;
|
||||||
use think\db\exception\DbException;
|
use think\db\exception\DbException;
|
||||||
|
use app\model\Cms\Articles;
|
||||||
|
use app\model\Cms\ArticlesCategory;
|
||||||
|
|
||||||
class ArticleController extends BaseController
|
class ArticleController extends BaseController
|
||||||
{
|
{
|
||||||
@ -102,6 +102,34 @@ class ArticleController extends BaseController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取文章分类列表
|
||||||
|
* @return Json
|
||||||
|
*/
|
||||||
|
public function getArticleCategories(): Json
|
||||||
|
{
|
||||||
|
$tid = $this->getTenantId();
|
||||||
|
|
||||||
|
if (empty($tid)) {
|
||||||
|
return json([
|
||||||
|
'code' => 400,
|
||||||
|
'msg' => '无法识别租户信息',
|
||||||
|
'list' => [],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$articleCategories = ArticlesCategory::where('delete_time', null)
|
||||||
|
->where('tid', $tid)
|
||||||
|
->select()
|
||||||
|
->toArray();
|
||||||
|
|
||||||
|
return json([
|
||||||
|
'code' => 200,
|
||||||
|
'msg' => 'success',
|
||||||
|
'list' => $articleCategories,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 游客文章阅读量函数
|
* 游客文章阅读量函数
|
||||||
* @return Json
|
* @return Json
|
||||||
|
|||||||
@ -27,6 +27,9 @@ Route::get('homeData', 'app\index\controller\Index@getHomeData');
|
|||||||
// --- 新闻中心列表路由 ---
|
// --- 新闻中心列表路由 ---
|
||||||
Route::get('getCenterNews', 'app\index\controller\Article\NewsCenterController@getCenterNews');
|
Route::get('getCenterNews', 'app\index\controller\Article\NewsCenterController@getCenterNews');
|
||||||
|
|
||||||
|
// --- 文章分类路由 ---
|
||||||
|
Route::get('getArticleCategories', 'app\index\controller\Article\ArticleController@getArticleCategories');
|
||||||
|
|
||||||
// --- 新闻中心互动路由 ---
|
// --- 新闻中心互动路由 ---
|
||||||
Route::post('articleViews/:id', 'app\index\controller\Article\ArticleController@articleViews');
|
Route::post('articleViews/:id', 'app\index\controller\Article\ArticleController@articleViews');
|
||||||
Route::post('articleLikes/:id', 'app\index\controller\Article\ArticleController@articleLikes');
|
Route::post('articleLikes/:id', 'app\index\controller\Article\ArticleController@articleLikes');
|
||||||
|
|||||||
@ -1909,9 +1909,38 @@ section,
|
|||||||
}
|
}
|
||||||
|
|
||||||
.blog-posts .post-img {
|
.blog-posts .post-img {
|
||||||
max-height: 240px;
|
height: 240px;
|
||||||
margin: -30px -30px 15px -30px;
|
margin: -30px -30px 15px -30px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-posts .post-img img {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover; /* 居中裁剪,撑满容器 */
|
||||||
|
object-position: center;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 新结构:blog.php 中的预览图容器 */
|
||||||
|
.blog-posts .post-media {
|
||||||
|
height: 240px;
|
||||||
|
margin: -30px -30px 15px -30px;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog-posts .post-media-img {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
object-position: center;
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blog-posts .post-category {
|
.blog-posts .post-category {
|
||||||
@ -1921,11 +1950,15 @@ section,
|
|||||||
}
|
}
|
||||||
|
|
||||||
.blog-posts .title {
|
.blog-posts .title {
|
||||||
|
height: 48px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0 0 20px 0;
|
margin: 0 0 20px 0;
|
||||||
height: 48px;
|
overflow: hidden;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blog-posts .title a {
|
.blog-posts .title a {
|
||||||
|
|||||||
@ -13,7 +13,7 @@ if ($currentPage < 1) {
|
|||||||
$currentPage = 1;
|
$currentPage = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$pageSize = 4; // 每页展示 4 条(grid 中每条占 col-lg-6,所以刚好两行)
|
$pageSize = 8; // 每页展示 8 条(grid 中每条占 col-lg-6,所以刚好四行)
|
||||||
$totalCount = count($allNewsList);
|
$totalCount = count($allNewsList);
|
||||||
$totalPages = (int)ceil($totalCount / $pageSize);
|
$totalPages = (int)ceil($totalCount / $pageSize);
|
||||||
if ($totalPages < 1) {
|
if ($totalPages < 1) {
|
||||||
@ -43,7 +43,7 @@ $newsListForPage = array_slice($allNewsList, ($currentPage - 1) * $pageSize, $pa
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-12">
|
||||||
|
|
||||||
<!-- Blog Posts Section -->
|
<!-- Blog Posts Section -->
|
||||||
<section id="blog-posts" class="blog-posts section">
|
<section id="blog-posts" class="blog-posts section">
|
||||||
@ -74,14 +74,15 @@ $newsListForPage = array_slice($allNewsList, ($currentPage - 1) * $pageSize, $pa
|
|||||||
$imgSrc = $baseUrl . "/themes/template3/assets/img/blog/blog-{$imgIndex}.jpg";
|
$imgSrc = $baseUrl . "/themes/template3/assets/img/blog/blog-{$imgIndex}.jpg";
|
||||||
}
|
}
|
||||||
|
|
||||||
$articleUrl = $apiUrl . '/article_detail/' . ($item['id'] ?? 0);
|
// 文章详情链接必须走前台域名,否则 api.yunzer.cn 上租户解析不生效
|
||||||
|
$articleUrl = $baseUrl . '/article_detail/' . ($item['id'] ?? 0);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-3 col-md-6">
|
||||||
<article>
|
<article>
|
||||||
|
|
||||||
<div class="post-img">
|
<div class="post-media">
|
||||||
<img src="<?php echo htmlspecialchars($imgSrc); ?>" alt="" class="img-fluid">
|
<img src="<?php echo htmlspecialchars($imgSrc); ?>" alt="" class="post-media-img" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="post-category"><?php echo htmlspecialchars($category); ?></p>
|
<p class="post-category"><?php echo htmlspecialchars($category); ?></p>
|
||||||
@ -150,87 +151,7 @@ $newsListForPage = array_slice($allNewsList, ($currentPage - 1) * $pageSize, $pa
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-lg-4 sidebar">
|
|
||||||
|
|
||||||
<div class="widgets-container">
|
|
||||||
|
|
||||||
<!-- Search Widget -->
|
|
||||||
<div class="search-widget widget-item">
|
|
||||||
|
|
||||||
<h3 class="widget-title">搜索</h3>
|
|
||||||
<form action="">
|
|
||||||
<input type="text">
|
|
||||||
<button type="submit" title="Search"><i class="bi bi-search"></i></button>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
</div><!--/Search Widget -->
|
|
||||||
|
|
||||||
<!-- Categories Widget -->
|
|
||||||
<div class="categories-widget widget-item">
|
|
||||||
|
|
||||||
<h3 class="widget-title">分类</h3>
|
|
||||||
<ul class="mt-3">
|
|
||||||
<li><a href="#">General <span>(25)</span></a></li>
|
|
||||||
<li><a href="#">Lifestyle <span>(12)</span></a></li>
|
|
||||||
<li><a href="#">Travel <span>(5)</span></a></li>
|
|
||||||
<li><a href="#">Design <span>(22)</span></a></li>
|
|
||||||
<li><a href="#">Creative <span>(8)</span></a></li>
|
|
||||||
<li><a href="#">Educaion <span>(14)</span></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</div><!--/Categories Widget -->
|
|
||||||
|
|
||||||
<!-- Recent Posts Widget -->
|
|
||||||
<div class="recent-posts-widget widget-item">
|
|
||||||
|
|
||||||
<h3 class="widget-title">最新文章</h3>
|
|
||||||
|
|
||||||
<div class="post-item">
|
|
||||||
<img src="<?php echo $baseUrl; ?>/themes/template3/assets/img/blog/blog-recent-1.jpg" alt="" class="flex-shrink-0">
|
|
||||||
<div>
|
|
||||||
<h4><a href="<?php echo $baseUrl; ?>/blog-details">Nihil blanditiis at in nihil autem</a></h4>
|
|
||||||
<time datetime="2020-01-01">Jan 1, 2020</time>
|
|
||||||
</div>
|
|
||||||
</div><!-- End recent post item-->
|
|
||||||
|
|
||||||
<div class="post-item">
|
|
||||||
<img src="<?php echo $baseUrl; ?>/themes/template3/assets/img/blog/blog-recent-2.jpg" alt="" class="flex-shrink-0">
|
|
||||||
<div>
|
|
||||||
<h4><a href="<?php echo $baseUrl; ?>/blog-details">Quidem autem et impedit</a></h4>
|
|
||||||
<time datetime="2020-01-01">Jan 1, 2020</time>
|
|
||||||
</div>
|
|
||||||
</div><!-- End recent post item-->
|
|
||||||
|
|
||||||
<div class="post-item">
|
|
||||||
<img src="<?php echo $baseUrl; ?>/themes/template3/assets/img/blog/blog-recent-3.jpg" alt="" class="flex-shrink-0">
|
|
||||||
<div>
|
|
||||||
<h4><a href="<?php echo $baseUrl; ?>/blog-details">Id quia et et ut maxime similique occaecati ut</a></h4>
|
|
||||||
<time datetime="2020-01-01">Jan 1, 2020</time>
|
|
||||||
</div>
|
|
||||||
</div><!-- End recent post item-->
|
|
||||||
|
|
||||||
<div class="post-item">
|
|
||||||
<img src="<?php echo $baseUrl; ?>/themes/template3/assets/img/blog/blog-recent-4.jpg" alt="" class="flex-shrink-0">
|
|
||||||
<div>
|
|
||||||
<h4><a href="<?php echo $baseUrl; ?>/blog-details">Laborum corporis quo dara net para</a></h4>
|
|
||||||
<time datetime="2020-01-01">Jan 1, 2020</time>
|
|
||||||
</div>
|
|
||||||
</div><!-- End recent post item-->
|
|
||||||
|
|
||||||
<div class="post-item">
|
|
||||||
<img src="<?php echo $baseUrl; ?>/themes/template3/assets/img/blog/blog-recent-5.jpg" alt="" class="flex-shrink-0">
|
|
||||||
<div>
|
|
||||||
<h4><a href="<?php echo $baseUrl; ?>/blog-details">Et dolores corrupti quae illo quod dolor</a></h4>
|
|
||||||
<time datetime="2020-01-01">Jan 1, 2020</time>
|
|
||||||
</div>
|
|
||||||
</div><!-- End recent post item-->
|
|
||||||
|
|
||||||
</div><!--/Recent Posts Widget -->
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<a href="<?php echo $baseUrl; ?>/" class="logo d-flex align-items-center">
|
<a href="<?php echo $baseUrl; ?>/" class="logo d-flex align-items-center">
|
||||||
<img src="<?php echo htmlspecialchars($homeInfo['normal']['logo']); ?>" alt="">
|
<img src="<?php echo htmlspecialchars($homeInfo['normal']['logo']); ?>" alt="">
|
||||||
</a>
|
</a>
|
||||||
<p><?php echo htmlspecialchars($seoDescription); ?></p>
|
<p><?php echo htmlspecialchars($homeInfo['normal']['description']); ?></p>
|
||||||
<!-- <div class="social-links d-flex mt-4">
|
<!-- <div class="social-links d-flex mt-4">
|
||||||
<a href=""><i class="bi bi-twitter-x"></i></a>
|
<a href=""><i class="bi bi-twitter-x"></i></a>
|
||||||
<a href=""><i class="bi bi-facebook"></i></a>
|
<a href=""><i class="bi bi-facebook"></i></a>
|
||||||
|
|||||||
@ -50,6 +50,13 @@ $newsUrl = $apiUrl . '/getCenterNews?baseUrl=' . urlencode($host);
|
|||||||
$newsRes = fetchApiData($newsUrl);
|
$newsRes = fetchApiData($newsUrl);
|
||||||
$newsList = $newsRes['list'] ?? [];
|
$newsList = $newsRes['list'] ?? [];
|
||||||
|
|
||||||
|
// 调用 文章分类 接口
|
||||||
|
$articleCategoryUrl = $apiUrl . '/getArticleCategories?baseUrl=' . urlencode($host);
|
||||||
|
$articleCategoryRes = fetchApiData($articleCategoryUrl);
|
||||||
|
$articleCategoryList = $articleCategoryRes['list'] ?? [];
|
||||||
|
|
||||||
|
print_r($articleCategoryList);
|
||||||
|
|
||||||
// 获取特色服务
|
// 获取特色服务
|
||||||
$servicesList = $homeInfo['services'] ?? [];
|
$servicesList = $homeInfo['services'] ?? [];
|
||||||
|
|
||||||
@ -75,7 +82,7 @@ $seoKeywords = $pageKeywords ?? ($homeInfo['normal']['keywords'] ?? '');
|
|||||||
|
|
||||||
<!-- 使用页面级 SEO 变量 -->
|
<!-- 使用页面级 SEO 变量 -->
|
||||||
<title><?php echo htmlspecialchars($seoTitle); ?></title>
|
<title><?php echo htmlspecialchars($seoTitle); ?></title>
|
||||||
<meta name="description" content="<?php echo htmlspecialchars($seoDescription); ?>">
|
<meta name="description" content="<?php echo htmlspecialchars($homeInfo['normal']['description']); ?>">
|
||||||
<meta name="keywords" content="<?php echo htmlspecialchars($seoKeywords); ?>">
|
<meta name="keywords" content="<?php echo htmlspecialchars($seoKeywords); ?>">
|
||||||
|
|
||||||
<link href="<?php echo $baseUrl; ?>/themes/template3/assets/img/favicon.png" rel="icon">
|
<link href="<?php echo $baseUrl; ?>/themes/template3/assets/img/favicon.png" rel="icon">
|
||||||
|
|||||||
@ -433,7 +433,8 @@ require_once __DIR__ . '/header.php';
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 文章详情链接
|
// 文章详情链接
|
||||||
$articleUrl = $apiUrl . '/article_detail/' . ($item['id'] ?? 0);
|
// 文章详情链接必须走前台域名,否则 api.yunzer.cn 上租户解析不生效
|
||||||
|
$articleUrl = $baseUrl . '/article_detail/' . ($item['id'] ?? 0);
|
||||||
|
|
||||||
// 计算 AOS 动画延迟
|
// 计算 AOS 动画延迟
|
||||||
$delay = ($i % 4) * 200;
|
$delay = ($i % 4) * 200;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user