Saltearse al contenido

Create a Plugin

Esta página aún no está disponible en tu idioma.

Missing a feature in Castopod? Build it as a plugin and even share it with the community!

In order to get started, you first need to set up your Castopod dev environment.

You’ll first need to create your plugin folder in the plugins/ directory.

Using the create command Recommended

Section titled “Using the create command ”

To quickly get you started, you can have a folder generated for you using the following CLI command:

Terminal window
php spark plugins:create

👉 You will be prompted for metadata and hooks usage in order to have a personalized skeleton plugin generated for you!

  1. create a plugin folder inside a vendor directory

    • Directoryplugins
      • Directoryacme // vendor name
        • Directoryhello-world/ // plugin name
  2. add a manifest.json file

    • Directoryhello-world
      • manifest.json

    See the manifest reference.

  3. add the Plugin.php class

    • Directoryhello-world
      • manifest.json
      • Plugin.php

Now that your plugin folder is set, you can start working on your plugin’s logic by implementing the hooks needed.

You can prompt users for data through settings forms.

These forms can be built declaratively using the settings attribute in your manifest.

manifest.json
{
"settings": {
"general": {
"field-key": {
"type": "text",
"label": "Enter a text"
}
},
"podcast": {
"field-key": {
"type": "text",
"label": "Enter a text for this podcast"
}
},
"episode": {
"field-key": {
"type": "type",
"label": "Enter a text for this episode"
}
}
}
}

This example will generate 3 different settings forms at 3 different levels in the Castopod admin area:

  • general: a general form
  • podcast: a form for each podcast
  • episode: a form for each episode

You can then access the data (input by the user) via helper methods by specifying the field key as a parameter:

$this->getGeneralSetting('field-key');
$this->getPodcastSetting($podcast->id, 'field-key');
$this->getEpisodeSetting($episode->id, 'field-key');