This is an old revision of the document!
Open eClass Widgets (Μικροεφαρμογές)
Ένα widget εγκαθίσταται μέσα στον φάκελο widgets στο root του openeclass και πρέπει να ακολουθούν την παρακάτω δομή φακέλων και αρχείων:
<pre> <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)
</pre>
Παράδειγμα δημιουργία ενός 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
Περισσότερες πληροφορίες για το blade templating μπορείτε να διαβάσετε στην αντίστοιχη ενότητα του wiki
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