Avatar billede cortx Nybegynder
05. november 2006 - 18:01 Der er 30 kommentarer og
1 løsning

Fedt kalender-system

Hej alle sammen!

Jeg søger et kalender-script som ligner det der findes her:
www.zaittam.dk (i højre side). Vælg evt. September..
Således at når man trykker på en dag med et event, kan eventet ses på midten af sitet. Men til selve "tilføj event" delen, vil jeg godt have at der er WYSIWYG så der kan ændres skriftstørrelse etc.

Samtidigt skal det være nemt at bygge ind i et privat design. Håber i kan hjælpe mig :)

På forhånd tak..
Avatar billede gf Nybegynder
05. november 2006 - 19:04 #1
hej jeg fandt engang dette her på Eksperten.

mvh gf


<?php
/* Kalenderscriptet*/
/* Tjekker året er sat i adresselinien, ellers bliver det i år */
$aar = (empty($_GET['y'])) ? date(Y) : $_GET['y'];
/* Tjekker måneden er sat i adresselinien, ellers bliver den sat til aktuel måned */
$maaned = (empty($_GET['m'])) ? date('m') : $_GET['m'];
/* Array med ugedage */
$uger = array('Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør', 'Søn');
/* Den aktuelle dato i unix epoch (antal sekunder siden 1. jan 1970) */
$dato = mktime(0,0,0,$maaned, 1, $aar);
/* Antal dage i måneden */
$antalDageMaaned = date('t', $dato);
/* Første ugedag (hvis det er søndag (0) sættes den til 7) */
$foersteUgedag = (date('w', $dato) == 0) ? 7 : date('w', $dato);
/* Udskriver måned og år */
print ('<h2>'.date('F', $dato).' - '.$aar.'</h2>');
/* Udskriver forrige/næste knap */
printf('<a href="'.$_SERVER['PHP_SELF'].'?m=%s&y=%s">Forrige</a> - <a href="'.$_SERVER['PHP_SELF'].'?m=%s&y=%s">Næste</a>', date('m', strtotime("-1 month", $dato)), date('Y', strtotime("-1 month", $dato)), date('m', strtotime("+1 month", $dato)), date('Y', strtotime("+1 month", $dato))); 
/* Tabellen starter */
print ('<table border="1"><tr>');
/* En række med ugedage udskrives */
for ($i = 1; $i < count($uger); $i++) {
  print ('<td>'.$uger[$i].'</td>');
}
print ('</tr>');
/* Løkken kører så længe der er dage tilbage i måneden */
for ($dag = 1; $dag <= $antalDageMaaned; $dag++) {
  print ('<tr>');
  /* Ugedage-løkken køres igennem */
  for ($u = 1; $u <= 7; $u++) {
 
    /* Udskriver tomme pladser hvis måneden ikke starter med en mandag */
    if ($u < $foersteUgedag && $foersteUgedag+$dag <= 8) {
    print ('<td></td>');
    } else {
      /* Datoen udskrives, hvis den er inde for måneden, ellers kommer der bare en tom celle url links overfoeres*/
      print ( ($dag <= $antalDageMaaned)
              ? "<td><a href='test.php?aar=$aar&maaned=$maaned&dato=$dag'>$dag</a></td>"
              : '<td></td>' );
      /* Hvis ugedagen ikke er søndag ligges der en til. (ellers tæller den to om søndagen) */
      if ($u != 7) $dag++;
    }
  }
  print ('</tr>');
}
print ('</table>');
?>
Avatar billede coderdk Praktikant
05. november 2006 - 21:45 #2
http://php.coder.dk/smallcal.php er ok nem at tilrette :)
Avatar billede cortx Nybegynder
06. november 2006 - 08:20 #3
>>gf ..
jeg kigger på dit forslag i morgen. Har ikke tid før :)

>> coderdk ..
Ser fedt ud, men mangler årstallet?

... Hvordan får jeg den til at "hente" datoer fra en mysql tabel? ;)
Avatar billede coderdk Praktikant
06. november 2006 - 09:23 #4
År er med, og se kommentaren i loopet, mht mysql

<?php

    setlocale( LC_TIME, 'da', 'dan', 'danish', 'da_DK', 'da_DK.ISO8859-1' );

    $today = time();
    if ( !empty( $_GET['m'] ) && !empty( $_GET['y'] ) && is_numeric( $_GET['m'] ) && is_numeric( $_GET['y'] ) )
    {
        $today = mktime( 0, 0, 0, $_GET['m'], 1, $_GET['y'] );
    }
    $mname = ucfirst( strftime( '%B', $today ) );
    $thism = date( 'm', $today );
    $thisy = date( 'Y', $today );
    $startd = mktime( 0, 0, 0, $thism, 1, $thisy );
    $endd = mktime( 23, 59, 59, $thism + 1, 0, $thisy );
    $nodays = date( 'd', $endd );
    $startwd = strftime( '%u', $startd );
    $endwd = strftime( '%u', $endd );
    $startpad = ( $startwd == 1 ? 0 : $startwd - 1 );
    $endpad = ( $endwd == 7 ? 0 : 7 - $endwd );

?><table>
    <tr>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '-1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '-1 month', $today ) ) ?>">&laquo;</a></td>
        <td align="center" colspan="6">
            <?= $mname . ', ' . $thisy ?>
        </td>
        <td align="right"><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '+1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '+1 month', $today ) ) ?>">&raquo;</a></td>
    </tr>
    <tr>
        <td>U#</td>
        <td>Ma</td>
        <td>Ti</td>
        <td>On</td>
        <td>To</td>
        <td>Fr</td>
        <td>Lø</td>
        <td>Sø</td>
    </tr>
<?php

    echo "<tr>";

    $n = 0;
    $startDate = mktime(0, 0, 0, $thism, 1, $thisy );
    echo strftime( "<td>%V</td>", $startDate );
    if ( $startpad > 0 )
    {
        for ( $i = 0; $i < $startpad; $i++ )
        {
            echo "<td>&nbsp;</td>";
            $n++;
        }
    }
   
    for ( $dag = 1; $dag <= date( 't', $startDate ); $dag++ )
    {
        $n %= 7;
        if ( $n == 0 )
        {
            echo "</tr>\n<tr>";
            echo strftime( "<td>%V</td>", mktime(0, 0, 0, $thism, $dag, $thisy ) );
        }
        $n++;

        echo "<td>";
        $mysqldate = date("Y-m-d", mktime(0,0,0,$thism,$dag,$thisy) );
        // mysqldate indeholder f.eks. 2006-11-06
        // Her kan du hente datoer ud. Alternativt kan du FØR loopet hente alle
        // events ud for hele den aktuelle måned og checke op mod et array
        echo date("d",mktime(0,0,0,$thism,$dag,$thisy));
        echo "</td>";
    }

    if ( $endpad > 0 )
    {
        for ( $i = 1; $i < $endpad; $i++ )
        {
            echo "<td>&nbsp;</td>";
        }
    }

    echo "</tr>\n";

?>
</table>
Avatar billede cortx Nybegynder
06. november 2006 - 09:28 #5
Jamen det er netop pga af, at jeg ikke selv kan finde ud af at smide mysql dataer ind, så en dato med event bliver til et link. :(

Hvis nu jeg har eventdate, eventname, eventtext, eventcategory. og "dit" script skal gøre så en dag med event laver link. (altså hvis fx dato 2006-11-06 findes i mysql tabellen, skal den vises med <a><b></b></a> rundt om datoen i kalenderen.
Avatar billede coderdk Praktikant
06. november 2006 - 09:46 #6
http://dk.php.net/mysql_connect
http://dk.php.net/mysql_query
http://dk.php.net/mysql_num_rows
http://dk.php.net/mysql_fetch_assoc

Er dem man plejer at bruge til at hive mysql data ud

SQL tutorial: http://www.w3schools.com/sql/default.asp

Altså i toppen af scriptet smid:

mysql_connect( "localhost", "brugernavn", "password" );
mysql_select_db( "databasenavn" );

I loopet kan du skrive, efter jeg sætter $mysqldate skrive:

$sql = "SELECT 1 FROM tabelnavn WHERE eventdate = '$mysqldate' LIMIT 1";
$qh = mysql_query( $sql ) or die( mysql_error() );
if ( mysql_num_rows( $qh ) > 0 )
{
  echo '<a style="background-color: #660" href="event_view.php?day=' . $mysqldate . '">
  echo date("d",mktime(0,0,0,$thism,$dag,$thisy));
  echo '</a>';
}
else
{
  echo date("d",mktime(0,0,0,$thism,$dag,$thisy));
}

og så slette den næste:

  echo date("d",mktime(0,0,0,$thism,$dag,$thisy));

Så skal du bare lave en event_view.php som hiver alle events ud for den pågældende dag.
Avatar billede coderdk Praktikant
06. november 2006 - 09:47 #7
Hvis du stadig er på bar bund har du skrevet dit spørgsmål i den forkerte kategori. Denne kategori er hvis du har brug for hjælp til noget med PHP. Hvis du har brug for nogen til at lave noget for dig, skal du poste det her: http://www.eksperten.dk/spm/Opgaver/Programmeringsopgaver/PHP/
Avatar billede cortx Nybegynder
06. november 2006 - 22:29 #8
coderdk >>

jeg forstår det godt, nogenlunde, men når jeg indsætter det du har skrevet, ind - melder den fejl "Parse error: parse error, expecting `','' or `';'' in c:\apache\htdocs\06_loove\index.php on line 83"

Linjen ser således ud, og jeg kan ikk umiddelbart finde fejlen :)

          echo date("d",mktime(0,0,0,$thism,$dag,$thisy));
Avatar billede cortx Nybegynder
06. november 2006 - 22:31 #9
Der manglede en ; i forrige linje :)

Det virker bare som det skal og jeg siger 10000 tak ;)
Avatar billede coderdk Praktikant
06. november 2006 - 22:32 #10
Det er linjen før:

echo '<a style="background-color: #660" href="event_view.php?day=' . $mysqldate . '">

skal være:

echo '<a style="background-color: #660" href="event_view.php?day=' . $mysqldate . '">';
Avatar billede cortx Nybegynder
06. november 2006 - 22:34 #11
Eller, var nok lidt for hurtig på aftrækkeren :O Sorry for det!

følgende fejl er stadig:
"Warning: Wrong parameter count for setlocale() in c:\apache\htdocs\06_loove\index.php on line 9"
- og så viser den ikke uge-numrene.. :)

Scriptet ser nu sådan ud:

<?php

$connection = mysql_connect("localhost","root","");
mysql_select_db("rr", $connection);

    setlocale( LC_TIME, 'da', 'dan', 'danish', 'da_DK', 'da_DK.ISO8859-1' );

    $today = time();
    if ( !empty( $_GET['m'] ) && !empty( $_GET['y'] ) && is_numeric( $_GET['m'] ) && is_numeric( $_GET['y'] ) )
    {
        $today = mktime( 0, 0, 0, $_GET['m'], 1, $_GET['y'] );
    }
    $mname = ucfirst( strftime( '%B', $today ) );
    $thism = date( 'm', $today );
    $thisy = date( 'Y', $today );
    $startd = mktime( 0, 0, 0, $thism, 1, $thisy );
    $endd = mktime( 23, 59, 59, $thism + 1, 0, $thisy );
    $nodays = date( 'd', $endd );
    $startwd = strftime( '%u', $startd );
    $endwd = strftime( '%u', $endd );
    $startpad = ( $startwd == 1 ? 0 : $startwd - 1 );
    $endpad = ( $endwd == 7 ? 0 : 7 - $endwd );

?><table>
    <tr>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '-1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '-1 month', $today ) ) ?>">&laquo;</a></td>
        <td align="center" colspan="6">
            <?= $mname . ', ' . $thisy ?>
        </td>
        <td align="right"><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '+1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '+1 month', $today ) ) ?>">&raquo;</a></td>
    </tr>
    <tr>
        <td>U#</td>
        <td>Ma</td>
        <td>Ti</td>
        <td>On</td>
        <td>To</td>
        <td>Fr</td>
        <td>Lø</td>
        <td>Sø</td>
    </tr>
<?php

    echo "<tr>";

    $n = 0;
    $startDate = mktime(0, 0, 0, $thism, 1, $thisy );
    echo strftime( "<td>%V</td>", $startDate );
    if ( $startpad > 0 )
    {
        for ( $i = 0; $i < $startpad; $i++ )
        {
            echo "<td>&nbsp;</td>";
            $n++;
        }
    }
   
    for ( $dag = 1; $dag <= date( 't', $startDate ); $dag++ )
    {
        $n %= 7;
        if ( $n == 0 )
        {
            echo "</tr>\n<tr>";
            echo strftime( "<td>%V</td>", mktime(0, 0, 0, $thism, $dag, $thisy ) );
        }
        $n++;

        echo "<td>";
        $mysqldate = date("Y-m-d", mktime(0,0,0,$thism,$dag,$thisy) );
        // mysqldate indeholder f.eks. 2006-11-06
        // Her kan du hente datoer ud. Alternativt kan du FØR loopet hente alle
        // events ud for hele den aktuelle måned og checke op mod et array
       
        //start
        $sql = "SELECT 1 FROM rr_calendar WHERE date = '$mysqldate' LIMIT 1";
        $qh = mysql_query( $sql ) or die( mysql_error() );
        if ( mysql_num_rows( $qh ) > 0 )
        {
          echo '<a style="background-color: #660" href="event_view.php?day=' . $mysqldate . '">';
          echo date("d",mktime(0,0,0,$thism,$dag,$thisy));
          echo '</a>';
        }
        else
        {
          echo date("d",mktime(0,0,0,$thism,$dag,$thisy));
        }
        //slut
       
        echo "</td>";
    }

    if ( $endpad > 0 )
    {
        for ( $i = 1; $i < $endpad; $i++ )
        {
            echo "<td>&nbsp;</td>";
        }
    }

    echo "</tr>\n";

?>
</table>
Avatar billede coderdk Praktikant
06. november 2006 - 22:48 #12
Prøv at udskifte:

setlocale( LC_TIME, 'da', 'dan', 'danish', 'da_DK', 'da_DK.ISO8859-1' );

med:

setlocale( LC_TIME, 'da' );

Og ellers prøv at udskifte 'da' med nogle af de andre, indtil det virker...
Avatar billede cortx Nybegynder
07. november 2006 - 07:27 #13
Det fjerner godt nok den fejl den udskrev, uanset hvilken defination af dansk jeg vælger, men den viser stadig ike ugedagene :)
Avatar billede coderdk Praktikant
07. november 2006 - 09:51 #14
Prøv:

setlocale( LC_ALL, "dan_dan" );
setlocale( LC_ALL, "dan_dnk" );
setlocale( LC_ALL, "dnk" );
setlocale( LC_ALL, "dnk_dnk" );

En af dem skal sgu virke ;)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_language_strings.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_CRT_Country_Strings.asp
Avatar billede coderdk Praktikant
07. november 2006 - 09:53 #15
Det var til windows... Hvis du kører linux/unix så kan det være at der MANGLER locales på din server...

Desuden er din PHP for gammel, du har en version før 4.3.0 (derfor du ikke kan sætte flere locale strings)...
Avatar billede cortx Nybegynder
07. november 2006 - 12:18 #16
Okay jeg prøver når jeg kommer hjem, men for at det ikke skal være løgn, opdagede jeg også lige, at den ikke viser sig efter hvilken dag måneden starter på? :)
Avatar billede coderdk Praktikant
07. november 2006 - 13:07 #17
Hvad mener du?
Avatar billede inctor Nybegynder
07. november 2006 - 14:56 #18
Hvorn ser database strukturen ud for den der ?

rr_calendar
-id
-date


Andet ? eller ?
Avatar billede cortx Nybegynder
07. november 2006 - 15:05 #19
CREATE TABLE rr_calendar (
  id int(12) NOT NULL auto_increment,
  name longtext NOT NULL,
  date longtext NOT NULL,
  text longtext NOT NULL,
  category longtext NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Men er det ikke irrelevant? :)

coderdk >>
Jamen den starter ALLE måneder med 1. på mandag :) Den fjerner fejlen uanset hvilken setlocal jeg bruger, men den har stadig fejlen med ugenummer og at den starter alle måneder med den 1. som en mandag. :) Og nogle måneder starter jo med tirsdag eller fredag etc.
Avatar billede inctor Nybegynder
07. november 2006 - 15:09 #20
Hmm .. Den viser ikke noget ? Har lavet en post med date som 07, men den viser ikk noget på den dag i scriptet ?
Avatar billede coderdk Praktikant
07. november 2006 - 15:10 #21
Eeerh, det lyder underligt. Som du kan se virker den da: http://php.coder.dk/smallcal.php

Eksperiment! Hvad siger:

echo strftime( "%u", mktime( 0, 0, 0, 11, 1, 2006 ) );

Den skulle gerne skrive 3
Avatar billede cortx Nybegynder
07. november 2006 - 15:11 #22
Det virker hos mig nu efter at have uplaodet til mit webhotel på b-one .. :) Det må altså have noget at gøre med versionen af php på min server som du også snakkede om coderdk.

Jeg siger tusinde tak for den rigtig gode respons og support :) Tak mate :)
Avatar billede inctor Nybegynder
07. november 2006 - 15:12 #23
Det gør den ..

http://2cool4you.dk/nse/tkal.php?m=11&y=06

Der er siden ..

DB:

CREATE TABLE `rr_calendar` (
  `id` int(12) NOT NULL auto_increment,
  `name` longtext NOT NULL,
  `date` longtext NOT NULL,
  `text` longtext NOT NULL,
  `category` longtext NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;

#
# Data dump for tabellen `rr_calendar`
#

INSERT INTO `rr_calendar` VALUES (1, 'Tekst', '07', 'Test', 'Test\r\n');
Avatar billede coderdk Praktikant
07. november 2006 - 15:17 #24
Så lidt cortx :)
Avatar billede inctor Nybegynder
07. november 2006 - 22:48 #25
Nogen de rkan hjælpe mig ? :S
Avatar billede cortx Nybegynder
08. november 2006 - 00:05 #26
INSERT INTO `rr_calendar` VALUES (1, 'Tekst', '2007-01-30', 'Test', 'Test\r\n');

Det er datoen du indskriver forkert.. Det skal være:
år-måned-dag ..

fx. d. 30. januar 2007 skal være:
2007-01-30
Avatar billede cortx Nybegynder
08. november 2006 - 00:14 #27
arh sry, du har valgt gf's forslag :) Det jeg skrev var til coderdk's forslag :)
Avatar billede inctor Nybegynder
08. november 2006 - 00:17 #28
Hvorn får man fremhævet den aktuelle dato i Gf's forslag ? (:
Det første forslag der kom ..
Avatar billede cortx Nybegynder
08. november 2006 - 00:25 #29
Har selv prøvet med gf's forslag, men kunne ikke :) Håb på at coderdk læser det, ellers opret nyt spørgsmål mate :)
Avatar billede inctor Nybegynder
08. november 2006 - 00:28 #30
For det andet forslag, altså Coderdk's .. Det viser at datoen idag er 2006-11-31 .. :S Uanset hvad jeg ændre .. Såå har valgt Gf's, det oss noget pænere opsat synes jeg .. :P heeh ..
Avatar billede cortx Nybegynder
08. november 2006 - 00:34 #31
Jamen det jo smas behag hehe :D Eller et spørgsmål om at redigere designet :)
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