Plugins - advanced/sl: Difference between revisions
From LimeSurvey Manual
Maren.fritz (talk | contribs) Created page with "|Diagram UML za posodobitev razširitev" |
m Text replacement - "http://manual.limesurvey.org" to "https://manual.limesurvey.org" |
||
(22 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<languages /> | <languages /> | ||
<span id="Overview"></span> | |||
== Pregled == | == Pregled == | ||
Line 10: | Line 11: | ||
Vtičniki morajo izvajati vmesnik [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/iPlugin.php iPlugin]. Priporočamo, da svoj razred vtičnika razširite iz razreda [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/PluginBase.php PluginBase]. | Vtičniki morajo izvajati vmesnik [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/iPlugin.php iPlugin]. Priporočamo, da svoj razred vtičnika razširite iz razreda [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/PluginBase.php PluginBase]. | ||
Vtičniki so razviti na podlagi mehanizma [ | Vtičniki so razviti na podlagi mehanizma [https://manual.limesurvey.org/Plugin_events event]. | ||
<span id="Plugin_settings"></span> | |||
== Nastavitve vtičnika == | == Nastavitve vtičnika == | ||
Line 76: | Line 78: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Survey specific plugin settings === | |||
Two events are used to create survey specific plugin settings: | |||
* newSurveySettings | |||
* beforeSurveySettings | |||
Example to disable a plugin for a specific survey: | |||
<syntaxhighlight lang="php"> | |||
public function init() | |||
{ | |||
$this->subscribe('beforeSurveySettings'); | |||
$this->subscribe('newSurveySettings'); | |||
// Other events... | |||
} | |||
public function beforeSurveySettings() | |||
{ | |||
$event = $this->event; | |||
$surveyId = intval($event->get('survey')); | |||
$event->set( | |||
"surveysettings.{$this->id}", | |||
[ | |||
'name' => get_class($this), | |||
'settings' => [ | |||
'isActive' => [ | |||
'type' => 'boolean', | |||
'label' => 'isActive', | |||
'current' => $this->getIsActive($surveyId), | |||
'help' => 'Activate plugin for this survey' | |||
], | |||
] | |||
] | |||
); | |||
} | |||
public function newSurveySettings() | |||
{ | |||
$event = $this->event; | |||
foreach ($event->get('settings') as $name => $value) | |||
{ | |||
$this->set($name, $value, 'Survey', $event->get('survey'), false); | |||
} | |||
} | |||
private function getIsActive(int $sid): bool | |||
{ | |||
return (bool) $this->get('isActive', 'Survey', $sid, false); | |||
} | |||
</syntaxhighlight> | |||
<span id="Events"></span> | |||
== Dogodki == | == Dogodki == | ||
Line 90: | Line 147: | ||
Objektu API se na zahtevo lahko dodajo nove funkcije. | Objektu API se na zahtevo lahko dodajo nove funkcije. | ||
<span id="Form_extension{{NewIn|v=6}}"></span> | |||
== Razširitev obrazca{{NewIn|v=6}} == | == Razširitev obrazca{{NewIn|v=6}} == | ||
<span id="Introduction"></span> | |||
=== Uvod === | === Uvod === | ||
Line 108: | Line 167: | ||
Ena stvar, ki je v tem sistemu ne morete narediti, je dodajanje ''novih zavihkov obrazca''. | Ena stvar, ki je v tem sistemu ne morete narediti, je dodajanje ''novih zavihkov obrazca''. | ||
<span id="Example"></span> | |||
=== Primer === | === Primer === | ||
Line 143: | Line 203: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<span id="Validation"></span> | |||
=== Validacija === | === Validacija === | ||
Preverjanje vnosa se izvede v funkciji <code>save</code> (glejte primer zgoraj). Če je objavljena vrednost neveljavna, vrzite <code>SaveFailedException</code> in uporabniku bo prikazano opozorilno hitro sporočilo. | Preverjanje vnosa se izvede v funkciji <code>save</code> (glejte primer zgoraj). Če je objavljena vrednost neveljavna, vrzite <code>SaveFailedException</code> in uporabniku bo prikazano opozorilno hitro sporočilo. | ||
<span id="Supported_forms"></span> | |||
=== Podprti obrazci === | === Podprti obrazci === | ||
Line 180: | Line 242: | ||
To je to! | To je to! | ||
<span id="Localization_{{NewIn|v=3}}"></span> | |||
== Lokalizacija {{NewIn|v=3}} == | == Lokalizacija {{NewIn|v=3}} == | ||
Line 210: | Line 273: | ||
Datoteko [https://github.com/LimeSurvey/LimeSurvey/blob/master/locale/_template/limesurvey.pot limesurvey.pot] lahko uporabite kot primer, kako lahko izgleda pot datoteka. To je uvoženo v vaše prevajalsko orodje. | Datoteko [https://github.com/LimeSurvey/LimeSurvey/blob/master/locale/_template/limesurvey.pot limesurvey.pot] lahko uporabite kot primer, kako lahko izgleda pot datoteka. To je uvoženo v vaše prevajalsko orodje. | ||
<span id="Tools"></span> | |||
=== Orodja === | === Orodja === | ||
Eno odprtokodno orodje za urejanje po- in mo-datotek je [https://poedit.net/ Poedit]. | Eno odprtokodno orodje za urejanje po- in mo-datotek je [https://poedit.net/ Poedit]. | ||
<span id="Logging_{{NewIn|v=3}}"></span> | |||
== Beleženje {{NewIn|v=3}} == | == Beleženje {{NewIn|v=3}} == | ||
Line 238: | Line 303: | ||
Več informacij o konfiguraciji beleženja v Yii 1: [[Optional_settings#Logging_settings]]. | Več informacij o konfiguraciji beleženja v Yii 1: [[Optional_settings#Logging_settings]]. | ||
<span id="Extension_updates_{{NewIn|v=4}}"></span> | |||
== Posodobitve razširitve {{NewIn|v=4}} == | == Posodobitve razširitve {{NewIn|v=4}} == | ||
Line 298: | Line 364: | ||
[[Datoteka:manuallycheckforupdates.png||Ročno preveri posodobitve]] | [[Datoteka:manuallycheckforupdates.png||Ročno preveri posodobitve]] | ||
<span id="Under_the_hood"></span> | |||
=== Pod pokrovom === | === Pod pokrovom === | ||
Line 306: | Line 373: | ||
[[Datoteka:extensionupdateruml.png||Diagram UML za posodobitev razširitev]] | [[Datoteka:extensionupdateruml.png||Diagram UML za posodobitev razširitev]] | ||
Potek programa ob zagonu Yii: | |||
<pre> | <pre> | ||
Yii init | Yii init | ||
VersionFetcherServiceLocator->init() | |||
Dodaj REST zbiralnik različic | |||
ExtensionUpdaterServiceLocator->init() | |||
Dodaj PluginUpdater | |||
OPRAVILO: dodajte program za posodobitev za vsako vrsto razširitve (tema, predloga vprašanja, ...) | |||
</pre> | </pre> | ||
Potek programa pri izvajanju vtičnika UpdaterCheck: | |||
<pre> | <pre> | ||
Pridobite vse posodobitve iz ExtensionUpdaterServiceLocator | |||
Zanko vsak program za posodabljanje | |||
Za vsak program za posodabljanje se pomikajte po iskalnikih različic, ki jih je konfiguriral<updater> XML | |||
Za vsak iskalnik različic se obrnite na oddaljeni vir in pridobite informacije o različici | |||
Sestavite vse različice v obvestilo | |||
</pre> | </pre> | ||
Metoda [https://github.com/LimeSurvey/LimeSurvey/blob/develop/application/core/plugins/UpdateCheck/UpdateCheck.php#L130 checkAll] v vtičniku UpdateCheck ponuja primer, kako poizvedovati vse razširitve za nove različice. | |||
==== | <span id="Adding_new_version_fetchers"></span> | ||
==== Dodajanje novih prinašalcev različic ==== | |||
Če želite dodati nov zbiralnik različic po meri, zaženite to med inicializacijo Yii: | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$service = \Yii::app()->versionFetcherServiceLocator | $service = \Yii::app()->versionFetcherServiceLocator | ||
$service->addVersionFetcherType( | $service->addVersionFetcherType( | ||
'myNewVersionFetcherType', | |||
funkcija (\SimpleXMLElement $updaterXml) { | |||
vrni nov MyNewVersionFetcher( $updaterXml); | |||
} | |||
); | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Seveda mora razred <code>MyNewVersionFetcher</code> podrazred <code>VersionFetcher</code> . | |||
Če želite uporabiti pridobivalnik nove različice, konfigurirajte oznako <code>type</code> v posodobitvenem XML-ju za uporabo | |||
<code>myNewVersionFetcherType</code> ( | <code>myNewVersionFetcherType</code> (namesto npr. <code>rest</code> ). | ||
==== | <span id="Adding_new_extension_updaters"></span> | ||
==== Dodajanje novih posodobitev razširitev ==== | |||
Če želite dodati nov program za posodobitev razširitev po meri, zaženite to med inicializacijo Yii: | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
$service = \Yii::app()->extensionUpdaterServiceLocator; | $service = \Yii::app()->extensionUpdaterServiceLocator; | ||
$service->addUpdaterType( | $service->addUpdaterType( | ||
'myNewExtensionUpdater', | |||
function () { | |||
return MyNewExtensionUpdater::createUpdaters() ; | |||
} | |||
); | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Razred <code>MyNewExtensionUpdater</code> mora biti podrazred <code>ExtensionUpdater</code> . | |||
Zgornja oznaka <code>type</code> v config.xml ('plugin', 'theme', ...) bo nadzirala, kateri program za posodabljanje razširitev se uporablja za to razširitev. Sistem še ni popolnoma prilagodljiv, saj morate dodati tudi ExtensionInstaller po meri, elemente menija itd. Toda v teoriji in morda v prihodnosti bi moralo biti na ta način mogoče dodati novo vrsto razširitve. | |||
== | <span id="Extension_installer"></span> | ||
== Namestitveni program za razširitev == | |||
Knjižnica namestitvenega programa razširitve je sestavljena iz dveh abstraktnih razredov: | |||
* ExtensionInstaller | * ExtensionInstaller | ||
* FileFetcher | * FileFetcher | ||
ExtensionInstaller je podrazred za vsako vrsto razširitve, kot je PluginInstaller, QuestionThemeInstaller itd. | |||
FileFetcher je podrazred za vsak drugačen način pridobivanja datotek. Trenutno so podprte samo naložene datoteke zip, v prihodnosti pa bo morda na voljo tudi pridobivalnik Github ali LimeStore. | |||
[[ | [[Datoteka: extensioninstalleruml.png]] | ||
== | <span id="Special_plugins"></span> | ||
== Posebni vtičniki == | |||
* [[ | * [[Razvoj vtičnika za preverjanje pristnosti]] | ||
* [[ | * [[Razvoj vtičnika za izvoz]] | ||
== | <div class="mw-translate-fuzzy"> | ||
* [[ | == Razpoložljivi vtičniki == | ||
* [[ | * [[Vtičniki za preverjanje pristnosti]] | ||
* [[Revizijski dnevnik]] | |||
* [[CintLink]] | * [[CintLink]] | ||
* [[ | * [[Razpoložljivi vtičniki tretjih oseb]] | ||
</div> | |||
== | == Vadnica == | ||
[https://medium.com/@evently/creating-limesurvey-plugins-adcdf8d7e334 | [https://medium.com/@evently/creating-limesurvey-plugins-adcdf8d7e334 Ta] vadnica po korakih prikazuje, kako ustvariti vtičnik, ki pošlje zahtevo za objavo ob vsakem odgovoru na anketo predložitev. Vadnica vam pokaže, kako ustvariti in shraniti globalne nastavitve in nastavitve za posamezno anketo, kako registrirati dogodke in drugo. | ||
[[ | [[Kategorija:Razvoj]] | ||
[[ | [[Kategorija:Vtičniki]] |
Latest revision as of 09:16, 15 October 2024
Pregled
Od LimeSurvey 2.05 bo LimeSurvey uradno podpiral vtičnike. Nekatere vtičnike bo podprla ekipa LimeSurvey in bodo vključeni v jedro. Nekatere bodo podprli drugi zunaj ekipe LimeSurvey. Da jih boste lažje našli, si oglejte Razpoložljivi vtičniki tretjih oseb in jim dodajte svoj vtičnik!
Vtičniki omogočajo uporabnikom, da prilagodijo funkcionalnost svoje namestitve, medtem ko lahko še vedno izkoristijo redne posodobitve programske opreme.
Ta dokumentacija je namenjena razvijalcem, ki razširjajo LimeSurvey za lastno uporabo ali za svoje stranke; končnim uporabnikom ta dokumentacija ne bo v pomoč.
Vtičniki morajo izvajati vmesnik iPlugin. Priporočamo, da svoj razred vtičnika razširite iz razreda PluginBase.
Vtičniki so razviti na podlagi mehanizma event.
Nastavitve vtičnika
Z razširitvijo izkoristite skupno funkcionalnost, ki jo zahtevajo vtičniki, ki smo jih že implementirali za vas. Ena od teh funkcij je implementacija funkcije getPluginSettings. Ta funkcija mora vrniti matriko, ki opisuje konfiguracijske možnosti za uporabnika.
Primer vtičnika razkriva samo eno nastavljivo nastavitev, sporočilo, ki ga bo prikazal.
protected $settings = array(
'logo' => array(
'type' => 'logo',
'path' => 'assets/logo.png'
) ,
'message' => array(
'type' => 'string',
'label' => 'Message'
)
);
Matrika vsebuje ime za vsako nastavitev kot ključ. Vrednosti so nizi, ki vsebujejo zahtevane meta podatke.
Podprte vrste so:
- logotip
- int (celo število)
- niz (alfanumerično)
- besedilo
- html
- ustreznost
- info
- geslo
- datum
- izberite
Poleg vrste so na voljo številni drugi ključi:
- label, definira oznako
- privzeto, definira vrednost, ki se prikaže, če ni navedena nobena vrednost (samo za globalne nastavitve, ne za nastavitve ankete)
- current, definira trenutno vrednost.
- readOnly : prikazane nastavitve kot readonly
- htmlOptions, htmlOptions vhodnega dela (glejte priročnik Yii [[1]])
- pluginOptions, za nekatere nastavitve (html ali izberite) : nastavite možnost pripomočka
- labelOptions : htmlMožnosti oznake
- controlOptions : htmlMožnosti ovoja oznake in vnosa
Primer vtičnika z vsemi dejanskimi nastavitvami najdete na exampleSettings
Branje in pisanje nastavitev vtičnika
Možno je brati in pisati nastavitve vtičnika neposredno iz vaše kode vtičnika.
primer:
$mySetting = $this->get('mySetting');
$this->set('mySetting', $mySetting + 1);
Če je nastavitev ničelna, lahko dobite privzeto vrednost:
$mySetting = $this->get('mySetting', null, null, 10); // 10 je privzeto
Survey specific plugin settings
Two events are used to create survey specific plugin settings:
- newSurveySettings
- beforeSurveySettings
Example to disable a plugin for a specific survey:
public function init()
{
$this->subscribe('beforeSurveySettings');
$this->subscribe('newSurveySettings');
// Other events...
}
public function beforeSurveySettings()
{
$event = $this->event;
$surveyId = intval($event->get('survey'));
$event->set(
"surveysettings.{$this->id}",
[
'name' => get_class($this),
'settings' => [
'isActive' => [
'type' => 'boolean',
'label' => 'isActive',
'current' => $this->getIsActive($surveyId),
'help' => 'Activate plugin for this survey'
],
]
]
);
}
public function newSurveySettings()
{
$event = $this->event;
foreach ($event->get('settings') as $name => $value)
{
$this->set($name, $value, 'Survey', $event->get('survey'), false);
}
}
private function getIsActive(int $sid): bool
{
return (bool) $this->get('isActive', 'Survey', $sid, false);
}
Dogodki
Vtičniki se naročijo na dogodke in lahko komunicirajo z LimeSurvey, ko se dogodek sproži. Za seznam trenutno razpoložljivih dogodkov preverite Dogodki vtičnikov.
API
Vtičniki naj razširijo LimeSurvey samo prek njegovega "javnega" API-ja. To pomeni, da je neposredna uporaba razredov, najdenih v izvorni kodi, slaba praksa. Čeprav vas ne moremo prisiliti, da tega ne storite, tvegate, da boste imeli pokvarjen vtičnik z vsako našo manjšo posodobitvijo.
Kolikor je mogoče, komunicirajte z LimeSurvey samo prek metod, opisanih tukaj. Enako kot za dogodke.
Objekt API je na voljo prek $this->api
pri razširitvi iz PluginBase, sicer pa ga lahko dobite iz instance PluginManager, ki je posredovana konstruktorju vaših vtičnikov.
Objektu API se na zahtevo lahko dodajo nove funkcije.
<span id="Form_extension (New in 6 )">
Razširitev obrazca (New in 6 )
Uvod
Sistem za razširitev obrazcev je bolj splošen način za razširitev obrazcev v jedru LimeSurvey brez dodajanja novega dogodka za vsak obrazec.
Sestavljen je iz naslednjih komponent:
- Globalni modul, imenovan FormExtensionService
- Knjižnica vhodnih razredov, ki jih vtičniki lahko dodajo zgornji inicializaciji modula
- widget, skupaj z upodabljalniki po meri, ki se uporabljajo v datotekah pogleda LimeSurvey
Vsaka oblika je označena z pozicijskim nizom, npr<form name><dot><tab name> . Primer: globalsettings.general
ali globalsettings.security
.
Bistvo sistema, ki temelji na razredu, brez HTML-ja, je, da avtorje vtičnika osvobodi, da posodobijo HTML, ko se spremeni osnovni HTML. Kljub temu lahko avtor po potrebi uporabi vrsto RawHtmlInput
.
Ena stvar, ki je v tem sistemu ne morete narediti, je dodajanje novih zavihkov obrazca.
Primer
Če želite v obrazec dodati nov vnos iz vtičnika, uporabite naslednjo kodo iz vaše funkcije init()
:
OPRAVILO: Shranite v nastavitvah vtičnika namesto globalno
// Na vrhu datoteke
use LimeSurvey\Libraries\FormExtension\Inputs\TextInput;
use LimeSurvey\Libraries\FormExtension\SaveFailedException;
// Znotraj init()
Yii::app()->formExtensionService->add(
'globalsettings.general',
new TextInput([
'name' => 'myinput',
'label' => 'Oznaka',
'disabled' => res,
'tooltip' => 'Moo moo moo',
'help' => 'Nekaj besedila pomoči',
'save' => function($request, $connection) {
$value = $request->getPost('myinput');
if ($value === 'nekatera neveljavna vrednost') {
throw new SaveFailedException("Ni bilo mogoče shraniti vnosa po meri 'myinput'");
} else {
SettingGlobal::setSetting('myinput', $value);
}
} ,
'load' => function () {
return getGlobalSetting('myinput');
}
])
);
Validacija
Preverjanje vnosa se izvede v funkciji save
(glejte primer zgoraj). Če je objavljena vrednost neveljavna, vrzite SaveFailedException
in uporabniku bo prikazano opozorilno hitro sporočilo.
Podprti obrazci
Naslednje obrazce je mogoče razširiti:
- globalsettings.general (New in 6.0.0 )
Če želite dodati podporo za drug osnovni obrazec, morate uporabiti naslednjo spremembo v zahtevi za vlečenje:
V datoteko pogleda dodajte:
<?php
use LimeSurvey\Libraries\FormExtension\FormExtensionWidget;
use LimeSurvey\Libraries\FormExtension\Inputs\DefaultBaseRenderer;
?>
... več HTML
<?= FormExtensionWidget::render(
App()-> formExtensionService->getAll('globalsettings.security'),
nov DefaultBaseRenderer()
); ?>
Morda boste morali ustvariti nov razred upodabljalnika, ki temelji na DefaultBaseRenderer
, če se obrazec HTML razlikuje od drugih obrazcev. Morda boste morali tudi razširiti privzeti razred upodabljalnika z vrstami vnosa, ki še niso dodani.
Druga sprememba, ki jo morate narediti, je dodati klic storitvenemu razredu razširitve obrazca v dejanju krmilnika, ki shrani obrazec:
$request = App()->request;
Yii::app()->formExtensionService->applySave('globalsettings', $request);
To je to!
<span id="Localization_ (New in 3 )">
Lokalizacija (New in 3 )
Vtičniki lahko dodajo lastne področne datoteke. Uporabljena oblika datoteke je .mo, enaka kot pri prevodih jedra. Datoteke morajo biti shranjene v
<plugin root folder>/lokacija/<language> /<language> .mo
kje "<language> " je beseda iz dveh črk, kot je "de" ali "fr".
Če želite uporabiti določeno področno datoteko, uporabite funkcijo vtičnika gT:
$this->gT("Besedilo vtičnika, ki ga je treba prevesti");
Če danega niza ni mogoče najti v področni datoteki, specifični za vtičnik, bo funkcija iskala v osnovnih področnih datotekah. Zato je varno uporabljati nize, kot je "Prekliči":
$to->gT("Prekliči"); // Bo prevedeno, tudi če "Cancel" ni v datoteki področne nastavitve vtičnika
Če uporabljate poglede skupaj s svojim vtičnikom, uporabite
$plugin->gT("Prevedi me");
za prevajanje, specifično za vtičnik, po vašem mnenju.
Datoteko limesurvey.pot lahko uporabite kot primer, kako lahko izgleda pot datoteka. To je uvoženo v vaše prevajalsko orodje.
Orodja
Eno odprtokodno orodje za urejanje po- in mo-datotek je Poedit.
<span id="Logging_ (New in 3 )">
Beleženje (New in 3 )
Če želite nekaj prijaviti iz svojega vtičnika, samo napišite
$this->log("Vaše sporočilo");
Privzeta raven beleženja je sledenje, vendar lahko podate drugo raven dnevnika kot izbirni drugi argument:
$this->log("Nekaj je šlo narobe!", CLogger::LEVEL_ERROR);
Dnevniško datoteko najdete v mapi
<limesurvey root folder>/tmp/runtime/plugin.log
Vaše ime vtičnika se samodejno uporabi kot kategorija. Dober način za ogled samo napak iz vašega vtičnika je uporaba grep (v Linuxu):
$ tail -f tmp/runtime/plugin.log | grep<your plugin name>
Več informacij o konfiguraciji beleženja v Yii 1: Optional_settings#Logging_settings.
<span id="Extension_updates_ (New in 4 )">
Posodobitve razširitve (New in 4 )
Od LimeSurvey različice 4.0.0 naprej obstaja sistem za obravnavo vtičnikov in drugih posodobitev razširitev. Če želite uporabljati ta sistem, mora vaša razširitvena datoteka config.xml vsebovati konfiguracijo programa za posodabljanje.
<updaters>
<updater>
<stable> 1</stable>
<type> počitek</type>
<source> https://comfortupdate.limesurvey.org/index.php?r=limestorerest</source>
<manualUpdateUrl> https://somedownloadlink.com/maybegithub</manualUpdateUrl>
</updater>
</updaters>
(Zgornja izvorna oznaka kaže na API LimeStore REST, ki bo uporabljen za vse razširitve, ki so na voljo v naši LimeStore.)
Označi | Opis |
---|---|
stabilen | "1", če vam ta vir daje samo številke stabilne različice; "0", če bo vir zagotovil tudi nestabilne različice, kot je 0.3.3-beta .
|
tip | Za zdaj je podprt samo tip rest . Enostavno je dodati nove vrste posodobitve (preverjevalniki različic), kot so git, wget itd.
|
vir | URL za pridobivanje novih različic. |
manualUpdateUrl | URL, na katerega lahko uporabnik obišče najnovejšo različico razširitve. |
automaticUpdateUrl | OPRAVILO |
Če ne želite ponuditi programa za posodabljanje, morate v konfiguracijsko datoteko XML vnesti naslednje besedilo:
<updaters disabled="disabled">
</updaters>
Na ta način sistemu sporočite, da ste namenoma onemogočili sistem posodabljanja in ga niste kar pozabili dodati.
Novi vtičnik UpdateCheck - nameščen in aktiviran privzeto - preverja nove posodobitve za vse nameščene razširitve, ko se superskrbnik prijavi, asinhrono, največ enkrat na 24 ur. Če so najdene nove različice, se pošlje obvestilo.
Če je najdena nova varnostna posodobitev, se bo obvestilo odprlo samodejno in bo stilizirano v razredu "nevarnost".
|Razpoložljive varnostne posodobitve
Posodobitve lahko preverite ročno tako, da odprete pogled upravitelja vtičnikov in kliknete »Preveri posodobitve«. Upoštevajte, da je ta gumb viden le, če je aktiviran vtičnik UpdateCheck.
Pod pokrovom
V tem razdelku je kratek pregled izvajanja posodobitve razširitev.
Posodabljalnik razširitev je del knjižnice ExtensionInstaller. Spodaj je diagram UML za razrede, povezane s postopkom posodabljanja.
|Diagram UML za posodobitev razširitev
Potek programa ob zagonu Yii:
Yii init VersionFetcherServiceLocator->init() Dodaj REST zbiralnik različic ExtensionUpdaterServiceLocator->init() Dodaj PluginUpdater OPRAVILO: dodajte program za posodobitev za vsako vrsto razširitve (tema, predloga vprašanja, ...)
Potek programa pri izvajanju vtičnika UpdaterCheck:
Pridobite vse posodobitve iz ExtensionUpdaterServiceLocator Zanko vsak program za posodabljanje Za vsak program za posodabljanje se pomikajte po iskalnikih različic, ki jih je konfiguriral<updater> XML Za vsak iskalnik različic se obrnite na oddaljeni vir in pridobite informacije o različici Sestavite vse različice v obvestilo
Metoda checkAll v vtičniku UpdateCheck ponuja primer, kako poizvedovati vse razširitve za nove različice.
Dodajanje novih prinašalcev različic
Če želite dodati nov zbiralnik različic po meri, zaženite to med inicializacijo Yii:
$service = \Yii::app()->versionFetcherServiceLocator
$service->addVersionFetcherType(
'myNewVersionFetcherType',
funkcija (\SimpleXMLElement $updaterXml) {
vrni nov MyNewVersionFetcher( $updaterXml);
}
);
Seveda mora razred MyNewVersionFetcher
podrazred VersionFetcher
.
Če želite uporabiti pridobivalnik nove različice, konfigurirajte oznako type
v posodobitvenem XML-ju za uporabo
myNewVersionFetcherType
(namesto npr.rest
).
Dodajanje novih posodobitev razširitev
Če želite dodati nov program za posodobitev razširitev po meri, zaženite to med inicializacijo Yii:
$service = \Yii::app()->extensionUpdaterServiceLocator;
$service->addUpdaterType(
'myNewExtensionUpdater',
function () {
return MyNewExtensionUpdater::createUpdaters() ;
}
);
Razred MyNewExtensionUpdater
mora biti podrazred ExtensionUpdater
.
Zgornja oznaka type
v config.xml ('plugin', 'theme', ...) bo nadzirala, kateri program za posodabljanje razširitev se uporablja za to razširitev. Sistem še ni popolnoma prilagodljiv, saj morate dodati tudi ExtensionInstaller po meri, elemente menija itd. Toda v teoriji in morda v prihodnosti bi moralo biti na ta način mogoče dodati novo vrsto razširitve.
Namestitveni program za razširitev
Knjižnica namestitvenega programa razširitve je sestavljena iz dveh abstraktnih razredov:
- ExtensionInstaller
- FileFetcher
ExtensionInstaller je podrazred za vsako vrsto razširitve, kot je PluginInstaller, QuestionThemeInstaller itd.
FileFetcher je podrazred za vsak drugačen način pridobivanja datotek. Trenutno so podprte samo naložene datoteke zip, v prihodnosti pa bo morda na voljo tudi pridobivalnik Github ali LimeStore.
Datoteka: extensioninstalleruml.png
Posebni vtičniki
Razpoložljivi vtičniki
Vadnica
Ta vadnica po korakih prikazuje, kako ustvariti vtičnik, ki pošlje zahtevo za objavo ob vsakem odgovoru na anketo predložitev. Vadnica vam pokaže, kako ustvariti in shraniti globalne nastavitve in nastavitve za posamezno anketo, kako registrirati dogodke in drugo.