Calendar Data Box
Problem: The price number information can not correspond to the array of the date to display (such as the array has 2013-10-12 and 2013-10-21 only price and number, but the program will be displayed in turn from the start date, not in the generated calendar within the corresponding date), there are experts please point out, The more you change the logic, the more confusing.
Now the effect
The code is as follows:
Class productdate{
var $product _id = ";
var $date = ';
var $original _date = ";
var $nextDate = ';
var $prices = ';
var $count = 42;
var $nowWeek;
var $nowMonth;
var $nextMonth;
var $startDate;
var $lastDate;
function Create ($product _id, $date, $prices) {
$this->product_id = $product _id;
$this->original_date = $this->date = strtotime ($date);
$this->prices = $prices;
$this->_init ();
$DATESTMP = Array_keys ($this->prices);
$this->lastdate = Array_pop ($DATESTMP);
}
/**
* Next one months
*
*/
function Createnext () {
$this->nextdate = $date; Next month, awaiting treatment
$this->create ($this->nextdate);
}
function Getnextmonth ($tmp _date, $step = 1) {
Cut out year
$tmp _year= Date (' Y ', $tmp _date);
Cut out Month
$tmp _mon =date (' m ', $tmp _date);
$tmp _nextmonth=mktime (0,0,0, $tmp _mon + $step, 1, $tmp _year);
Get the start of the next month for the next 2 months of the current month, the latest date
return $tmp _nextmonth;
}
function Getpremonth ($tmp _date, $step = 1) {
Cut out year
$tmp _year= Date (' Y ', $tmp _date);
Cut out Month
$tmp _mon =date (' m ', $tmp _date);
$tmp _premonth=mktime (0,0,0, $tmp _mon-$step, 1, $tmp _year);
Get the last one months of the current month
return $tmp _premonth;
}
/**
* Initialization Parameters
*
*/
function _init () {
$this->nowweek = Date (' W ', $this->date);
$this->nowmonth = Date (' m ', $this->date);
$this->nextmonth = Date (' m ', $this->date + 86400 * $this->count);
$this->startdate = $this->date-86400 * $this->nowweek;//get start date
}
/**
* Get HTML
*
*/
function gethtml () {
$box = $this->getbox ();
while ($this->getnextmonth ($this->date, 2) < $this->lastdate) {
$this->date = $this->getnextmonth ($this->date);
$this->_init ();
$box. = $this->getbox ();
}
Return <<
PRODUCT_ID} ">
{$box}
EOF;
}
/**
* Get Calendar blocks
*
*/
function Getbox () {
$result = '
';
$startDate = $this->startdate;
for ($i = 0; $i < $this->count; $i + +) {
$tmp _y = Date ("y-n-d", $startDate);
$tmp _m = Date ("M", $startDate);
$tmp _d = Date ("D", $startDate);
if (Isset ($this->prices[$startDate]) && Is_array ($this->prices[$startDate])) {
$nowtime = Date ("y-m-d", $this->prices[$startDate] [' nowtime ']);
$price = $this->prices[$startDate] [' Price ']? ' ¥ '. $this->prices[$startDate [' Price ']: ' No ';
$nums = $this->prices[$startDate] [' nums '] > 10? ' Ample ': ' Left '. $this->prices[$startDate [' nums '];
} else {
$price = ";
$nums = ";
}
if ($startDate >= $this->date) {
$result. = '
- '. $tmp _d. ". $tmp _y. ". $nums. ". $price. '
';
} else {
$result. = '
- '. $tmp _d. ". $tmp _y. '
';
}
if ($i < $this->count-1) && (Date (' W ', $startDate) = = 6)) {
$result. = '
';
}
$startDate + = 86400;
}
$result. = "
";
$isShow = ";
if ($this->original_date! = $this->date) {
$isShow = ' style= ' Display:none ';
}
echo "
";
Return <<
Travel Day Price List
{$this->gethead ()}
- Sunday
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
{$result}
EOF;
}
/**
* Head Set Month button
*
*/
function GetHead () {
$result = ";
$preIcon = $this->getpremonth ($this->date) > $this->getpremonth ($this->original_date)? "Search_pp_cal_nevm_icon": "Search_pp_cal_nevm_no_icon";//Start
$nextIcon = $this->getnextmonth ($this->date, 2) < $this->lastdate? "Search_pp_cal_nextm_icon": "Search_pp_cal_nextm_no_icon";//End
Return <<
{$this->nowmonth} month
{$this->nextmonth} month
EOF;
}
}
$date = Date ("y-m-d");
$DATETMP = Strtotime ($date);
$price = Array ();//initialization of price data
foreach ($xianluttime as $k = $v)
{
$price [$DATETMP] = Array (
' Nowtime ' = $v [0],
' Nums ' = rand (2, 12),
' Price ' = $v [1]
);
$DATETMP = $dateTmp + 86400;
$i + +;
if ($i = = $countday)
{
Break
}
}
$productId = $_request[' productId ');
$obj = new Productdate ();
$obj->create ($productId, $date, $price);
echo $obj->gethtml ();
?>
Reply to discussion (solution)
Please paste all your code! (including style sheets)
You can't test a fragment like this.
Please paste all your code! (including style sheets)
You can't test a fragment like this.
This is the other file, too long not paste, the problem is posted above, the other file is to get the AJAX product JSON format, the problem is here:
foreach ($xianluttime as $k = $v)
{
$price [$DATETMP] = Array (
' Nowtime ' = $v [0],
' Nums ' = rand (2, 12),
' Price ' = $v [1]
);
$DATETMP = $dateTmp + 86400;
$i + +;
if ($i = = $countday)
{
Break
}
}
Here the array has a $nowtime format is y-m-d, it is assumed that the date in this array to output this inside
function Getbox () {
$result = '
';
$startDate = $this->startdate;
for ($i = 0; $i < $this->count; $i + +) {
$tmp _y = Date ("y-n-d", $startDate);
$tmp _m = Date ("M", $startDate);
$tmp _d = Date ("D", $startDate);
if (Isset ($this->prices[$startDate]) && Is_array ($this->prices[$startDate])) {
$nowtime = Date ("y-m-d", $this->prices[$startDate] [' nowtime ']);
$price = $this->prices[$startDate] [' Price ']? ' ¥ '. $this->prices[$startDate [' Price ']: ' No ';
$nums = $this->prices[$startDate] [' nums '] > 10? ' Ample ': ' Left '. $this->prices[$startDate [' nums '];
} else {
$price = ";
$nums = ";
}
if ($startDate >= $this->date) {
$result. = '
- '. $tmp _d. ". $tmp _y. ". $nums. ". $price. '
';
} else {
$result. = '
- '. $tmp _d. ". $tmp _y. '
';
}
if ($i < $this->count-1) && (Date (' W ', $startDate) = = 6)) {
$result. = '
';
}
$startDate + = 86400;
}
$result. = "
";
If convenient can add QQ
Since you can only give code snippets, you should comment on the code given
Or God knows what's better than what he's doing.
Since you can only give code snippets, you should comment on the code given
Or God knows what's better than what he's doing.
In function Getbox () determine if the value of $tmp_y is in the
foreach ($xianluttime as $k = $v)
{
$price [$DATETMP] = Array (
' Nowtime ' = $v [0],
' Nums ' = rand (2, 12),
' Price ' = $v [1]
);
$DATETMP = $dateTmp + 86400;
$i + +;
if ($i = = $countday)
{
Break
}
}
Array of $nowtime inside, if there is execution of this paragraph:
'. $tmp _d. ". $tmp _y. ". $nums. ". $price. '';
Does not exist perform the following paragraph:
'. $tmp _d. ". $tmp _y. '';
Do you want to fill in the contents of the array with the date of the key is not very simple?
Do you want to fill in the contents of the array with the date of the key is not very simple?
Can you make it a little more specific? Meaning I understand, but how to achieve
for ($i =1; $i <31; $i + +) { echo $i; if (Isset ($data [$i]) { //output here $data [$i]} }
Does that mean you understand?
for ($i =1; $i <31; $i + +) { echo $i; if (Isset ($data [$i]) { //output here $data [$i]} }
Does that mean you understand?
Thank you! General direction.
Two are very talented, the perception is too high
I look at the code a dizzy
Then Lao Xu a few lines of code LZ on the "direction", admire
Two are very talented, the perception is too high
I look at the code a dizzy
Then Lao Xu a few lines of code LZ on the "direction", admire
Thank you for the Post