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เพื่อดูเพจสุ่มดังที่แสดงในภาพหน้าจอต่อไปนี้ -