Schrift
[thread]5961[/thread]

Probs beim erstellen eines Modules

Leser: 3


<< >> 8 Einträge, 1 Seite
pktm
 2003-12-10 16:19
#75367 #75367
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!
Habe ein Modul welches ich wie folgt benutze:
Code: (dl )
1
2
3
4
5
6
# ---- eigene Module
unshift @INC, 'c:/apache/cgi-bin/cms';
require sitemanager1_31;
# ---- TEMPLATE
my $site = new sitemanager1_31();
print $site->vnav_sniplet("key", "titel");

Das Modul - ganz frisch - sieht so aus:
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
28
package sitemanager1_31;

use strict;

my $grafik = 'http://127.0.0.1/grafiken';
# --------------------------------------------------------
# NAVIGATION - Sniplets
# --------------------------------------------------------
sub vnav_sniplet {
   my $self = shift;
   my $key = shift;
   my $titel = shift;
   my $return = '
<tr>
<td class="nav"><img src="$grafik/greysmallbullet.gif" width="5" height="5" border="0" alt="*"/>
& <a href="&{full_url}?action=$key">$titel</a></td>
</tr>
   ';
   return $return;
} #vnav_sniplet

# --------------------------------------------------------
# KONSTRUKTOR
# --------------------------------------------------------
sub new {
   return "sitemanager";
} #new
return 1;


Es soll einfach dazu dienen HTML aus meinem Code rauszuhalten.
[Ich weis, das kann man auch anders regeln, steht hier aber nicht zur Diskusion.]
Jedenfalls bekomme ich wieder diesen Fehler hier:
Can't locate object method "vnav_sniplet" via package "sitemanager" (perhaps you forgot to load "sitemanager"?) at c:\apache\cgi-bin\cms\CMSADM~3.CGI line 472.

Die Zeile entspricht dem obigen Aufruf.
Ich weis, das hängt mit dem Konstruktor zusammen.
Letztes mal habe ich vergessen das $self-Objekt zu segnen :)
Nur diesmal habe ich keine Methoden oder sonstige Werte im Objekt, es soll einfach nur dazu dienen das Modul einzubinden damit ich auf das ausgelagerte HTML zugreifen kann.
Wie bekomme ich denn nun den Fehler weg?
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
havi
 2003-12-10 16:22
#75368 #75368
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Frage: Wie erstelle ich vernuenftig ein Modul ?
Antwort: http://havranek.at/gernot/perl/Perl_ModulErstellen.html

Gruss
pktm
 2003-12-10 16:28
#75369 #75369
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ok, ich habe alle Einstellungen übernommen und trotzdem ist der Fehler noch da.
Wie mache ich denn nun einen vernünftigen Konstruktor?
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
havi
 2003-12-10 16:32
#75370 #75370
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Noch ein link: http://www.google.at/search?....spell=1

Schau dir mal den (glaub ich) dritten Treffer von google an!

Gruss\n\n

<!--EDIT|havi|1071066789-->
renee
 2003-12-10 16:36
#75371 #75371
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
mach mal in deinem new
Code: (dl )
1
2
3
sub new{
bless($self,$class);
}
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/
pktm
 2003-12-10 17:32
#75372 #75372
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
sub new {
return "sitemanager1_31";
}
Habe jetzt den Paketnamen als Rückgabewert genommen, funktioniert.
Aber ich glaube ich nehme lieber die Methode aus der Googlesuche.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2003-12-10 18:21
#75373 #75373
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=renee,10.12.2003, 15:36]mach mal in deinem new
Code: (dl )
1
2
3
sub new{
 bless($self,$class);
}
[/quote]
besser $self und $class zuerst erzeugen/uebernehmen, sonst funktioniert's nicht:
Code: (dl )
1
2
3
4
5
sub new {
 my $class = shift;
 my $self = {}; # oder was auch immer
 bless ($self, $class);
}


@havi: Anmerkungen zum Modulbauen:

1. ein eigenes Modul, das man installieren will, am besten mit
Code: (dl )
1
2
3
4
perl Makefile.PL PREFIX=/eigenes/Modul/Verzeichnis
make
make test
make install

in ein eigenes Verzeichnis installieren, weil sonst die Gefahr besteht, dass man es aus dem Perl-Verzeichnis nicht mehr sauber herausbekommt und so eventuelle Ueberbleibsel ein Problem darstellen koennten. Das eigene Verzeichnis loescht man einfach.

2. Wenn das Modul von irgendwelchen Nicht-Standardmodulen abhaengig ist, muss man in der Makefile.PL angeben, welche Module da bei Bedarf installiert werden muessen. Dies geschieht in der Zeile, wo PREREQ_PM steht, z.B.
Code: (dl )
1
2
3
4
  'PREREQ_PM' => {    Modulname1 => 0.01,
   Modulname2 => 1.2,
   Modulname3 => 0.41
 },


3. Das Testen taugt so nicht wirklich was, ist naemlich nur, ob das Modul korrekt geladen werden konnte.
Wenn das Modul alle Funktionalität hat (bzw. besser noch waehrend oder vor der Entwicklung), sollte man noch einen oder mehrere Tests dafür in der Datei t/1.t angeben. Für weitere Tests erstellt man einfach weitere Dateien wie 2.t, 3.t, ... Beim Testen sollte man auch darauf achten, daß möglichst alles getestet wird, daß auch Fehlverhalten getestet wird, und auch auf das Betriebssystem geachtet wird (es macht z.B. wenig Sinn, wenn die Tests eines Modul, das verschiedene Windows-Erweiterungen benützt und somit nur unter Windows laufen kann, unter Linux fehlerfrei laufen, wenn das Modul gar nicht laufen kann). Hilfreiche Module für Tests sind: Test::Harness, Test::Simple, Test::More.

4. Hilfreich waere wohl auch noch ein Link, von wo man nmake downloaden kann: ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe\n\n

<!--EDIT|Strat|1071073598-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2003-12-10 20:41
#75374 #75374
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
oder gleich perldoc perlnewmod lesen und mit h2xs anfangen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 8 Einträge, 1 Seite



View all threads created 2003-12-10 16:19.