Grav - บทช่วยสอนปลั๊กอิน
ในบทนี้เราจะเจาะลึกถึงวิธีการตั้งค่าและกำหนดค่าปลั๊กอิน นอกจากนี้เรายังจะเข้าใจโครงสร้างของปลั๊กอินและวิธีการแสดงเพจแบบสุ่ม ปลั๊กอินเป็นซอฟต์แวร์ที่มีฟังก์ชันเพิ่มเติมซึ่งเดิมยังไม่เสร็จสมบูรณ์โดยฟังก์ชันหลักของ Grav
ในบทความนี้เราจะแสดงเพจสุ่มโดยใช้ปลั๊กอินสุ่ม ก่อนที่จะใช้ปลั๊กอินนี้เราจะเห็นจุดสำคัญบางอย่างของปลั๊กอินแบบสุ่ม
คุณสามารถใช้ปลั๊กอินนี้เพื่อแสดงเพจแบบสุ่มโดยใช้ URI เป็น /random.
สร้างตัวกรองเพื่อใช้การจัดหมวดหมู่ที่ระบุในหน้า คุณสามารถสร้างเป็นไฟล์category : blog.
คุณสามารถแสดงเพจแบบสุ่มโดยใช้ตัวเลือกตัวกรอง นี่เป็นการแจ้งให้ Grav ใช้เนื้อหาเดียวกันกับที่จะแสดงในหน้าสุ่ม
ติดตั้งปลั๊กอิน
ทำตามขั้นตอนเหล่านี้เพื่อสร้างการตั้งค่าพื้นฐานสำหรับปลั๊กอินก่อนที่จะใช้ปลั๊กอินจริง
สร้างโฟลเดอร์ชื่อ random ภายใต้ user/plugins โฟลเดอร์
ภายใต้ user/plugins/random โฟลเดอร์สร้างสองไฟล์คือ -
random.php ใช้สำหรับรหัสปลั๊กอิน
random.yaml ใช้สำหรับการกำหนดค่า
การกำหนดค่าปลั๊กอิน
ในการใช้ปลั๊กอินแบบสุ่มเราจำเป็นต้องมีตัวเลือกการกำหนดค่าบางอย่าง เราจะเขียนบรรทัดต่อไปนี้ใต้ไฟล์random.yaml ไฟล์.
enabled:true
route:/random
filters:
category:blog
Random สร้างเส้นทางที่คุณกำหนด ตามตัวกรองการจัดหมวดหมู่จะเลือกรายการแบบสุ่ม ค่าเริ่มต้นของตัวกรองคือ'category: blog' ซึ่งใช้สำหรับการเลือกแบบสุ่ม
โครงสร้างปลั๊กอิน
สามารถใช้โค้ดต่อไปนี้ในโครงสร้างปลั๊กอิน
<?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 {
}
?>
เรากำลังใช้คลาสมากมายในปลั๊กอินโดยใช้ useงบที่ทำให้อ่านง่ายขึ้นและประหยัดพื้นที่ด้วย namespace Grav\Pluginจะต้องเขียนไว้ที่ด้านบนของไฟล์ PHP ควรเขียนชื่อปลั๊กอินtitlecase และควรขยายโดยใช้ Plugin.
คุณสามารถสมัครใช้งานฟังก์ชัน getSubscribedEvents() ไปที่ onPluginsInitializedเหตุการณ์; สิ่งนี้จะกำหนดเหตุการณ์ที่สมัครเป็นสมาชิกปลั๊กอิน เช่นนี้คุณสามารถใช้กิจกรรมเพื่อสมัครรับข้อมูลกิจกรรมอื่น ๆ
public static function getSubscribedEvents() {
return [
'onPluginsInitialized' => ['onPluginsInitialized', 0],
];
}
ให้เราใช้ไฟล์ onPluginInitialized เหตุการณ์ภายใต้ RandomPlugin คลาสที่ใช้สำหรับกำหนดเส้นทางเพจซึ่งกำหนดค่าไว้ในไฟล์ random.yaml ไฟล์.
วิธีการ onPluginInitialized() มีรหัสต่อไปนี้ -
public function onPluginsInitialized() {
$uri = $this->grav['uri'];
$route = $this->config->get('plugins.random.route');
if ($route && $route == $uri->path()) {
$this->enable([
'onPageInitialized' => ['onPageInitialized', 0]
]);
}
}
Uriวัตถุรวมถึง URI ปัจจุบันข้อมูลเกี่ยวกับเส้นทาง config ของวัตถุที่ระบุค่าการกำหนดค่าสำหรับการกำหนดเส้นทางปลั๊กอินสุ่มและเก็บไว้ในวัตถุเส้นทาง
ตอนนี้เราจะเปรียบเทียบเส้นทางที่กำหนดค่ากับเส้นทาง URI ปัจจุบันซึ่งแจ้งให้ปลั๊กอินฟังไฟล์ onPageInitialized เหตุการณ์.
กำลังแสดงเพจสุ่ม
คุณสามารถแสดงเพจสุ่มโดยใช้รหัสด้วยวิธีการต่อไปนี้ -
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();
}
}
}
ดังที่แสดงในรหัส
กำหนดวัตถุอนุกรมวิธานให้กับตัวแปร $taxonomy_map.
รับอาร์เรย์ของตัวกรองซึ่งใช้การจัดหมวดหมู่ที่กำหนดค่าไว้จากการกำหนดค่าปลั๊กอินโดยใช้ configวัตถุ. เรากำลังใช้รายการเป็นcategory : blog.
เรากำลังใช้ collection เพื่อจัดเก็บเพจแบบสุ่มในไฟล์ $collection. ต่อท้ายหน้าที่ตรงกับตัวกรอง$collection ตัวแปร.
ยกเลิกการตั้งค่าออบเจ็กต์เพจปัจจุบันและตั้งค่าเพจปัจจุบันเพื่อแสดงเป็นเพจสุ่มในคอลเลกชัน
ในที่สุดเราจะเห็นโค้ดที่สมบูรณ์ของปลั๊กอินเพื่อแสดงหน้าสุ่มดังที่แสดงด้านล่าง -
<?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();
}
}
}
}
เปิดเบราว์เซอร์ของคุณและพิมพ์localhost / folder_name / randomเพื่อดูเพจสุ่มดังที่แสดงในภาพหน้าจอต่อไปนี้ -