Skip to content

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łumaczenia

2. Konfiguracja XML

Nowe moduły i trasy są rejestrowane za pomocą XML. Utwórz plik HelloWorld.xml w Kernel/Config/Files/XML/:

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:

perl
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:

perl
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:

tt
[% Data.Text %]

<p>To jest Twój własnoręcznie stworzony moduł HelloWorld!</p>

6. Przykładowy przepływ pracy

  1. Przeładuj:

    bash
    bin/otobo.Console.pl Maint::Config::Rebuild
  2. Wyczyść pamięć podręczną:

    bash
    bin/otobo.Console.pl Maint::Cache::Delete
  3. Otwó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!