Archief - PHP: kalender maandview met events

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

aikrez

Legacy Member
Op mijn stage ben ik bezig aan een kalender voor het beheer van wagens
Er moet een maandview getoond worden maar ik vraag me af hoe je per dag de uit de database (mysql) gehaalde events moet bijzetten.

Voor de kalender gebruik ik pear calendar http://pear.php.net/, in de package zaten voorbeeldkalenders en heb ik deze gebruikt.

PHP:
<?php
session_start();
require '../config.php';

echo "<html>";
echo "<head>";
echo "<link href=\"../style.css\" rel=\"stylesheet\" type=\"text/css\" />";
echo "</head>";

echo "<body>";
echo "Dag ".$_SESSION['suser']."</br></br>"; 
	echo "kalender van de wagens";
	echo "</br></br>";
echo "<html>";
echo "<head></head>";
echo "<body>";
echo "<table>";

// include classes
include("Calendar/Month/Weekdays.php");
include("Calendar/Decorator/Textual.php");
include("Calendar/Decorator/Uri.php");

// get month and year
// defaults to current month and year
// if no values available
$yy = (isset($_GET['yy']) && is_numeric($_GET['yy'])) ? $_GET['yy'] : date("Y");
$mm = (isset($_GET['mm']) && is_numeric($_GET['mm'])) ? $_GET['mm'] : date("m");

// create and build month data structure
// containing day objects
// classified by week
$month =& new Calendar_Month_Weekdays($yy, $mm);
$month->build();

// create text decorator to get string names
$text =& new Calendar_Decorator_Textual($month);

// create URI helper for navigation
// define GET variables to use
$uri =& new Calendar_Decorator_Uri($month);
$uri->setFragments("yy", "mm");

// print prev page link
echo "<tr><td><a href=?" . $uri->prev('month') . "><<</a></td>";

// print month and year
echo "<td colspan=5 align=center>" . $text->thisMonthName('short') . " " . $text->thisYear() . "</td>";

// print next page link
echo "<td><a href=?" . $uri->next('month') . ">>></a></td></tr>";

// print day names
$dayNames = $text->orderedWeekdays('two');
echo "<tr>";
foreach ($dayNames as $name) {
    echo "<td>$name</td>";
}
echo "</tr>";

// reset URI helper for day links
// attach to dummy $day object
// set GET variables
$day =& new Calendar_Day(null, null, null);
$uri =& new Calendar_Decorator_Uri($day);
$uri->setFragments("yy", "mm", "dd");

// iterate over days
// display as weekly calendar
while ($day = $month->fetch()) {
    // if first day of week
    // start a new row
    if ($day->isFirst()) {
        echo "<tr>";
    }

    // if this day does not belong to this month
    // print empty spaces
    if ($day->isEmpty()) {
        echo "<td>&nbsp;</td>";
    // else print the day number
    // with a hyperlink
    } else {
    	// hier zit de code voor het opvullen
	$voldatum = $_GET['yy']."-".$_GET['mm']."-".$_GET['dd'];
    	$result = mysql_query("SELECT categorie FROM wagens where begindatum='".$voldatum."'");
    		
		while ($row = mysql_fetch_array($result))
		{
			$categorie=$row['categorie'];
		}    
			
    	
        echo "<td><a href=kalender_wagens_maandview.php?".$uri->this('day').">".$day->thisDay().$categorie."</a></td>";
    }

    // if last day
    // end row
    if ($day->isLast()) {
        echo "</tr>";
    }
}

echo "</table>";
echo "</body>";
echo "</html>";
?>


met de prutscode dat ik erin gezwierd heb toont hij de event van de juiste dag maar in alle kottekes als ik op een dag klik

hij zou dus bij het laden van de pagina alle events van deze maand moeten tonen per dag

aikrez

Legacy Member
"oplossing"
de klasse is geschreven door iemand anders en ik heb ze aangepast aan dbresultaten

PHP:
<?php

require_once 'config.php';
//if you use ISO-8601 dates, switch to PearDate engine
define('CALENDAR_ENGINE', 'PearDate');

require_once 'Calendar/Calendar.php';
require_once 'Calendar/Month/Weekdays.php';
require_once 'Calendar/Day.php';
require_once 'Calendar/Decorator.php';

// accepts multiple entries
class DiaryEvent extends Calendar_Decorator
{
    var $entries = array();

    function DiaryEvent($calendar) {
        Calendar_Decorator::Calendar_Decorator($calendar);
    }

    function addEntry($entry) {
        $this->entries[] = $entry;
    }

    function getEntry() {
        $entry = each($this->entries);
        if ($entry) {
            return $entry['value'];
        } else {
            reset($this->entries);
            return false;
        }
    }
}

class MonthPayload_Decorator extends Calendar_Decorator
{
    //Calendar engine
    var $cE;
    var $tableHelper;

    var $year;
    var $month;
    var $firstDay = false;

    function build($events=array())
    {
        require_once 'Calendar/Day.php';
        require_once 'Calendar/Table/Helper.php';

        $this->tableHelper = & new Calendar_Table_Helper($this, $this->firstDay);
        $this->cE = & $this->getEngine();
        $this->year  = $this->thisYear();
        $this->month = $this->thisMonth();

        $daysInMonth = $this->cE->getDaysInMonth($this->year, $this->month);
        for ($i=1; $i<=$daysInMonth; $i++) {
            $Day = new Calendar_Day(2000,1,1); // Create Day with dummy values
            $Day->setTimeStamp($this->cE->dateToStamp($this->year, $this->month, $i));
            $this->children[$i] = new DiaryEvent($Day);
        }
        
        if (count($events) > 0) {
			$this->setSelection($events);
        }
				
        Calendar_Month_Weekdays::buildEmptyDaysBefore();
        Calendar_Month_Weekdays::shiftDays();
        Calendar_Month_Weekdays::buildEmptyDaysAfter();
        Calendar_Month_Weekdays::setWeekMarkers();
        return true;
    }

    function setSelection($events)
    {
        $daysInMonth = $this->cE->getDaysInMonth($this->year, $this->month);
        for ($i=1; $i<=$daysInMonth; $i++) {
            $stamp1 = $this->cE->dateToStamp($this->year, $this->month, $i);
            $stamp2 = $this->cE->dateToStamp($this->year, $this->month, $i+1);
            
            	//begin foreach
				foreach ($events as $event) {	
				
					if (($stamp1 >= $event['begindatum'] && $stamp1 < $event['einddatum']) ||
	                    ($stamp2 >= $event['begindatum'] && $stamp2 < $event['einddatum']) ||
	                    ($stamp1 <= $event['begindatum'] && $stamp2 > $event['einddatum'])
	                ) {
	                    $this->children[$i]->addEntry($event);
	                    $this->children[$i]->setSelected();
	                }
				}///einde foreach
        }
    }

    function fetch()
    {
        $child = each($this->children);
        if ($child) {
            return $child['value'];
        } else {
            reset($this->children);
            return false;
        }
    }
}

// Calendar instance used to get the dates in the preferred format:
// you can switch Calendar Engine and the example still works
$cal = new Calendar;

echo "</br></br></br></br>";
$result = mysql_query("select * from wagens where month(begindatum)='3'");

while($row= mysql_fetch_assoc($result))
{
	$events[]=$row;	
}

$Month = & new Calendar_Month_Weekdays(2007, 3);
$MonthDecorator = new MonthPayload_Decorator($Month);
$MonthDecorator->build($events);

?>
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> Calendar </title>
<link href="kalender_wagens_maandview.css" rel="stylesheet" type="text/css" />
</head>
<body>
Wagenkalender maandview
<table class="calendar" width="98%" cellspacing="0" cellpadding="0">
<caption>
    <?php echo $MonthDecorator->thisMonth().' / '.$MonthDecorator->thisYear(); ?>
</caption>
<tr>
    <th>Maandag</th>
    <th>Dinsdag</th>
    <th>Woensdag</th>
    <th>Donderdag</th>
    <th>Vrijdag</th>
    <th>Zaterday</th>
    <th>Zondag</th>
</tr>
<?php
while ($Day = $MonthDecorator->fetch()) {

    if ($Day->isFirst()) {
        echo "<tr>\n";
    }

    echo '<td class="calCell';
    if ($Day->isSelected()) {
        echo ' calCellBusy';
    } elseif ($Day->isEmpty()) {
        echo ' calCellEmpty';
    }
    echo '">';
    echo '<div class="dayNumber"><a href=kalender_wagens_dagview.php?action=wagens_dagview&jaar='.$MonthDecorator->thisYear().'&maand='.$MonthDecorator->thisMonth().'&dag='.$Day->thisDay().'>'.$Day->thisDay().'</a></div>';

    if ($Day->isEmpty()) {
        echo '&nbsp;';
    } else {
        echo '<div class="dayContents"><ul>';
        while ($entry = $Day->getEntry()) {
        	echo  '<li>'.$entry['categorie']."-".$entry['bestuurder'].'</li>';
            //you can print the time range as well
        }
        echo '</ul></div>';
    }
    echo '</td>';

    if ($Day->isLast()) {
        echo "</tr>\n";
    }
}
?>
</table>
</body>
</html>

wat je ziet is een kalender met maandview
de events kunnnen gespreidt zijn over verschillende dagen
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan