Các bước cụ thể như sau 1 - soi kèo bóng đá hôm nay

Mục lục

Gần đây tôi bắt đầu viết tuần báo và muốn đăng trực tiếp lên blog, nhưng lại không muốn làm “bẩn” nội dung hiện tại của blog - vì hai dạng nội dung này có sự khác biệt rất lớn về hình thức. Vì vậy, 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 từ danh mục cụ thể
  2. Các bài viết từ danh mục khác nhau sử dụng các mẫu (danh sách) khác nhau để hiển thị

Tôi sẽ ghi lại kết quả sau hai ngày nghiên cứu, để thuận tiện cho việc di chuyển hoặc cài đặt lại blog sau này.

Hiển thị bài viết từ danh mục cụ thể trên trang chủ blog

Tệp index.php của chủ đề là mẫu trang chủ của blog, trong đó có đoạn mã sau:

<div class="col-mb-12 col-8" id="main" role="main">
  <?php while ($this->next()): ?>
    <article class="post" itemscope itemtype="
      <h2 class="post-title" itemprop="name headline">
        <a itemprop="url"
          href="<?php $this->permalink() ?>"><?php $this->title() ?></a>
      </h2>
      <ul class="post-meta">
        <li itemprop="author" itemscope itemtype=" _e('Tác giả: '); ?><a
            itemprop="name" href="<?php $this->author->permalink(); ?>"
            rel="author"><?php $this->author(); ?></a></li>
        <li><?php _e('Thời gian: '); ?>
          <time datetime="<?php $this->date('c'); ?>" itemprop="datePublished"><?php $this->date(); ?></time>
        </li>
        <li><?php _e('Danh mục: '); ?><?php $this->category(','); ?></li>
        <li itemprop="interactionCount">
          <a itemprop="discussionUrl"
            href="<?php $this->permalink() ?>#comments"><?php $this->commentsNum('Bình luận', '1 bình luận', '%d bình luận'); ?></a>
        </li>
      </ul>
      <div class="post-content" itemprop="articleBody">
        <?php $this->content('- Đọc phần còn lại -'); ?>
      </div>
    </article>
  <?php endwhile; ?>
  <?php $this->pageNav('&laquo; Trang trước', 'Trang sau &raquo;'); ?>
</div><!-- end #main-->

Chỉ cần thực hiện hai điều chỉnh sau:

1. Thay đổi vòng lặp while để chỉ hiển thị bài viết từ danh mục cụ thể

Thay dòng:

<?php while ($this->next()): ?>

Bằng:

<?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 -->
<?php while ($newList->next()): ?> <!-- Duyệt qua các bài viết đã lấy -->

Giải thích: Đoạn mã trên sẽ lọc ra các bài viết thuộc 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 tham chiếu $this bằng $newList Ví dụ: $this->title() sẽ trở thành $newList->title(), $this->permalink() sẽ trở thành $newList->permalink(), v.v.

Cuối cùng, tôi xin nhắc lại rằng những thay đổi trên được hỗ trợ bởi ChatGPT.

Sử dụng mẫu danh sách khác nhau cho mỗi danh mục

Mặc định, các trang phân loại (như trang này), trang thẻ, trang tác giả và kết quả tìm kiếm của Typecho đều sử dụng mẫu archive.php của chủ đề.

Để định nghĩa riêng mẫu danh sách cho từng danh mục, bạn có thể thêm logic điều kiện vào tệp archive.php. 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 index_weekly.php cho danh mục “Tuần báo” và index_post.php cho danh mục “Bài viết”. Cả hai mẫu này đều dựa trên việc sửa đổi từ archive.php.

  2. Sao chép một bản sao của archive.php và đặt tên là backup_archive.php.

  3. Xóa nội dung gốc của archive.php và thay thế bằng đoạn mã sau:

<?php
if ($this->is('category', 'post')) {
  $this->need('index_post.php');
} elseif ($this->is('category', 'weekly')) {
  $this->need('index_weekly.php');
} else {
  $this->need('backup_archive.php');
}
?>

Giải thích: Đoạn mã trên sử dụng hàm is để kiểm tra danh mục hiện tại và chọn mẫu phù hợp để hiển thị.

Thêm lời mở đầu cố định cho trang chi tiết tuần báo

Tôi đã thêm một đoạn lời mở đầu cố định trước nội dung của các bài viết tuần báo, ví dụ:

!Lời mở đầu tuần báo

Để thực hiện điều này, chỉ cần thêm đoạn mã sau trước dòng <?php $this->content(); ?> trong tệp post.php:

<?php
// Lấy tên danh mục của bài viết hiện tại
$category = $this->category;
// Xuất nội dung cố định tùy theo danh mục
switch ($category) {
  case "weekly":
    echo '<p><blockquote><i>Thông báo: Series "Tuần Báo" cũng được đồng bộ trên Substack, hỗ trợ đăng ký qua email (đăng ký ngay).</i></blockquote></p>';
    break;
  default:
    echo '';
}
?>

Nhúng ứng dụng Memos vào blog

Tôi muốn tích hợp các dịch vụ self-host vào cùng tên miền chính của blog và giữ mọi thứ trong một khung giao diện thống nhất. Do đó, tôi đã thêm ứng dụng Memos vào blog theo cách đơn giản sau:

  1. Tạo một tệp mẫu mới tên là memos.php trong thư mục chủ đề.
  2. Tạo một trang mới trong quản trị blog, chọn mẫu memos và để trống nội dung, sau đó xuất bản.

Mã nguồn của tệp memos.php như sau:

<?php $this->need('header.php'); ?>
<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit;
/*
Template Name: Memos
*/
?>

<div id="bber"></div>
<script type="text/javascript">
 var bbMemos = {
  memos : ' // URL của Memos, kết thúc bằng /
  limit : '20',// Số lượng mặc định mỗi lần hiển thị
  creatorId:'1' ,// ID người dùng mặc định
  domId: 'bber',// ID của thẻ div chứa nội dung
 }
</script>
<script src="

<?php $this->need('footer.php'); [tỷ lệ nhà cái](/news/0e7170f17b7b4d4a/)  ?>

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 của mình!