Tartalom
Ebben a fejezetben egy új OTRS modul írása van szemléltetve egy egyszerű kis program alapján. A szükséges előkövetelmény egy olyan OTRS fejlesztői környezet, amely a hasonló nevű fejezetben van megadva.
Szeretnénk írni egy olyan kis OTRS modult, amely a „Hello World” szöveget
jeleníti meg, amikor előhívják. Mindenek előtt fel kell építenünk a
/Hello World
könyvtárat a modulhoz a fejlesztői
könyvtárban. Ebben a könyvtárban létrehozható az OTRS-ben meglévő összes
könyvtár. Minden modulnak legalább a következő könyvtárakat kell
tartalmaznia:
Kernel Kernel/System Kernel/Modules Kernel/Output/HTML/Templates/Standard Kernel/Config Kernel/Config/Files Kernel/Config/Files/XML/ Kernel/Language
Egy modulregisztráció létrehozása megkönnyíti az új modul megjelenítését az
OTRS-ben. Ezért létrehozunk egy
/Kernel/Config/Files/XML/HelloWorld.xml
fájlt. Ebben a
fájlban létrehozunk egy új beállítási elemet. A különféle beállítások hatása
a „Beállítási mechanizmus” fejezetben van leírva.
<?xml version="1.0" encoding="UTF-8" ?> <otrs_config version="2.0" init="Application"> <Setting Name="Frontend::Module###AgentHelloWorld" Required="1" Valid="1"> <Description Translatable="1">FrontendModuleRegistration for HelloWorld module.</Description> <Navigation>Frontend::Agent::ModuleRegistration</Navigation> <Value> <Item ValueType="FrontendRegistration"> <Hash> <Item Key="Group"> <Array> <Item>users</Item> </Array> </Item> <Item Key="GroupRo"> <Array> </Array> </Item> <Item Key="Description" Translatable="1">HelloWorld.</Item> <Item Key="Title" Translatable="1">HelloWorld</Item> <Item Key="NavBarName">HelloWorld</Item> </Hash> </Item> </Value> </Setting> <Setting Name="Loader::Module::AgentHelloWorld###002-Filename" Required="0" Valid="1"> <Description Translatable="1">Loader module registration for the agent interface.</Description> <Navigation>Frontend::Agent::ModuleRegistration::Loader</Navigation> <Value> <Hash> <Item Key="CSS"> <Array> </Array> </Item> <Item Key="JavaScript"> <Array> </Array> </Item> </Hash> </Value> </Setting> <Setting Name="Frontend::Navigation###AgentHelloWorld###002-Filename" Required="0" Valid="1"> <Description Translatable="1">Main menu item registration.</Description> <Navigation>Frontend::Agent::ModuleRegistration::MainMenu</Navigation> <Value> <Array> <DefaultItem ValueType="FrontendNavigation"> <Hash> </Hash> </DefaultItem> <Item> <Hash> <Item Key="Group"> <Array> <Item>users</Item> </Array> </Item> <Item Key="GroupRo"> <Array> </Array> </Item> <Item Key="Description" Translatable="1">HelloWorld.</Item> <Item Key="Name" Translatable="1">HelloWorld</Item> <Item Key="Link">Action=AgentHelloWorld</Item> <Item Key="LinkOption"></Item> <Item Key="NavBar">HelloWorld</Item> <Item Key="Type">Menu</Item> <Item Key="Block"></Item> <Item Key="AccessKey"></Item> <Item Key="Prio">8400</Item> </Hash> </Item> </Array> </Value> </Setting> </otrs_config>
A hivatkozások létrehozása és a rendszerbeállítások végrehajtása után megjelenik egy új modul „HelloWorld” néven. Előhívásakor egy hibaüzenet jelenik meg, mivel az OTRS még nem találja a hozzá tartozó előtétprogram modult. Ez a következő dolog, amit létre kell hozni. Ehhez hozzuk létre az alábbi fájlt:
# -- # Kernel/Modules/AgentHelloWorld.pm - előtétprogram modul # Copyright (C) (év) (szerző neve) (szerző e-mail címe) # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- package Kernel::Modules::AgentHelloWorld; use strict; use warnings; # Az előtétprogram-modulokat nem kezeli az objektumkezelő. our $ObjectManagerDisabled = 1; sub new { my ( $Type, %Param ) = @_; # új kivonat lefoglalása az objektumhoz my $Self = {%Param}; bless ($Self, $Type); return $Self; } sub Run { my ( $Self, %Param ) = @_; my %Data = (); my $HelloWorldObject = $Kernel::OM->Get('Kernel::System::HelloWorld'); my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout'); $Data{HelloWorldText} = $HelloWorldObject->GetHelloWorldText(); # kimenet felépítése my $Output = $LayoutObject->Header(Title => "HelloWorld"); $Output .= $LayoutObject->NavigationBar(); $Output .= $LayoutObject->Output( Data => \%Data, TemplateFile => 'AgentHelloWorld', ); $Output .= $LayoutObject->Footer(); return $Output; } 1;
Ezután hozzunk létre egy fájlt a
/HelloWorld/Kernel/System/HelloWorld.pm
alapmodulhoz az
alábbi tartalommal:
# -- # Kernel/System/HelloWorld.pm - alapmodul # Copyright (C) (év) (szerző neve) (szerző e-mail címe) # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- package Kernel::System::HelloWorld; use strict; use warnings; # sorolja fel az objektumfüggőségeket (például Kernel::System::DB) itt our @ObjectDependencies = ( # 'Kernel::System::DB', ); =head1 NAME HelloWorld - Kicsi „Helló, Világ” modul =head1 DESCRIPTION Kicsi OTRS modul, amely a „Helló, Világ” szöveget jeleníti meg, ha meghívják. =head2 new() Egy objektum létrehozása. Ne használja közvetlenül, inkább így használja: my $HelloWorldObject = $Kernel::OM->Get('Kernel::System::HelloWorld'); =cut sub new { my ( $Type, %Param ) = @_; # új kivonat lefoglalása az objektumnak my $Self = {}; bless ($Self, $Type); return $Self; } =head2 GetHelloWorldText() A „Helló, Világ” szöveg visszaadása. my $HelloWorldText = $HelloWorldObject->GetHelloWorldText(); =cut sub GetHelloWorldText { my ( $Self, %Param ) = @_; # A DBObject lekérése a központi objektumkezelőtől # my $DBObject = $Kernel::OM->Get('Kernel::System::DB'); my $HelloWorld = $Self->_FormatHelloWorldText( String => 'Helló, Világ', ); return $HelloWorld; } =begin Internal: =head2 _FormatHelloWorldText() A „Helló, Világ” szöveg nagybetűsre formázásra my $HelloWorld = $Self->_FormatHelloWorldText( String => 'Helló, Világ', ); =cut sub _FormatHelloWorldText{ my ( $Self, %Param ) = @_; my $HelloWorld = uc $Param{String}; return $HelloWorld; } =end Internal: 1;
Az utolsó hiányzó dolog, mielőtt az új modul futtatható lenne, a hozzá tartozó HTML sablon. Ezért hozzuk létre az alábbi fájlt:
# -- # Kernel/Output/HTML/Templates/Standard/AgentHelloWorld.tt - áttekintő # Copyright (C) (év) (szerző neve) (szerző e-mail címe) # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- <h1>[% Translate("Overview") | html %]: [% Translate("HelloWorld") %]</h1> <p> [% Data.HelloWorldText | Translate() | html %] </p>
A modul most már működik, és a meghívásakor megjeleníti a „Hello World” szöveget.
Ha a „Hello World!” szöveget le kell fordítani például magyarra, akkor
létrehozhat egy fordítási fájlt ehhez a nyelvhez a
HelloWorld/Kernel/Language/hu_AgentHelloWorld.pm
helyre. Példa:
package Kernel::Language::hu_AgentHelloWorld; use strict; use warnings; sub Data { my $Self = shift; $Self->{Translation}->{'Hello World!'} = 'Helló, Világ!'; return 1; } 1;
A fent megadott példa azt mutatja be, hogy nem túl bonyolult egy új modult írni az OTRS-hez. Fontos azonban meggyőződni arról, hogy a modul és a fájlnév egyedi legyen, és ennélfogva ne ütközzenek a keretrendszerrel vagy egyéb kiterjesztő modulokkal. Amikor egy modul elkészült, akkor egy OPM csomagot kell előállítani belőle (lásd a csomagkészítés fejezetet).