Các bước cụ thể như sau 1 - soi kèo bóng đá hôm nay
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:
- Trang chủ blog chỉ hiển thị bài viết từ danh mục cụ thể
- 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('« Trang trước', 'Trang sau »'); ?>
</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:
-
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
. -
Sao chép một bản sao của
archive.php
và đặt tên làbackup_archive.php
. -
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:
- Tạo một tệp mẫu mới tên là
memos.php
trong thư mục chủ đề. - 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!