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:

  1. Trang chủ blog chỉ hiển thị bài viết thuộc danh mục cụ thể
  2. 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('&laquo; Trang trước', 'Trang sau &raquo;'); ?>
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:

  1. 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.
  2. Sao chép archive.php thành backup_archive.php.
  3. 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.

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!