php và mẫu Bài Viết indexpost - bóng đá trực tiếp
Gần đây tôi bắt đầu viết bản tin hàng tuần và muốn đăng trực tiếp lên blog, nhưng lại không muốn "lấy làm bẩn" nội dung hiện tại của blog - vì dù sao hai loại nội dung này cũng có sự khác biệt rất lớn về hình thức. Do đó, tôi có hai yêu cầu chức năng đối với blog:
- Trang chủ blog chỉ hiển thị bài viết thuộc danh mục cụ thể
- Các bài viết thuộc danh mục khác nhau sử dụng các mẫu danh sách (list) khác nhau để hiển thị
Tôi sẽ ghi lại kết quả sau hai ngày mày mò, để sau này khi di chuyển hoặc cài đặt lại blog sẽ có tài liệu
Hiển Thị Bài Viết Cụ Thể Trên Trang Chủ Blog
Tệp index.php
của chủ đề là mẫu trang chủ kèo bóng đá trực tiếp hôm nay của blog, trong đó có đoạn mã như sau:
1<div class="col-mb-12 col-8" id="main" role="main">
2 <?php while ($this->next()): ?>
3 <article class="post" itemscope itemtype="
4 <h2 class="post-title" itemprop="name headline">
5 <a itemprop="url"
6 href="<?php $this->permalink() ?>"><?php $this->title() ?></a>
7 </h2>
8 <ul class="post-meta">
9 <li itemprop="author" itemscope itemtype=" _e('Tác giả: '); ?><a
10 itemprop="name" href="<?php $this->author->permalink(); ?>"
11 rel="author"><?php $this->author(); ?></a></li>
12 <li><?php _e('Thời gian: '); ?>
13 <time datetime="<?php $this->date('c'); ?>" itemprop="datePublished"><?php $this->date(); ?></time>
14 </li>
15 <li><?php _e('Danh mục: '); ?><?php $this->category(','); ?></li>
16 <li itemprop="interactionCount">
17 <a itemprop="discussionUrl"
18 href="<?php $this->permalink() ?>#comments"><?php $this->commentsNum('Bình luận', '1 bình luận', '%d bình luận'); ?></a>
19 </li>
20 </ul>
21 <div class="post-content" itemprop="articleBody">
22 <?php $this->content('- Đọc phần còn lại -'); ?>
23 </div>
24 </article>
25 <?php endwhile; ?>
26 <?php $this->pageNav('« Trang trước', 'Trang sau »'); ?>
27</div><!-- end #main-->
Chỉ cần thực hiện hai điều chỉnh nhỏ đối với đoạn mã trên:
1. Thay đổi vòng lặp while
để chỉ lấy bài viết từ danh mục cụ thể
Đổi dòng:
1<?php while ($this->next()): ?>
thành:
1<?php $this->widget('Widget_Archive@index', 'pageSize=5&type=category', 'mid=297')->to($newList); ?> <!-- Lấy bài viết từ danh mục cụ thể và lưu vào biến newList -->
2<?php while ($newList->next()): ?> <!-- Vòng lặp qua các bài viết đã lấy được -->
Giải thích: Đoạn mã mới sẽ chỉ lấy bài viết từ danh mục cụ thể mà bạn muốn hiển thị trên trang chủ.
2. Thay thế tất cả các biến $this
bằng $newList
Ví dụ: $this->title()
, $this->permalink()
... đều là cách lấy thông tin bài viết cụ thể. Giờ các bài viết đã nằm trong biến $newList
, nên chúng ta chỉ cần thay thế là xong.
Cuối cùng, việc sửa đổi trên được hoàn thành nhờ sự trợ giúp của ChatGPT.
Sử Dụng Mẫu Danh Sách Khác Nhau Cho Mỗi Danh Mục
Mặc định, các trang danh mục (ví dụ như trang này), trang thẻ标签, trang tác giả và kết quả tìm kiếm đều sử dụng mẫu archive.php
của chủ đề.
Theo hướng dẫn này, nếu muốn định nghĩa riêng mẫu danh sách cho từng danh mục, bạn có thể thêm điều kiện kiểm tra trong archive.php
và gọi đến các mẫu khác nhau dựa trên điều kiện. Các bước cụ thể như sau:
- Tạo mẫu riêng cho từng danh mục cụ thể, ví dụ tôi tạo mẫu "Bản Tin Hàng Tuần"
index_weekly.php
và mẫu "Bài Viết"index_post.php
. Hai mẫu này đều được sửa đổi từarchive.php
. - Sao chép
archive.php
thànhbackup_archive.php
. - Xóa nội dung cũ của
archive.php
và thay bằng:
1<?php
2if ($this->is('category', 'post')) {
3 $this->need('index_post.php');
4} elseif ($this->is('category', 'weekly')) {
5 $this->need('index_weekly.php');
6} else {
7 $this->need('backup_archive.php');
8}
9?>
Giải thích: Đoạn mã trên sử dụng cú pháp is
để kiểm tra danh mục và gọi đến mẫu tương ứng.
Thêm Lời Giới Thiệu Cố Định Cho Trang Chi Tiết Bản Tin Hàng Tuần
Tôi đã thêm một lời giới thiệu cố định trước mỗi bài viết bản tin hàng tuần, hiệu quả như sau:
Chỉ cần thêm đoạn mã sau trước <?php $this->content(); ?>
trong tệp post.php
:
1<?php
2// Lấy tên danh mục của bài viết hiện tại
3$category = $this->category;
4// Dựa theo tên danh mục, xuất ra nội dung cố định khác nhau
5switch ($category) {
6 case "weekly":
7 echo '<p><blockquote><i>Chú ý: Series "Bản Tin Hàng Tuần" đồng bộ trên Substack, hỗ trợ đăng ký qua email (đăng ký ngay).</i></blockquote></p>';
8 break;
9 default:
10 echo '';
11}
12?>
Nhúng Memos Vào Blog
Tổng quát mà nói, tôi muốn đưa tất cả các dịch vụ self-host vào dưới cùng một tên miền chính của blog và sử dụng chung một framework giao diện. Vì vậy, khi thấy bài viết của Mộc Mộc Mộc Mộc, tôi tiện thể cũng nhúng Memos vào blog. Kết quả có thể xem ở đây.
Việc này khá đơn giản, tạo một mẫu memos.php
trong thư mục chủ đề, sau đó tạo một trang mới trong phần quản trị blog, chọn "mẫu memos", để trống nội dung trang và xuất bản.
Mã thể thao ngoại hạng anh mẫu như sau:
1<?php $this->need('header.php'); ?>
2<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit;
3/*
4
5 */
6?>
7
8<div id="bber" ></div>
9<script type="text/javascript">
10 var bbMemos = {
11 memos : 'Địa chỉ URL của Memos, kết thúc bằng /',
12 limit : '20',//Hiển thị mặc định 10 mục mỗi lần
13 creatorId:'1' ,//Người dùng mặc định là 101
14 domId: '',//Mặc định là <div id="bber"></div>
15 }
16</script>
17<script src="...
18<script src="...
19
20<?php $this->need('footer.php'); ?>
Hy vọng những chia sẻ trên sẽ hữu ích cho ai đang tìm cách tùy chỉnh blog Typecho!