Avatar billede ClubAcedDK Nybegynder
10. februar 2011 - 15:45 Der er 2 kommentarer og
1 løsning

Find og erstat dele af URL'er på bestemte datoer

Hejsa

Er det muligt at erstatte en del af en url (som optræder flere
steder på en side) med noget andet, på bestemte datoer?

ILLUSTRATION:
<html>
<head>
<script type="text/javascript">
function chrisWeeklyEveningSubmit() {
myform = document.chrisEveningForm;
myform.target = "chrisStatsWeekly";
myform.action =
"period/2011/02.02.2011-01.03.2011/09.02.2011-15.02.2011/chris/ch
risStats.php";
myform.submit();
return false;}
function chrisMonthlyEveningSubmit() {
myform = document.chrisEveningForm;
myform.target = "chrisStatsMonthly";
myform.action = "period/2011/02.02.2011-01.03.2011/chris/chrisStats.php";
myform.submit();
return false;}
</script>
</head>
<body>
<form name="chrisEveningForm"
action="period/2011/02.02.2011-01.03.2011/09.02.2011-15.02.2011/chris/chrisStats.php" method="post">
<input type="text" name="chrisWeeklyScore">
<input type="button" value="Gem"
onClick="chrisWeeklyEveningSubmit();
chrisMonthlyEveningSubmit();"></form>

<iframe name="chrisStatsWeekly"
src="period/2011/02.02.2011-01.03.2011/09.02.2011-15.02.2011/chris/chrisStats.php"></iframe>

<iframe name="chrisStatsMonthly"
src="period/2011/02.02.2011-01.03.2011/chris/chrisStats.php"></iframe>
</body>
</html>

Som det ses gør jeg brug af et script der tillader mig at sende
data fra én <form> til to <iframe> target.

Hver onsdag skal en del af url'erne som behandler uge-dataen
udskiftes. Delene der skal erstattes giver næsten sig selv,
nemlig ugeperiode-delen ("09.02.2011-15.02.2011"). I dette
tilfælde skulle erstatningen blive "16.02.2011-22.02.2011".
Én gang om måneden skal det samme ligeledes ske - denne gang bare
på alle for url'erne på hele siden. Det der skal ændres da, er
månedsperiode-delen ("02.02.2011-01.03.2011"), hvilket i dette
tilfælde skulle blive "02.03.2011-29.03.2011".

Hagen ved dette er selvfølgelig at også url'erne, som befinder
sig ovenstående javascript, også skal erstattes på samme måde.

Umiddelbart havde jeg forestillet mig noget i retning af, at man
finde dags dato, og laver en array() hvori man har ståedende de
fremtidige datoer på hvornår erstatningerne skal ske, med
tilhørende string som indeholder det som der skal erstattes med.
Dernæst skal alle de eksisterende url'er på hele siden findes, og
have udspecificeret hvad i url'erne der præcist skal erstattes og
hvad der skal erstattes med.
Afslutningesvis tænker jeg, at men så sammenligner dags dato med
datoerne i array'en. Hvis datoerne stemmer overens, skal
erstatningen foretages. Ellers skal der ikke erstattes noget.

Jeg ved overhovedet ikke om noget af alt det her kan lade sig
gøre. Jeg ved i hvert fald ikke hvordan et sådan script ville se
ud. Jeg håber derfor at der er nogen, klogere end jeg, som har en idé om hvordan scriptet kunne se ud.

På forhånd tak.

/Ace
Avatar billede ioosinternetaps Nybegynder
10. februar 2011 - 16:19 #1
PHP har nogle stærke date/time funktioner. Du vil i hvert fald kunne finde en løsning her:
http://dk2.php.net/manual/en/ref.datetime.php

Nu kender jeg ikke det fulde perspektiv i opgaven, og tør derfor ikke gå nærmere med en konkret løsning. Men det virker enkelt: Er vi på et tidspunkt hvor der skal skiftes URL'er? Ja skift efter opstillede regler, nej ingen ting.
Avatar billede ClubAcedDK Nybegynder
11. februar 2011 - 19:43 #2
ioosinternetaps skrev:
"Men det virker enkelt: Er vi på et tidspunkt hvor der skal skiftes URL'er? Ja skift efter opstillede regler, nej ingen ting."

Præcis :)

Jeg har fået lidt hjælp til følgende script, men jeg kan stadig ikke få det til at virke... Er der nogen der kan se hvad fejlen er?

<?php
date_default_timezone_set( 'Europe/Copenhagen');
$today = getdate(); // $today[ 'wday'] = ugedag: onsdag = 3
$d_corr = ( $today[ 'wday'] < 3) ? ( $today[ 'wday']+4) : ( $today[ 'wday']-3);
// correktioner for ugedag - hvis før onsdag dagnummer+4, hvis onsdag eller efter dagnummer-3
$first_day = mkdate( 0, 0, 0, $today[ 'mon'], $today[ 'mday'] - $d_corr, $today[ 'year']); // ugestart
$last_day = mkdate( 0, 0, 0, $today[ 'mon'], $today[ 'mday'] - $d_corr + 7, $today[ 'year']); // ugeslut
$wk_path = date( 'd.m.Y', $first_day).'-'.date( 'd.m.Y', $last_day);

$st_dt = getdate( $first_day);
$first_mnd = FirstOns( $st_dt[ 'mon'], $st_dt[ 'year']);
$last_mnd = FirstOns( $st_dt[ 'mon']+1, $st_dt[ 'year']);
$mnd_path = date( 'd.m.Y', $first_mnd).'-'.date( 'd.m.Y', $last_mnd);

function FirstOns( $md, $yr) { // finder første onsdag i måneden
$month = getdate( mkdate( 0, 0, 0, $md, 1, $yr)); // første dag i aktuel måned
$f_onsdag = ( $month[ 'wday'] <= 3) ? 4-$month[ 'wday'] : 11-$month[ 'wday'];
return mkdate( 0, 0, 0, $md, $f_onsdag, $yr);
}
$data = 'weekPeriod.txt';
$weekPeriod = '$wk_path';
$comfile = fopen ($data, 'w');
fwrite ($comfile, $weekPeriod);
fclose ($comfile);

$data = 'monthPeriod.txt';
$monthPeriod = '$mnd_path';
$comfile = fopen ($data, 'w');
fwrite ($comfile, $monthPeriod);
fclose ($comfile);
?>

Den sidste del med at sende ugeperioden og månedsperioden til to forskellige txt-filer, er mig selv der har forsøgt mig frem. Jeg ved dog godt at man ikke kan dét som jeg prøver på, men jeg kan ikke huske hvordan det er, at man skal bære sig ad med (i dette tilfælde) at sende henholdsvis $wk_path og $mnd_path til to forskellige txt-filer i ét php-script.

Håber der er nogen med større kendskab til PHP end jeg, som kan gennemskue hvad der skal for at det samlede script fungerer.

/Ace
Avatar billede ClubAcedDK Nybegynder
16. februar 2011 - 18:38 #3
Lukker den...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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