我有一个约会网站,我使用这个预订脚本http://www.planetphp.co.uk/free-php-booking-slots-calendar/。 不幸的是,我已经尝试了一切,以便在显示月份时更改语言。
class booking_diary {
// Mysqli connection
function __construct($link) {
$this->link = $link;
}
// Settings you can change:
// Time Related Variables
public $booking_start_time = "09:00"; // The time of the first slot in 24 hour H:M format
public $booking_end_time = "21:00"; // The time of the last slot in 24 hour H:M format
public $booking_frequency = 30; // The slot frequency per hour, expressed in minutes.
// Day Related Variables
public $day_format = 3; // Day format of the table header. Possible values (1, 2, 3)
// 1 = Show First digit, eg: "M"
// 2 = Show First 3 letters, eg: "Mon"
// 3 = Full Day, eg: "Monday"
public $day_closed = array("Saturday", "Sunday"); // If you don't want any 'closed' days, remove the day so it becomes: = array();
public $day_closed_text = "CLOSED"; // If you don't want any any 'closed' remove the text so it becomes: = "";
// Cost Related Variables
public $cost_per_slot = 20.50; // The cost per slot
public $cost_currency_tag = "€"; // The currency tag in HTML such as € £ ¥
// DO NOT EDIT BELOW THIS LINE
public $day_order = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
public $day, $month, $year, $selected_date, $back, $back_month, $back_year, $forward, $forward_month, $forward_year, $bookings, $count, $days, $is_slot_booked_today;
/*========================================================================================================================================================*/
function make_calendar($selected_date, $back, $forward, $day, $month, $year,$first_name) {
// $day, $month and $year are the $_GET variables in the URL
$this->day = $day;
$this->month = $month;
$this->year = $year;
$this->first_name = $first_name;
$this->last_name = $last_name;
$this->telephone = $telephone;
$this->email = $email;
$this->page_id = $page_id;
$this->user_id = $user_id;
$this->uid = $uid;
$this->pon = $owner;
$this->rsvnumb = $rsvnumb;
// $back and $forward are Unix Timestamps of the previous / next month, used to give the back arrow the correct month and year
$this->selected_date = $selected_date;
$this->back = $back;
$this->back_month = date("m", $back);
$this->back_year = date("Y", $back); // Minus one month back arrow
$this->forward = $forward;
$this->forward_month = date("m", $forward);
$this->forward_year = date("Y", $forward); // Add one month forward arrow
// Make the booking array
$this->make_booking_array($year, $month);
}
function make_booking_array($year, $month, $j = 0) {
$stmt = $this->link->prepare("SELECT name, date, start FROM bookings WHERE date LIKE CONCAT(?, '-', ?, '%') and page_id=".$_GET['page_id']."");
$this->is_slot_booked_today = 0; // Defaults to 0
$stmt->bind_param('ss', $year, $month);
$stmt->bind_result($name, $date, $start);
$stmt->execute();
$stmt->store_result();
while($stmt->fetch()) {
$this->bookings_per_day[$date][] = $start;
$this->bookings[] = array(
"name" => $name,
"date" => $date,
"start" => $start
);
// Used by the 'booking_form' function later to check whether there are any booked slots on the selected day
if($date == $this->year . '-' . $this->month . '-' . $this->day) {
$this->is_slot_booked_today = 1;
}
}
// Calculate how many slots there are per day
$this->slots_per_day = 0;
for($i = strtotime($this->booking_start_time); $i<= strtotime($this->booking_end_time); $i = $i + $this->booking_frequency * 60) {
$this->slots_per_day ++;
}
$stmt->close();
$this->make_days_array($year, $month);
} // Close function
function make_days_array($year, $month) {
// Calculate the number of days in the selected month
$num_days_month = cal_days_in_month(CAL_GREGORIAN, $month, $year);
// Make $this->days array containing the Day Number and Day Number in the selected month
for ($i = 1; $i <= $num_days_month; $i++) {
// Work out the Day Name ( Monday, Tuesday... ) from the $month and $year variables
$d = (mktime(0, 0, 0, $month, $i, $year));
// Create the array
$this->days[] = array("daynumber" => $i, "dayname" => date("l", $d));
}
/*
Sample output of the $this->days array:
[0] => Array
(
[daynumber] => 1
[dayname] => Monday
)
[1] => Array
(
[daynumber] => 2
[dayname] => Tuesday
)
*/
$this->make_blank_start($year, $month);
$this->make_blank_end($year, $month);
} // Close function
function make_blank_start($year, $month) {
/*
Calendar months start on different days
Therefore there are often blank 'unavailable' days at the beginning of the month which are showed as a grey block
The code below creates the blank days at the beginning of the month
*/
// Get first record of the days array which will be the First Day in the month ( eg Wednesday )
$first_day = $this->days[0]['dayname']; $s = 0;
// Loop through $day_order array ( Monday, Tuesday ... )
foreach($this->day_order as $i => $r) {
// Compare the $first_day to the Day Order
if($first_day == $r && $s == 0) {
$s = 1; // Set flag to 1 stop further processing
} elseif($s == 0) {
$blank = array(
"daynumber" => 'blank',
"dayname" => 'blank'
);
// Prepend elements to the beginning of the $day array
array_unshift($this->days, $blank);
}
} // Close foreach
} // Close function
function make_blank_end($year, $month) {
/*
Calendar months start on different days
Therefore there are often blank 'unavailable' days at the end of the month which are showed as a grey block
The code below creates the blank days at the end of the month
*/
// Add blank elements to end of array if required.
$pad_end = 7 - (count($this->days) % 7);
if ($pad_end < 7) {
$blank = array(
"daynumber" => 'blank',
"dayname" => 'blank'
);
for ($i = 1; $i <= $pad_end; $i++) {
array_push($this->days, $blank);
}
} // Close if
$this->calendar_top();
} // Close function
function calendar_top() {
// This function creates the top of the table containg the date and the forward and back arrows
echo "
<div id='lhs'><div id='outer_calendar'>
<table border='0' cellpadding='0' cellspacing='0' id='calendar'>
<tr id='week'>
<td align='left'><a href='?month=" . date("m", $this->back) . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&telephone=" . $_GET['telephone'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&pon=" . $_GET['pon'] . "&page_id=" . $_GET['page_id'] . "&year=" . date("Y", $this->back) . "'>«</a></td>
<td colspan='5' id='center_date'>" . date("F, Y", $this->selected_date) . "</td>
<td align='right'><a href='?month=" . date("m", $this->forward) . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&telephone=" . $_GET['telephone'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&pon=" . $_GET['pon'] . "&page_id=" . $_GET['page_id'] . "&year=" . date("Y", $this->forward) . "'>»</a></td>
</tr>
<tr>";
/*
Make the table header with the appropriate day of the week using the $day_format variable as user defined above
Definition:
1: Show First digit, eg: "M"
2: Show First 3 letters, eg: "Mon"
3: Full Day, eg: "Monday"
*/
foreach($this->day_order as $r) {
switch($this->day_format) {
case(1):
echo "<th>" . substr($r, 0, 1) . "</th>";
break;
case(2):
echo "<th>" . substr($r, 0, 3) . "</th>";
break;
case(3):
echo "<th>" . $r . "</th>";
break;
} // Close switch
} // Close foreach
echo "</tr>";
$this->make_cells();
} // Close function
function make_cells($table = '') {
echo '<h3>Επέλεξε μία μέρα</h3>';
echo "<tr>";
foreach($this->days as $i => $r) { // Loop through the date array
$j = $i + 1; $tag = 0;
// If the the current day is found in the day_closed array, bookings are not allowed on this day
if(in_array($r['dayname'], $this->day_closed)) {
echo "\r\n<td width='21' valign='top' class='closed'>" . $this->day_closed_text . "</td>";
$tag = 1;
}
// Past days are greyed out
if (mktime(0, 0, 0, $this->month, sprintf("%02s", $r['daynumber']) + 1, $this->year) < strtotime("now") && $tag != 1) {
echo "\r\n<td width='21' valign='top' class='past'>";
// Output day number
if($r['daynumber'] != 'blank') echo $r['daynumber'];
echo "</td>";
$tag = 1;
}
// If the element is set as 'blank', insert blank day
if($r['dayname'] == 'blank' && $tag != 1) {
echo "\r\n<td width='21' valign='top' class='unavailable'></td>";
$tag = 1;
}
// Now check the booking array $this->booking to see whether we have a booking on this day
$current_day = $this->year . '-' . $this->month . '-' . sprintf("%02s", $r['daynumber']);
if(isset($this->bookings_per_day[$current_day]) && $tag == 0) {
$current_day_slots_booked = count($this->bookings_per_day[$current_day]);
if($current_day_slots_booked < $this->slots_per_day) {
echo "\r\n<td width='21' valign='top'>
<a href='reservation.php?month=" . $this->month . "&year=" . $this->year . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&telephone=" . $_GET['telephone'] . "&pon=" . $_GET['pon'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&page_id=" . $_GET['page_id'] . "&day=" . sprintf("%02s", $r['daynumber']) . "' class='part_booked' title='This day is part booked'>" .
$r['daynumber'] . "</a></td>";
$tag = 1;
} else {
echo "\r\n<td width='21' valign='top'>
<a href='reservation.php?month=" . $this->month . "&year=" . $this->year . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&telephone=" . $_GET['telephone'] . "&pon=" . $_GET['pon'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&page_id=" . $_GET['page_id'] . "&day=" . sprintf("%02s", $r['daynumber']) . "' class='fully_booked' title='This day is fully booked'>" .
$r['daynumber'] . "</a></td>";
$tag = 1;
} // Close else
} // Close if
if($tag == 0) {
echo "\r\n<td width='21' valign='top'>
<a href='reservation.php?month=" . $this->month . "&year=" . $this->year . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&telephone=" . $_GET['telephone'] . "&pon=" . $_GET['pon'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&page_id=" . $_GET['page_id'] . "&day=" . sprintf("%02s", $r['daynumber']) . "' class='green' title='Please click to view bookings'>" .
$r['daynumber'] . "</a></td>";
}
// The modulus function below ($j % 7 == 0) adds a <tr> tag to every seventh cell + 1;
if($j % 7 == 0 && $i >1) {
echo "\r\n</tr>\r\n<tr>"; // Use modulus to give us a <tr> after every seven <td> cells
}
}
echo "</tr></table></div><!-- Close outer_calendar DIV -->";
if(isset($_GET['year']))
$this->basket();
echo "</div><!-- Close LHS DIV -->";
// Check booked slots for selected date and only show the booking form if there are available slots
$current_day = $this->year . '-' . $this->month . '-' . $this->day;
$slots_selected_day = 0;
if(isset($this->bookings_per_day[$current_day]))
$slots_selected_day = count($this->bookings_per_day[$current_day]);
if($this->day != 0 && $slots_selected_day < $this->slots_per_day) {
$this->booking_form();
}
} // Close function
让某人知道这个剧本,我怎样才能改变月份的语言(希腊语)?
答案 0 :(得分:0)
date()
功能只能使用英语输出。在使用strftime()
设置区域设置时,您必须使用setlocale()
。这将以设置的语言环境的语言输出,在本例中为 - 希腊语。
这两种格式有些不同,但并不完全不同。下面给出一个简短的例子。
setlocale(LC_TIME, 'el_GR.UTF-8'); // Set the locale to greek
echo strftime("%A", $d); // Outputs weekname, Monday through Sunday
echo strftime("%m", $this->back) // Outputs month, numerically, e.g. "10"
echo strftime("%B, %Y", $this->selected_date); // Outputs e.g "October, 2016"
// These comments, about the formats, are in English,
// because I don't know the Greek translation
// It will be in Greek should the locale be installed and properly set
将date()
功能更改为strftime()
(使用documentation中的新参数),您应该感觉良好!
如果上述方法不起作用,那是因为您的服务器上尚未安装该区域设置(希腊语为el_GR
)。
参考
答案 1 :(得分:0)
感谢您的回答。我试过setlocale(LC_TIME,'el_GR.UTF-8');但没有任何事情发生。我试过setlocale(LC_ALL,'greek');但是希腊语是???????。当我将页面编码到windows-1253时,我可以看到希腊语中的月份,但这不是解决方案。我该怎么办?
修改强> 我找到了解决方案
$date_encoded = strftime('%B %Y', $this->selected_date);
$date_encoded = iconv('Windows-1253', 'UTF-8//IGNORE', $date_encoded);
答案 2 :(得分:0)
我们如何使用mysqli db
将默认时间更改为动态//与时间相关的变量
public $ booking_start_time =&#34; 09:00&#34 ;; //第一个插槽的时间为24小时H:M格式
public $ booking_end_time =&#34; 21:00&#34 ;; // 24小时H:M格式的最后一个插槽的时间