Files
coolcoth.com/app/Views/admin/seo.php
T
2026-08-08 15:53:53 +08:00

77 lines
3.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 后台:SEO 设置 —— 页面清单
* 每个页面独立编辑,点击卡片进入 admin/seo/edit/{key}。
*/
$pages = $pages ?? [];
$rows = $rows ?? [];
function seo_len(string $s): int { return mb_strlen($s, 'UTF-8'); }
function seo_kwcount(string $s): int {
if ($s === '') return 0;
return count(array_filter(array_map('trim', explode(',', $s)), function ($x) { return $x !== ''; }));
}
function seo_badge(int $n, int $min, string $emptyTxt): string {
if ($n === 0) return '<span class="badge badge-none">' . $emptyTxt . '</span>';
$cls = $n >= $min ? 'badge-ok' : 'badge-warn';
return '<span class="badge ' . $cls . '">' . $n . ($min > 0 ? '(≥' . $min . '' : '') . '</span>';
}
?>
<div class="page-head">
<div>
<h1>SEO 设置</h1>
<p class="muted">逐页维护搜索结果展示信息。点击任一页面进入独立编辑页,带实时字数提示。</p>
</div>
<div class="page-head-actions">
<a class="btn btn-ghost" href="<?= e(site_url('admin/seo/edit/home')) ?>">编辑首页 SEO</a>
<a class="btn btn-ghost" href="<?= e(site_url('sitemap.xml')) ?>" target="_blank" rel="noopener">查看 sitemap.xml</a>
</div>
</div>
<?= flash_html() ?>
<div class="seo-grid">
<?php foreach ($pages as $key => $meta):
$v = $rows[$key] ?? [];
$title = $v['title'] ?? '';
$desc = $v['description'] ?? '';
$tLen = seo_len($title);
$dLen = seo_len($desc);
$kwN = seo_kwcount($v['keywords'] ?? '');
$noindex = !empty($v['noindex']);
?>
<a class="seo-card" href="<?= e(site_url('admin/seo/edit/' . $key)) ?>">
<div class="seo-card-head">
<span class="seo-card-title"><?= e($meta['label']) ?></span>
<code class="mono seo-card-key"><?= e($key) ?></code>
</div>
<div class="seo-card-badges">
<?= seo_badge($tLen, $meta['title_min'], '标题未设置') ?>
<?= seo_badge($dLen, $meta['desc_min'], '描述未设置') ?>
<?= seo_badge($kwN, $meta['kw_min'], '无关键词') ?>
<?php if ($noindex): ?><span class="badge badge-noidx">noindex</span><?php endif; ?>
</div>
<div class="seo-card-preview"><?= e($title ?: '(未设置标题)') ?></div>
<div class="seo-card-desc"><?= e($desc ?: '(未设置描述)') ?></div>
<div class="seo-card-go">编辑此页 </div>
</a>
<?php endforeach; ?>
</div>
<style>
.seo-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
@media (max-width: 820px) { .seo-grid { grid-template-columns: 1fr; } }
.seo-card { display: block; background: #fff; border: 1px solid #e6eaf0; border-radius: 14px; padding: 16px 18px; text-decoration: none; color: inherit; transition: border-color .15s, box-shadow .2s, transform .12s; }
.seo-card:hover { border-color: #7dd3fc; box-shadow: 0 12px 28px -18px rgba(14,165,233,.7); transform: translateY(-2px); }
.seo-card-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; }
.seo-card-title { font-size: 16px; font-weight: 800; }
.seo-card-key { background: #f1f5f9; color: #64748b; padding: 2px 8px; border-radius: 7px; font-size: 12px; }
.seo-card-badges { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; }
.seo-card-preview { font-size: 14px; font-weight: 700; color: #0f172a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.seo-card-desc { font-size: 13px; color: #64748b; margin-top: 4px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.seo-card-go { margin-top: 12px; font-size: 13px; font-weight: 700; color: #0ea5e9; }
.badge-ok { background: #dcfce7; color: #15803d; }
.badge-warn { background: #fef3c7; color: #b45309; }
.badge-none { background: #f1f5f9; color: #94a3b8; }
.badge-noidx { background: #fee2e2; color: #dc2626; }
</style>