Open eClass Widgets (Μικροεφαρμογές)
Ένα widget εγκαθίσταται μέσα στον φάκελο widgets στο root του openeclass και πρέπει να ακολουθούν την παρακάτω δομή φακέλων και αρχείων:
- <developer_name or team_name>
- <widget_name>
- <widget_name>.php (Το βασικό αρχείο του widget)
- views (υποχρεωτικός φάκελος που περιλαμβάνει 2 αρχεία)
- run.blade.php (blade template που αφορά την εκτέλεση / εμφάνιση του widget)
- options.blade.php (blade template που αφορά την εμφάνιση των options του widget)
- css (προαιρετικός φάκελος που περιλαμβάνει τα css αρχεία του widget)
- images (προαιρετικός φάκελος που περιλαμβάνει φωτογραφίες που χρησιμοποιεί το widget)
- js (προαιρετικός φάκελος που περιλαμβάνει τα javascript αρχεία του widget)
Παράδειγμα δημιουργία ενός hello world widget
Αρχείο HelloWorldWidget.php
<?php // Widget's namespace should always follow folder structure (according to PSR-2 autoloading) namespace Widgets\Openeclass\HelloWorld; // These declarations are mandatory use Widgets\Widget; use Widgets\WidgetWidgetArea; use Widgets\WidgetInterface; // A widget's class should always extend class "Widget" and implement WidgetInterface class HelloWorldWidget extends Widget implements WidgetInterface { public function __construct() { parent::__construct(); /* Supported languages * [el] => Ελληνικά, [en] => English, [es] => Español, [cs] => Česky, [sq] => Shqip, * [bg] => Български, [ca] => Català, [da] => Dansk, [nl] => Nederlands, [fi] => Suomi, * [fr] => Français [de] => Deutsch [is] => Íslenska [it] => Italiano [jp] => 日本語 [pl] => Polski [ru] => Русский [tr] => Türkçe [sv] => Svenska * * Fallback language is English */ $this->name = array( 'en' => 'Hello World', 'el' => 'Γεια σου κόσμε' ); $this->description = array( 'en' => 'This is a widget simply for widget creation reference', 'el' => 'Ένα widget ως αναφορά για την δημιουργία άλλων widgets από τους προγραμματιστές' ); } public static function install() { /* START CUSTOM CODE */ /* END CUSTOM CODE */ return self::register_widget(); } public static function uninstall() { /* START CUSTOM CODE */ /* END CUSTOM CODE */ return self::unregister_widget(); } public function run($widget_widget_area_id) { $this->initialize_widget_data($widget_widget_area_id); /* START CUSTOM CODE */ /* END CUSTOM CODE */ return widget_view("run", $this->view_data); } public function getOptionsForm($widget_widget_area_id) { $this->initialize_widget_data($widget_widget_area_id); //START CUSTOM CODE //END CUSTOM CODE return widget_view("options", $this->view_data); } }
Αντίστοιχα αρχεία blade
run.blade.php
<div class="panel"> <div class="panel-body"> <h1>Hello World! Nice to meet you!</h1> </div> </div>
option.blade.php
// We live the file empty as there are no options in our hello world widget
Χρήσιμες functions και variables
widget_view()
και $this→view_data
Για να περάσουμε μια variable σε ένα blade view απλά χρησιμοποιούμε τον $this→view_data πίνακα.
Παράδειγμα
$this->view_data['announcements'] = Database::get()->queryArray("SELECT * FROM announcement"); return widget_view("run", $this->view_data);
Για να εμφανίσουμε το αποτέλεσμα στο Blade view θα κάναμε το παρακάτω
@foreach ($announcements as $announcement) <li>{{ $announcement->title }}</li> @endforeach
widget_css_link()
και widget_js_link()
Για να συμπεριλάβουμε css και js αρχεία που βρίσκονται στους φακέλους css και js αντίστοιχα του φακέλου του widget χρησιμοποιούμε τις functions widget_css_link() και widget_js_link() σύμφωνα με το παρακάτω παράδειγμα
widget_css_link('clock.css', $this->folder); widget_js_link('clock.js', $this->folder);
widget_tbl_name()
Οι ονοματοδοσία πινάκων μιας μικροεφαρμογής ακολουθεί συγκεκριμένο πρότυπο (wdgt_{developer_team}_{onoma_pinaka}).
Για να παράγουμε ένα τέτοιο όνομα εύκολα μπορούμε να χρησιμοποιήσουμε την function widget_tbl_name()
σύμφωνα με τα παρακάτω παραδείγματα.
<?php namespace Widgets\Openeclass\Clock; use Widgets\Widget; use Widgets\WidgetWidgetArea; use Widgets\WidgetInterface; class ClockWidget extends Widget implements WidgetInterface { ... public static function install() { $tbl_name = self::widget_tbl_name(); \Database::get()->query("CREATE TABLE IF NOT EXISTS $tbl_name ( `id` int(11) NOT NULL auto_increment PRIMARY KEY, `whatever` varchar(255) NOT NULL)"); return self::register_widget(); } public static function uninstall() { $tbl_name = self::widget_tbl_name(); \Database::get()->query("DROP TABLE IF EXISTS $tbl_name"); return self::unregister_widget(); }
Στην παραπάνω περίπτωση ο πίνακας που θα δημιουργείται κατά την εγκατάσταση της μικροεφαρμογής είναι ο wdgt_openeclass_clock Εναλλακτικά θα μπορούμε να παραλλάξουμε το όνομα του πίνακα που δημιουργείται περνώντας στην function κάποιο string ως εξής:
$tbl_name = self::widget_tbl_name('time');
Το παραπάνω θα δημιουργούσε έναν πίνακα με όνομα wdgt_openeclass_time