Open eClass Documentation
You are here: start » el » developers » widgets

This is an old revision of the document!


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

Previous Next

Open eClass Documentation

Table of Contents