Προσθήκη πρόσθετου
Τα πρόσθετα είναι οι επεκτάσεις που επεκτείνουν τις δυνατότητες του Light Portal. Για να δημιουργήσετε το δικό σας πρόσθετο, απλώς ακολουθήστε τις παρακάτω οδηγίες.
Αριθμός τύπου πρόσθετων
For better type safety and IDE support, you can use the PluginType enum instead of string values for the type parameter:
use LightPortal\Enums\PluginType;
use LightPortal\Plugins\PluginAttribute;
// Instead of: #[PluginAttribute(type: 'editor')]
#[PluginAttribute(type: PluginType::EDITOR)]
// Instead of: #[PluginAttribute(type: 'block')]
#[PluginAttribute(type: PluginType::BLOCK)]
// Instead of: #[PluginAttribute(type: 'other')]
#[PluginAttribute(type: PluginType::OTHER)]
// Or simply omit the type parameter since OTHER is default:
#[PluginAttribute]Available PluginType values:
PluginType::ARTICLE- For processing article contentPluginType::BLOCK- For blocksPluginType::BLOCK_OPTIONS- For block optionsPluginType::COMMENT- For comment systemsPluginType::EDITOR- For editorsPluginType::FRONTPAGE- For frontpage modificationsPluginType::GAMES- For gamesPluginType::ICONS- For icon librariesPluginType::IMPEX- For import/exportPluginType::OTHER- Default type (can be omitted)PluginType::PAGE_OPTIONS- For page optionsPluginType::PARSER- For parsersPluginType::SEO- For SEOPluginType::SSI- For blocks with SSI functions
For plugins extending Block, Editor, GameBlock, or SSIBlock classes, the type is automatically inherited and doesn't need to be specified explicitly.
Σημειώσεις
Μπορείτε να χρησιμοποιήσετε το PluginMaker ως βοηθητικό για να δημιουργήσετε τα δικά σας πρόσθετα. Κάντε λήψη και ενεργοποιήστε το στη σελίδα Διαχειριστής -> Ρυθμίσεις πύλης -> Προσθήκες.

Επιλογή του τύπου προσθήκης
Επί του παρόντος, είναι διαθέσιμοι οι ακόλουθοι τύποι προσθηκών:
| Τύπος | Περιγραφή |
|---|---|
block | Προσθήκες που προσθέτουν έναν νέο τύπο μπλοκ για την πύλη. |
ssi | Προσθήκες (συνήθως μπλοκ) που χρησιμοποιούν συναρτήσεις SSI για την ανάκτηση δεδομένων. |
editor | Προσθήκες που προσθέτουν ένα πρόγραμμα επεξεργασίας τρίτου μέρους για διαφορετικούς τύπους περιεχομένου. |
comment | Προσθήκες που προσθέτουν ένα γραφικό στοιχείο σχολίων τρίτου μέρους αντί για το ενσωματωμένο. |
parser | Προσθήκες που υλοποιούν τον αναλυτή για το περιεχόμενο σελίδων και μπλοκ. |
article | Πρόσθετα για την επεξεργασία του περιεχομένου καρτών άρθρων στην κεντρική σελίδα. |
frontpage | Πρόσθετα για την αλλαγή της κύριας σελίδας της πύλης. |
impex | Πρόσθετα για εισαγωγή και εξαγωγή διαφόρων στοιχείων πύλης. |
block_options, page_options | Προσθήκες που προσθέτουν πρόσθετες παραμέτρους για την αντίστοιχη οντότητα (block ή .page). |
icons | Προσθήκες που προσθέτουν νέες βιβλιοθήκες εικονιδίων για να αντικαταστήσουν στοιχεία διεπαφής ή για χρήση σε κεφαλίδες μπλοκ |
seo | Πρόσθετα που επηρεάζουν κατά κάποιο τρόπο την ορατότητα του φόρουμ στο δίκτυο. |
other | Προσθήκες που δεν σχετίζονται με καμία από τις παραπάνω κατηγορίες. |
games | Πρόσθετα που συνήθως προσθέτουν ένα μπλοκ με κάποιο είδος παιχνιδιού. |
Δημιουργία καταλόγου προσθηκών
Δημιουργήστε έναν ξεχωριστό φάκελο για τα αρχεία των προσθηκών σας, μέσα στο /Sources/LightPortal/Plugins. Για παράδειγμα, εάν η προσθήκη σας ονομάζεται «HelloWorld», η δομή του φακέλου θα πρέπει να μοιάζει με αυτό:
...(Plugins)
└── HelloWorld/
├── langs/
│ ├── english.php
│ └── index.php
├── index.php
└── HelloWorld.phpΤο αρχείο «index.php» μπορεί να αντιγραφεί από φακέλους άλλων προσθηκών. Το αρχείο HelloWorld.php περιέχει τη λογική της προσθήκης:
<?php declare(strict_types=1);
namespace LightPortal\Plugins\HelloWorld;
use LightPortal\Plugins\Plugin;
use LightPortal\Plugins\PluginAttribute;
if (! defined('LP_NAME'))
die('No direct access...');
#[PluginAttribute(icon: 'fas fa-globe')]
class HelloWorld extends Plugin
{
public function init(): void
{
echo 'Hello world!';
}
// Other hooks and custom methods
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SSI
Εάν το πρόσθετο χρειάζεται να ανακτήσει δεδομένα χρησιμοποιώντας συναρτήσεις SSI, χρησιμοποιήστε την ενσωματωμένη μέθοδο «getFromSsi(string $function, ...$params)». Ως παράμετρος $function πρέπει να μεταβιβάσετε το όνομα μιας από τις συναρτήσεις που περιέχονται στο αρχείο SSI.php, χωρίς πρόθεμα ssi_. Για παράδειγμα:
<?php declare(strict_types=1);
namespace LightPortal\Plugins\TopTopics;
use LightPortal\Plugins\Event;
use LightPortal\Plugins\PluginAttribute;
use LightPortal\Plugins\SsiBlock;
if (! defined('LP_NAME'))
die('No direct access...');
#[PluginAttribute(icon: 'fas fa-star')]
class TopTopics extends SsiBlock
{
public function prepareContent(Event $e): void
{
$data = $this->getFromSSI('topTopics', 'views', 10, 'array');
if ($data) {
var_dump($data);
} else {
echo '<p>No top topics found.</p>';
}
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Blade templates
Your plugin can use a template with Blade markup. Για παράδειγμα:
<?php declare(strict_types=1);
namespace LightPortal\Plugins\Calculator;
use LightPortal\Plugins\Event;
use LightPortal\Plugins\PluginAttribute;
use LightPortal\Plugins\Block;
use LightPortal\Utils\Traits\HasView;
if (! defined('LP_NAME'))
die('No direct access...');
#[PluginAttribute(icon: 'fas fa-calculator')]
class Calculator extends Block
{
use HasView;
public function prepareContent(Event $e): void
{
echo $this->view(params: ['id' => $e->args->id]);
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Οδηγίες:
- Create the
viewssubdirectory inside your plugin directory if it doesn't exist. - Δημιουργήστε το αρχείο
default.blade.phpμε το ακόλουθο περιεχόμενο:
<div class="some-class-{{ $id }}">
{{-- Your blade markup --}}
</div>
<style>
// Your CSS
</style>
<script>
// Your JS
</script>Composer
Η προσθήκη σας μπορεί να χρησιμοποιεί βιβλιοθήκες τρίτων που έχουν εγκατασταθεί μέσω του Composer. Βεβαιωθείτε ότι το αρχείο «composer.json», το οποίο περιέχει τις απαραίτητες εξαρτήσεις, βρίσκεται στον κατάλογο των προσθηκών. Πριν δημοσιεύσετε την προσθήκη, ανοίξτε τον κατάλογο της προσθήκης στη γραμμή εντολών και εκτελέστε την εντολή: "composer install --no-dev -o". Μετά από αυτό, ολόκληρο το περιεχόμενο του καταλόγου πρόσθετων μπορεί να συσκευαστεί ως ξεχωριστή τροποποίηση για SMF (για παράδειγμα, δείτε το πακέτο PluginMaker).
Για παράδειγμα:
<?php declare(strict_types=1);
namespace LightPortal\Plugins\CarbonDate;
use Carbon\Carbon;
use LightPortal\Plugins\Plugin;
if (! defined('LP_NAME'))
die('No direct access...');
class CarbonDate extends Plugin
{
public function init(): void
{
require_once __DIR__ . '/vendor/autoload.php';
$date = Carbon::now()->format('l, F j, Y \a\t g:i A');
echo 'Current date and time: ' . $date;
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"require": {
"nesbot/carbon": "^3.0"
},
"config": {
"optimize-autoloader": true
}
}