Wewnętrzne rozszerzanie systemu OTOBO
W tym artykule dowiesz się, jak dostosowywać OTOBO bezpośrednio w jądrze – poprzez konfigurację XML, moduły Perla i szablony. Pokażemy Ci krok po kroku, jak zintegrować własny moduł „HelloWorld” z systemem.
1. Struktura katalogów
Wszystkie dostosowania znajdują się w katalogu Kernel/ wewnątrz Twojego klonu OTOBO:
Kernel/
├─ Config/Files/ # Rejestracje XML
│ └─ XML/
├─ System/ # Moduły logiki biznesowej (Core)
├─ Modules/ # Kontrolery Frontend (Agent/Customer)
├─ Output/HTML/Standard/ # Szablony Template Toolkit (TT)
└─ Language/ # Tłumaczenia2. Konfiguracja XML
Nowe moduły i trasy są rejestrowane za pomocą XML. Utwórz plik HelloWorld.xml w Kernel/Config/Files/XML/:
<?xml version="1.0" encoding="UTF-8"?>
<otobo_config version="2.0" init="Application">
<!-- 1. Rejestracja modułu Frontend -->
<Setting Name="Frontend::Module###AgentHelloWorld" Required="1" Valid="1">
<Navigation>Frontend::Agent::ModuleRegistration</Navigation>
<Value>
<Item ValueType="FrontendRegistration">
<Hash>
<Item Key="Group"><Array><Item>users</Item></Array></Item>
<Item Key="Description" Translatable="1">Moduł HelloWorld</Item>
<Item Key="Title" Translatable="1">HelloWorld</Item>
<Item Key="NavBarName">HelloWorld</Item>
</Hash>
</Item>
</Value>
</Setting>
</otobo_config>3. Moduł Core (Logika biznesowa)
Utwórz swoją logikę w Kernel/System/HelloWorld.pm:
package Kernel::System::HelloWorld;
use strict;
use warnings;
our @ObjectDependencies = ();
sub new {
my ($Type, %Param) = @_;
return bless {}, $Type;
}
sub GetHelloWorldText {
my ($Self, %Param) = @_;
return $Self->_FormatText(String => 'Hello World');
}
sub _FormatText {
my ($Self, %Param) = @_;
return uc $Param{String};
}
1;4. Moduł Frontend (Kontroler)
W Kernel/Modules/AgentHelloWorld.pm zintegruj swoją logikę z frontendem Agent:
package Kernel::Modules::AgentHelloWorld;
use strict;
use warnings;
sub new { bless {}, shift }
sub Run {
my ($Self, %Param) = @_;
my $HelloObj = $Kernel::OM->Get('Kernel::System::HelloWorld');
my $LayoutObj = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my %Data;
$Data{Text} = $HelloObj->GetHelloWorldText();
return
$LayoutObj->Header(Title => 'HelloWorld')
. $LayoutObj->NavigationBar()
. $LayoutObj->Output(
TemplateFile => 'AgentHelloWorld',
Data => \%Data,
)
. $LayoutObj->Footer();
}
1;5. Szablony (TT)
Utwórz następujący szablon w Kernel/Output/HTML/Standard/AgentHelloWorld.tt:
[% Data.Text %]
<p>To jest Twój własnoręcznie stworzony moduł HelloWorld!</p>6. Przykładowy przepływ pracy
Przeładuj:
bashbin/otobo.Console.pl Maint::Config::RebuildWyczyść pamięć podręczną:
bashbin/otobo.Console.pl Maint::Cache::DeleteOtwórz przeglądarkę: Interfejs Agent → Menu → „HelloWorld”
7. Wskazówki i najlepsze praktyki
- Czysto deklaruj ObjectDependencies (np. DB, Layout).
- Nie zapomnij o dokumentacji POD w modułach Perla.
- Utrzymuj tłumaczenia w
Kernel/Language/de_*.pm. - Skonfiguruj testy jednostkowe z Mojolicious (opcjonalnie).
- Po każdej zmianie wykonaj rebuild konfiguracji i usuń pamięć podręczną.
Dzięki temu masz solidną podstawę do realizacji dalszych rozszerzeń jądra w OTOBO. Miłej zabawy podczas tworzenia!