Avatar billede moebiuz Nybegynder
01. maj 2003 - 15:55 Der er 7 kommentarer og
1 løsning

hjælp til templates i cgi

Hej,
Har tidligere spurgt om det var muligt at bruge ssi i cgi, og fik den gang det svar at det var det vist nok, men ikke nogen nærmere forklaring.
Mit prblem et alstå at jeg i templatesen gerne ville kunne inkludere menu.shtml, top.shtml osv, samt få den til at skrive dags dato, og endelig lave et link der går tilbage til den forrige side, ligegylig hvilken det er.
Er der nogen der kan hjælpe mig med hvad jeg skal skrive?
Avatar billede clausjul Nybegynder
01. maj 2003 - 17:04 #1
Det er muligt at bruge ssi i CGI - men så skal du køre dette modul ved parsning af templaten (du skal have LWP::UserAgent installeret):

sub getHTTP {

use LWP::UserAgent;
my ($URL) = @_;

my $flag;

# Opret en ny user agent objekt
my $ua = new LWP::UserAgent;
$ua->agent("AgentName/0.1 " . $ua->agent);

# Opret en forspørgsel til serveren
my $req = new HTTP::Request GET => $URL;
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');

# Forspørg og få svar
my $res = $ua->request($req);
my $retval = $res->content;

if (!$retval) {
$flag = 0;
} else {
$flag = 1;
}
return $retval,$flag;
}

Så kalder du den via
$template =~ s/<\!--\#include\ virtual=\"(.*?)\"\ -->/getHTTP($1
)/esg;
Avatar billede moebiuz Nybegynder
01. maj 2003 - 17:15 #2
Der må jeg vist bede om en forklaring.
hvor siger du at jeg skal sætte alt det ind henne?
Avatar billede nsmnsm Nybegynder
03. juni 2003 - 13:00 #3
Hej moebiuz.

Jeg tror dausjul mener, at du skal indsætte denne kode i det cgi-script, som
du laver og som skal hente (includerer dine shtml sider).

Jeg har dog en ide som du måske kan bruge, og som ikke gør brug af yderligere moduler men som dog heller ikke er 100% ren i forhold til brug af shtml docs.

Men hvis du umiddelbart KUN bruger shtml siderne som includeringsfiler i cgi-scripts - kunne du jo vælge at gemme dem som *.pl filer

din html kode gemmer du i en variabel altså
din *.pl kode kommer til at se sådan ud : $template_info = 'htmlkode';
(htmlkode er den html kode, som er i dine shtml filer)

i dit script indsætter du så :
require *.pl'; @write_template[0] = $template_info;
og voila - så har du din html info som du kan bruge direkte i dit cgi-script.
Bare en anden måde at gøre ting på :).
Avatar billede mahler Nybegynder
21. juli 2003 - 18:44 #4
Hvis du har mulighed for selv at installere moduler, så kan jeg varmt anbefale at benytte HTML::Template-modulet (se CPAN).

Modulet er et simpelt, nemt og effektivt template-modul, hvor du i dine templates får nogle få "styrrings tags" til din rådighed - tmpl_var, tmpl_loop, tmpl_if m.fl. - der kan lave simpel data indsættelse, betingelser og løkker.

I dit konkrete tilfælde, vil du blandt andet også kunne benytte "<tmpl_include menu.shtml>" til at inkludere klumper, der skal være de samme overalt.

Jeg bruger specielt modulet til at "rense" mine scripts, så al html-koden ligger for sig selv og ikke forstyrer blandt Perl-koden.
Avatar billede moebiuz Nybegynder
21. juli 2003 - 19:45 #5
Mahler mm.
jeg må desværre blankt erkende at jeg ikke forstår særligt meget af det i siger.
Problemet er jo sådan at jeg har fået fingre i det er script, som hedder newspro, der er en fin vejledning i hvordan man bruger det osv. men udover hvor dan man sætter det op til at køre, samt udfylder templatsen, kender jeg ikke en disse til cgi.
For ligesom at illustrere mit har jeg lagt en side ud der gerne skulle vise problemet. www.dronninglundcup.dk/dif/Skabelon.shtml

når man trykker på et af linksne i boksen "seneste nyheder", vil jeg gerne have at den side der kommer frem ser ud som den foregående, med hensyn til toppen, og menuen i venstre side.
Jeg har desuden lagt www.dronninglundcup.dk/dif/viewnews.tmpl  ud så I kan se hvordan den ser ud. Håber I kan hjælpe mig.
Moebiuz
Avatar billede nsmnsm Nybegynder
22. juli 2003 - 02:01 #6
Moebiuz. Normal fungerer det omvendt - dvs. du inkluderer cgi i en shtml side.
Dvs du har små scripts, som udretter/udregner nogle ting og de bliver så inkluderet i din shtml side. Denne måde er nem og effektiv.

Denne måde fungerer sådan, at du har dine shtml sider hvor du så indsætter nogle kald, som så inkluderer dit script (resultatet af scriptkørsel) i shtml siden. (http://www.bignosebird.com/sdocs/include.shtml)

Du vil det omvendt (hvis jeg forstår dig ret). Dvs. du har nogle shtml sider som du vil inkluderer i dine scripts. - Dette kan umiddelbart kun gøres enten ved at bruge et modul, som mahler nævner - eller lave finten med, at lade sine shtml dokumenter være variabler i en pl fil, som du så kan include i dit script.
Avatar billede moebiuz Nybegynder
22. juli 2003 - 16:15 #7
nsmnsm
Har jo sådan set allerede inkluderet noget af scriptet i min side, nemlig indholdet af boksen "seneste nyheder". men når man trykker på på et af linksne kommer man til en ny side genereret af scriptet. hvordan får jeg denne side inkluderet i en hjemmeside? Vil jo bare geren have at siden ser ens ud ligegyldig hvilken side man er på.

Moebiuz
Avatar billede moebiuz Nybegynder
02. januar 2004 - 14:38 #8
hey - lukker for spørgsmålet, da det ikkelængere er aktuelt, men tak for jeres inputs.
Moebiuz
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester