Grav - Hướng dẫn plugin
Trong chương này, chúng ta sẽ đi sâu vào cách thiết lập và cấu hình một plugin. Ngoài ra, chúng ta cũng sẽ hiểu cấu trúc của một plugin và cách hiển thị một trang ngẫu nhiên. Plugin là một phần mềm cung cấp chức năng bổ sung mà ban đầu không được hoàn thiện bởi chức năng cốt lõi của Grav.
Trong bài viết này, chúng tôi sẽ hiển thị trang ngẫu nhiên bằng cách sử dụng plugin ngẫu nhiên. Trước khi sử dụng plugin này, chúng ta sẽ xem một số điểm quan trọng của plugin ngẫu nhiên.
Bạn có thể sử dụng plugin này để hiển thị trang ngẫu nhiên bằng cách sử dụng URI như /random.
Tạo bộ lọc để sử dụng phân loại được chỉ định trong các trang. Bạn có thể tạo nhưcategory : blog.
Bạn có thể hiển thị một trang ngẫu nhiên bằng cách sử dụng tùy chọn bộ lọc; điều này thông báo cho Grav sử dụng cùng một nội dung sẽ được hiển thị trong trang ngẫu nhiên.
Thiết lập Plugin
Làm theo các bước sau để tạo thiết lập cơ bản cho plugin trước khi sử dụng plugin thực tế.
Tạo thư mục có tên random phía dưới cái user/plugins thư mục.
Phía dưới cái user/plugins/random thư mục, tạo hai tệp cụ thể là -
random.php được sử dụng cho mã plugin
random.yaml được sử dụng cho cấu hình
Cấu hình plugin
Để sử dụng plugin ngẫu nhiên, chúng ta cần có một số tùy chọn cấu hình. Chúng tôi sẽ viết những dòng sau dướirandom.yaml tập tin.
enabled:true
route:/random
filters:
category:blog
Ngẫu nhiên tạo ra một tuyến đường mà bạn xác định. Dựa trên bộ lọc phân loại, nó chọn một mục ngẫu nhiên. Giá trị mặc định của bộ lọc là'category: blog' được sử dụng để lựa chọn ngẫu nhiên.
Cấu trúc plugin
Đoạn mã sau có thể được sử dụng trong cấu trúc plugin.
<?php
namespace Grav\Plugin;
use Grav\Common\Page\Collection;
use Grav\Common\Plugin;
use Grav\Common\Uri;
use Grav\Common\Taxonomy;
class RandomPlugin extends Plugin {
}
?>
Chúng tôi đang sử dụng một loạt các lớp trong plugin bằng cách sử dụng usecâu lệnh làm cho nó dễ đọc hơn và tiết kiệm không gian. Cácnamespace Grav\Pluginphải được viết ở đầu tệp PHP. Tên plugin phải được viết bằngtitlecase và nên được mở rộng sử dụng Plugin.
Bạn có thể đăng ký chức năng getSubscribedEvents() đến onPluginsInitializedbiến cố; điều này xác định các sự kiện mà plugin được đăng ký. Như vậy, bạn có thể sử dụng sự kiện để đăng ký các sự kiện khác.
public static function getSubscribedEvents() {
return [
'onPluginsInitialized' => ['onPluginsInitialized', 0],
];
}
Bây giờ chúng ta hãy sử dụng onPluginInitialized sự kiện dưới RandomPlugin lớp được sử dụng để định tuyến trang được định cấu hình trong random.yaml tập tin.
Phương pháp onPluginInitialized() chứa mã sau -
public function onPluginsInitialized() {
$uri = $this->grav['uri'];
$route = $this->config->get('plugins.random.route');
if ($route && $route == $uri->path()) {
$this->enable([
'onPageInitialized' => ['onPageInitialized', 0]
]);
}
}
Các Uri đối tượng bao gồm các uri, thông tin cập nhật về lộ trình. Các cấu hình đối tượng quy định cụ thể giá trị cấu hình cho định tuyến các plugin ngẫu nhiên và lưu trữ nó trong đối tượng đường.
Bây giờ chúng ta sẽ so sánh đường dẫn đã định cấu hình với đường dẫn URI hiện tại để thông báo cho plugin biết onPageInitialized biến cố.
Hiển thị Trang Ngẫu nhiên
Bạn có thể hiển thị trang ngẫu nhiên bằng cách sử dụng mã với phương pháp sau:
public function onPageInitialized() {
$taxonomy_map = $this->grav['taxonomy'];
$filters = (array) $this->config->get('plugins.random.filters');
$operator = $this->config->get('plugins.random.filter_combinator', 'and');
if (count($filters)) {
$collection = new Collection();
$collection->append($taxonomy_map->findTaxonomy($filters, $operator)->toArray());
if (count($collection)) {
unset($this->grav['page']);
$this->grav['page'] = $collection->random()->current();
}
}
}
Như được hiển thị trong mã,
Gán đối tượng phân loại cho biến $taxonomy_map.
Nhận mảng bộ lọc sử dụng phân loại đã định cấu hình từ cấu hình plugin bằng cách sử dụng configvật. Chúng tôi đang sử dụng mặt hàng nhưcategory : blog.
Chúng tôi đang sử dụng collection để lưu trữ trang ngẫu nhiên trong $collection. Nối trang phù hợp với bộ lọc vào$collection Biến đổi.
Bỏ đặt đối tượng trang hiện tại và đặt trang hiện tại hiển thị dưới dạng trang ngẫu nhiên trong bộ sưu tập.
Cuối cùng, chúng ta sẽ thấy mã hoàn chỉnh của plugin để hiển thị một trang ngẫu nhiên như hình dưới đây -
<?php
namespace Grav\Plugin;
use Grav\Common\Page\Collection;
use Grav\Common\Plugin;
use Grav\Common\Uri;
use Grav\Common\Taxonomy;
class RandomPlugin extends Plugin {
public static function getSubscribedEvents() {
return [
'onPluginsInitialized' => ['onPluginsInitialized', 0],
];
}
public function onPluginsInitialized() {
$uri = $this->grav['uri'];
$route = $this->config->get('plugins.random.route');
if ($route && $route == $uri->path()) {
$this->enable([
'onPageInitialized' => ['onPageInitialized', 0]
]);
}
}
public function onPageInitialized() {
$taxonomy_map = $this->grav['taxonomy'];
$filters = (array) $this->config->get('plugins.random.filters');
$operator = $this->config->get('plugins.random.filter_combinator', 'and');
if (count($filters)) {
$collection = new Collection();
$collection->append($taxonomy_map->findTaxonomy($filters, $operator)->toArray());
if (count($collection)) {
unset($this->grav['page']);
$this->grav['page'] = $collection->random()->current();
}
}
}
}
Mở trình duyệt của bạn và nhập localhost / folder_name / random để xem trang ngẫu nhiên như trong ảnh chụp màn hình sau: