Thread Fehlermeldung: Global symbol "$Output" requires explicit package name (29 answers)
Opened by bendenn at 2012-07-26 14:04

renee
 2012-07-26 21:27
#160221 #160221
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kannst Du vielleicht etwas genauer beschreiben, was Du machen willst?

Was soll das Modul denn machen? Es sieht fast so aus, als wolltest Du ein zusätzliches Feature für das Kundenportal von OTRS machen (denn Du benutzt "use Kernel::System::Web::InterfaceCustomer").

Wenn Du ein neues Feature erstellen willst, musst Du wie folgt vorgehen:

Ein Modul unter Kernel/Modules/ (in Deinem Beispiel Contact.pm). Das muss folgende Methoden zur Verfügung stellen:

* new
* Run

In new wird das Objekt (das dann später in $Self landen wird) erzeugt. Die sieht typischerweise so (ähnlich) aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sub new {
my ( $Type, %Param ) = @_;

# allocate new hash for object
my $Self = {%Param};
bless( $Self, $Type );

# set debug
$Self->{Debug} = 0;

# check all needed objects
for my $Needed (qw(ParamObject DBObject LayoutObject ConfigObject LogObject)) {
if ( !$Self->{$Needed} ) {
$Self->{LayoutObject}->FatalError( Message => "Got no $Needed!" );
}
}

# hier evtl. weitere notwendige Objekte erzeugen

return $Self;
}


In der Run-Methode wird dann das Feature mit Funktionalität gefüllt.

Code: (dl )
1
2
3
4
5
6
7
sub Run {
my ( $Self, %Param ) = @_;

my $Output = $Self->{LayoutObject}->Output(
TemplateFile => 'Contact',
Data => \%Param,
);


Das Template muss ja in Kernel/Output/HTML/Standard liegen.

Am Ende brauchst Du noch eine Konfigurationsoption, damit das Feature auch abrufbar ist:

Kernel/Config/Files/Contact.xml:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<otrs_config version="1.0" init="Config">
<CVS>$Id: Contact.xml,v 1.55 2012/07/26 08:42:06 reb Exp $</CVS>
<ConfigItem Name="CustomerFrontend::Module###Contact" Required="0" Valid="1">
<Description Translatable="1">Frontend module registration for the customer interface.</Description>
<Group>Framework</Group>
<SubGroup>Frontend::Customer::ModuleRegistration</SubGroup>
<Setting>
<FrontendModuleReg>
<Description>Contacts</Description>
<NavBarName>Tickets</NavBarName>
<Title>Contacts</Title>
<NavBar>
<Description Translatable="1">Contacts</Description>
<Name Translatable="1">Contacts</Name>
<Block></Block>
<Type></Type>
<NavBar></NavBar>
<Link>Action=Contact</Link>
<LinkOption></LinkOption>
<AccessKey>l</AccessKey>
<Prio>126</Prio>
</NavBar>
</FrontendModuleReg>
</Setting>
</ConfigItem>
</otrs_config>


Mehr Infos für OTRS-Entwickler findest Du unter http://otrs.perl-services.de/workshop.html
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread Fehlermeldung: Global symbol "$Output" requires explicit package name