webForumDet fria alternativet

hjälp mej finputsa...

7 svar · 511 visningar · startad av Plutt

PluttMedlem sedan dec. 1999151 inlägg
#1

Hej!
Jag håller på att fixa en gästbok med nedanstående kod som jag hittat på internet. http://www.idg.se/iworld/webbskolan/skriptskolan/cgi.asp
Men jag undrar hur man ska göra för att kunna ända bakgrunden på sidan.
Jag vill inte ha den vit, utan jag vill kunna ändra det själv.
Sen undarar jag också hur jag bestämmer hur många meddelande som får visas.
Jag klarade inte klura ut det själv...

Om det finns någon som vet någon annan bra gästbok som man kan få tag på internet gratis. Får
ni gärna höra av er. Men det är viktigt att funktionen att man kan bestämma hur många
meddelande som ska visas finns!!!

Jag har ett bra hotell med cgi rättigheter.

#!/usr/bin/perl
use CGI ":standard";
$datafil = "/var/www/www.kristianstadshop.com/wwwroot/pellefant/meadows/klotterplanket/plank.txt";
print header, start_html("Kotterplanket"), h1("Klotterplanket");
if (param) { &skriv_inlagg; }
&rita_formular;
&visa_inlagg;
sub rita_formular {
print hr, start_form;
print p, "Namn: ", textfield("namn","", 40), br;
print " E-post: ", textfield("epost", "", 40), br;
print "Meddelande: ", textarea("meddelande", "", 4, 40, 1);
print br, p, submit("", "Skicka!"), "&nbsp", reset("Rensa!");
print end_form, hr;
}
sub skriv_inlagg {
$rad{namn} = param('namn');
$rad{epost} = param('epost');
$rad{meddelande} = param('meddelande');
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$rad{datum} = $date_time_now=sprintf("%04d-%02d-%02d %02d:%02d:%02d", 1900 + $year, ++$mon, $mday, $hour,$min, $sec);
$helaraden = $rad{datum};
foreach $faltnamn (qw(epost namn meddelande)) {
$rad{$faltnamn} =~ s/\r\n|\n/\\n/g;
$rad{$faltnamn} =~ s/\t/ /g;
$helaraden .= "\t" . $rad{$faltnamn}
}
return if $rad{meddelande} !~ /\w/;
open (DATAUT, ">> $datafil") | | die("Kan inte skriva till datafilen $datafil: $!\n");
print DATAUT "$helaraden\n";
close(DATAUT);
}
sub visa_inlagg{
open(DATAIN, "< $datafil") | | die("Kan inte öppna datafilen $datafil: $!\n");
while(<DATAIN> ) { @inlagg=<DATAIN>; }
close(DATAIN);
foreach $rad (reverse @inlagg) {
$rad =~ s/\\n/<BR>/g;
($datum, $epost, $namn, $meddelande) = split(/\t|\n/, $rad);
print qq#$datum, <A HREF="mailto:$epost">$namn</A><BR>$meddelande<center><IMG SRC=http://www.kristianstadshop.com/pellefant/meadows/meny/orange_pixel.gif BORDER=0 width=100% HEIGHT=1></center>#;
print br;
}
}

------------------
God Jul
Plutt

http://pellefant.just.nu

RobbanMedlem sedan dec. 19992 555 inlägg
#2

> Men jag undrar hur man ska göra för att kunna ända bakgrunden
> på sidan. Jag vill inte ha den vit, utan jag vill kunna ändra
> det själv.

Mmm, de har använt modulen CGI.pm för att generera sidan. En bra modul, men det gör att det inte är helt självklart vart man skall ändra i koden för att ändra i utskriften.

I det här fallet är det följande rad du skall ändra i (rad 4):

print header, start_html("Kotterplanket"), h1("Klotterplanket");

Eller mer specifikt, i start_html("Klotterplanket"). Byt ut ovanstående tad mot följande (har delat upp den på flera rader så att den skall bli lättare att läsa).

print header,
start_html(-title=>"Kotterplanket",
-bgcolor=>"#FFFFFF",
-text=>"#000000",
-link=>"#0000CC",
-alink=>"#CC0000",
-vlink=>"#660066"),
h1("Klotterplanket");

Och hur skall man nu kunna veta detta kanske du frågar dig. :)

Jo, man får helt enkelt läsa i dokumentationen för CGI.pm, där tillåtna attribut beskrivs.

> Sen undarar jag också hur jag bestämmer hur många meddelande som
> får visas.

Lite knepigare. Den funktionen finns inte inbyggd i detta script, så det får du lägga till själv i.s.f. Antar att du vill att bara t.ex. 10 inlägg visas per sida, och att länkar till fler gästbokssidor läggs till (t.ex. första sidan visar inlägg 1-10, andra visar 11-20, o.s.v.)? Eller vill du ha det så att bara typ de 20 senaste inläggen visas och att resten kastas bort helt?

Principen (om det är det första alternativet du vill ha) ligger i att ändra funktionen visa_inlägg så att du kan anropa den med det intervall av inlägg som skall visas (om du t.ex. anropar den med &visa_inlägg(1,10) så visar den inläggen 1-10). Sedan behöver du en funktion som tar fram länkarna till de övriga gästbokssidorna.

Kan bli en del kodande. Vill du ha en färdig gästbok med en sådan funktion (antingen för att studera hur de har gjort, eller för att använda i färdigt skick) hittar du flera på The CGI Resource Index.

Bestämmer du dig för att försöka koda funktionen själv (lär man sig ju mest på) är du naturligtvis välkommen att återkomma om du vill ha hjälp. :)

------------------
Robban < robban@lipogram.com >

PluttMedlem sedan dec. 1999151 inlägg
#3

Hej!
Ehh... om du kollar på denna sidan: http://www.idg.se/iworld/webbskolan/skriptskolan/cgi_gastbok.asp
Så står där faktiskt att man ska kunna ställa in hur många inlägg som ska visas.

---citerar----
Oberoende av om det kom något inlägg eller inte så ska vi visa ett inmatningsformulär samt alla gamla inlägg. Raderna 6 och 7 anropar var sin funktion för det. En brasklapp här är att alla inlägg kan bli ganska många. Jag lämnar det som en övning åt dig som läsare att begränsa antalet inlägg som visas. Ett tips är att bara visa ett bestämt antal inlägg, säg de 100 senaste.
-------

Men eftersom jag inte kan något alls om cgi, så klarar jag inte av det...

------------------
God Jul
Plutt

http://pellefant.just.nu

RobbanMedlem sedan dec. 19992 555 inlägg
#4

Jag lämnar det som en övning åt dig som läsare att begränsa antalet inlägg som visas.

Nja, antar att det med "övning" menas att du förväntas skapa den koden själv. Finns i.a.f. ingen funktion i scriptet, vad jag kan se, som begränsar hur många inlägg som visas. :)

Du skriver att du inte kan CGI / Perl. Är din avsikt med detta projekt att lära dig, eller vill du bara ha en fungerande gästbok? Vill du lära dig skriver du naturligtvis funktionen själv (men det kräver nog att du spenderar en del tid att läsa på lite innan). Vill du bara ha en fungerande gästbok föreslår jag att du väljer en annan.

------------------
Robban < robban@lipogram.com >

PluttMedlem sedan dec. 1999151 inlägg
#5

Hej!
Tack för det snabba svaret.
Nej, jag har ingen tanke på att försöka lära mig att programera perl. Jag lånade en gång en
bok på biblioteket men det var för avancerat. Så jag tänker tillsvidare nöja mej med att bara
skaffa mej en gästbok som funkar...
Iallafall så skulle jag vilja ändra font och raden ( hr ) till en bild istället,
<IMG SRC=http://www.kristianstadshop.com/pellefant/meadows/meny/orange_pixel.gif BORDER=0 width=100% HEIGHT=1>
. Jag antar att det är något man gör under raden
sub rita_forumlar {

Det skulle jag gärna lära mej. Att kunna ändra dom grejjerna själv. Så jag kan lägga in lite
html kod där...

Jag har gjort som så att den visar de 50 nyaste meddelandena. Sen försvinner de...

------------------
God Jul
Plutt

http://pellefant.just.nu

RobbanMedlem sedan dec. 19992 555 inlägg
#6

Japp, det är subrutinen rita_formular du skall ändra i. Så här ser den ut nu:

sub rita_formular {
  print hr, start_form;
  print p, "Namn: ", textfield("namn","", 40), br;
  print " E-post: ", textfield("epost", "", 40), br;
  print "Meddelande: ", textarea("meddelande", "", 4, 40, 1);
  print br, p, submit("", "Skicka!"), " ", reset("Rensa!");
  print end_form, hr;
}

Taggen <HR> skrivs ut två gånger, en gång i början och en gång i slutet. För att koden inte skall bli för rörig delar vi upp de rader där <HR> skrivs ut.

Ändra rad 2 (i subrutinen ovan):

  print hr, start_form;

Till:

  print hr;
  print start_form;

Ändra rad 7:

  print end_form, hr;

Till:

  print end_form;
  print hr;

(Det är exakt samma sak. Du kan antingen ha flera saker som skall skrivas ut efter varandra på samma rad separerade med kommatecken, eller dela upp dem på flera separata print-satser som vi gjorde nu.)

Nu har vi brutit ut det vi skall jobba med.

Ersätt de bägge:

  print hr;

Med en varsin:

  print img {src=>'http://www.kristianstadshop.com/pellefant/meadows/meny/orange_pixel.gif',
    border=>'0',
    width=>'100%',
    height=>'1'};

Att slänga in <FONT></FONT> är lite bökigare (beroende på att det består av en starttagg och en sluttag där innehållet skall in emellan) när man använder modulen CGI.pm som man gjort här. Vad vill du ändra på (typsnitt, storlek -- och på vad)?

------------------
Robban < robban@lipogram.com >

PluttMedlem sedan dec. 1999151 inlägg
#7

Hej!
Tack för alla svar! Det funkar jättebra ännsålänge!
Ehh... jo, jag vill att allt ska skrivas med Verdana, och att all text förutom överskriften
ska vara size=2 och vid formuläret ska texten, Namn, Epost & Meddelande vara fet stil...

Föresten, hur gör man för att dumpa datumen??? Skulle vilja se hur det ser ut utan...

En sak till, kan man lägga in style sheets i alla knapparna och ifyllningsrutorna. Isåfall
vill jag ha in detta
STYLE="background-color:#000000; color:#ff9900; font-family: verdana,Arial; font-size: 8pt; border-color:#ff9900"

Tack än en gång för svaren hitetills...

RobbanMedlem sedan dec. 19992 555 inlägg
#8

Mmm, scriptet är inte speciellt välskrivet från början, så skall du lägga in <FONT>-taggar måste det skrivas om en hel del.

Helt klart enklast är att använda ett externt stylesheet (CSS). Då ändrar du i raderna vi ändrade först så att de ser ut såhär:

print header,
  start_html(-title=>"Kotterplanket",
  -bgcolor=>"#FFFFFF",
  -text=>"#000000",
  -link=>"#0000CC",
  -alink=>"#CC0000",
  -vlink=>"#660066",
  -style=>{'src'=>'/style.css'}),
  h1("Klotterplanket");

Sedan skapar du ett stylesheet med namnet style.css och lägger det i katalogen du angett i sökvägen ovan (i mitt exempel ligger det i rooten). Kan t.ex. se ut så här:

body { font-family: Verdana, sans-serif;
       font-size: 16px }

h1    { font-size: 40px }

(Nu högg jag storlekarna ur luften - får du ändra så att det blir som du vill ha det)

Har inte testat detta stylesheet, men det borde kunna fungera även i NN4 (som annars är otroligt strulig när det gäller CSS).

För att resten av ändringarna skall gå att genomföra krävs det återigen en del ändringar i Perl-scriptet (det är ö.h.t. inte skrivet med tanke på att man skall kunna ändra egenskaper på texten). Har tyvärr inte mer tid att lägga ner på detta script (rekommenderar som sagt ett annat script om du bara är ute efter gästboken).

Det står i dokumentationen till CGI.pm (länken finns i ett tidigare inlägg) hur du gör. Är dock inte speciellt lyckat att börja med CGI.pm som nybörjare -- hade varit bättre om de skrivit ut HTML-koden direkt i scriptet i stället då det är lättare att arbeta med om man vill ändra någonting. Det här scriptet är alltså inget bra nybörjarscript ö.h.t. (om du frågar mig).

------------------
Robban < robban@lipogram.com >

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)