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).