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