Создать ответ 
Прошу помощи при написании календаря
Автор Сообщение
Странник Не на форуме
Рядовой
*

Сообщений: 4
У нас с: Jul 2014
Сообщение: #1
Question Прошу помощи при написании календаря
Добрый день! Столкнулся с такой проблемой: нужно написать календарь, в котором пользователь может выбрать дату и время посещения магазина, но выбор даты должен ограничиваться десятью днями от текущей даты, и чтобы эта дата и время была записана в БД....Sad

[Изображение: new_calendar.jpg]
06.07.2014 13:58:55
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #2
RE: Прошу помощи при написании календаря
Так Вам нужно с нуля скрипт написать или доработать уже имеющийся?

Судя по изображению, приведенного вами, уже какие-то наработки имеются, так выкладывайте код, может сможем чет-то помочь.

P.S. Ваше изображение чуть-чуть обрезал и перезалил для уменьшения размера и веса.
06.07.2014 15:37:44
Найти все сообщения Цитировать это сообщение
Странник Не на форуме
Рядовой
*

Сообщений: 4
У нас с: Jul 2014
Сообщение: #3
RE: Прошу помощи при написании календаря
Мне бы хотелось узнать, как сделать ограничение по выбору даты на 10 дней, допустим, и запись этого выбора в БД. Изображения нашел на сайте, оформление я сделаю сам, пользуясь скриптами на вашем замечательном сайте. =)
Или для того чтобы мне это пояснили мне надо будет скинуть весь свой скрипт?
Я просто хочу сделать что-то на подобие 2.skladsizo.ru/dinner?id=000000537. Нажмите Комплексные обеды, в них находиться этот календарь.

Ссылку на сайт сделал не активной!
06.07.2014 15:52:34
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #4
RE: Прошу помощи при написании календаря
Просто не понятно, что именно у Вас не получается. И на чем должен быть этот календарь на JS или PHP?
Вы ведь должны понимать, что целиком за Вас скрипт с нуля никто не будет делать просто так.

А если бы Вы выложили уже имеющийся скрипт и попросили в нем что-то поправить, то это уже совсем другой разговор.
06.07.2014 16:15:00
Найти все сообщения Цитировать это сообщение
Странник Не на форуме
Рядовой
*

Сообщений: 4
У нас с: Jul 2014
Сообщение: #5
RE: Прошу помощи при написании календаря
PHP код:
<?
// проверяем передали ли нам месяц и год
if(isset($_GET["ym"])){
 
        
$year  = (int)substr($_GET["ym"], 04);
        
$month = (int)substr($_GET["ym"], 42);
 
}
else{ 
// иначе выводить текущие месяц и год
 
        
$month date("m"mktime(0,0,0,date('m'),1,date('Y')));
        
$year  date("Y"mktime(0,0,0,date('m'),1,date('Y')));
 
}
 
$skip          date("w"mktime(0,0,0,$month,1,$year)) - 1// узнаем номер дня недели
if($skip 0){ 
        
$skip 6
}
$daysInMonth   date("t"mktime(0,0,0,$month,1,$year));       // узнаем число дней в месяце
$calendar_head '';    // обнуляем calendar head
$calendar_body '';    // обнуляем calendar boday
$day 1;       // для цикла далее будем увеличивать значение
 
for($i 0$i 6$i++){ // Внешний цикл для недель 6 с неполными
 
        
$calendar_body .= '<tr>';       // открываем тег строки
        
for($j 0$j 7$j++){      // Внутренний цикл для дней недели
        
                
if(($skip 0)or($day $daysInMonth)){ // выводим пустые ячейки до 1 го дня и после полного количества дней
                
                        
$calendar_body .= '<td class="none"> </td>'
                        
$skip--;
 
                }
                else{
                        
                        if(
$j == 0)     // если воскресенье то отмечаем выходной
                                
$calendar_body .= '<td class="holiday">'.$day.'</td>'
                        else{   
// в противном случае просто выводим день в ячейке
                                
if ((date(j)==$day)&&(date(m)==$month)&&(date(Y)==$year)){//проверяем на текущий день
                                        
$calendar_body .= '<td class="today">'.$day.'</td>';
                                }       
                                else{ 
                                        
$calendar_body .= '<td class="day">'.$day.'</td>'
                                   }
                                 }
                        
$day++; // увеличиваем $day
                
}
                
        }
        
$calendar_body .= '</tr>'// закрываем тег строки
}
 
// заголовок календаря
$calendar_head '
  <tr>          
        <th colspan="2"><a href="?ym='
.date("Ym"mktime(0,0,0,$month-1,1,$year)).'">« Пред</a></th>
        <th colspan="3">'
.date("F, Y"mktime(0,0,0,$month,1,$year)).'</th>
        <th colspan="2"><a href="?ym='
.date("Ym"mktime(0,0,0,$month+1,1,$year)).'">След »</a></th>
  </tr>
  <tr>
    <th>Понедельник</th>
    <th>Вторник</th>
    <th>Среда</th>
    <th>Четверг</th>
    <th>Пятница</th>
    <th>Суббота</th>
    <th>Воскресенье</th>
  </tr>'
;
  
echo
"  <table id='calendar' width='400' border='1' cellspacing='0' cellpadding='5'>
         <tr><td>
$calendar_head $calendar_body </td></tr>
        
</table>"
;?>

Нужно на php или javascript.
06.07.2014 16:35:45
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #6
RE: Прошу помощи при написании календаря
Предположим, что ограничение по выбору даты на 10 дней уже сделано.
Что дальше?

Что должно происходить по клику по одному из этих доступных 10 дней?
Или просто для этих дней должна быть своя ссылка?
06.07.2014 17:12:52
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #7
RE: Прошу помощи при написании календаря
Постарался уменьшить код и получилось что-то вроде этого:

PHP код:
<style type="text/css">
    .
today{background-color:#66BBFF;}
</style>

<?
php
if(isset($_GET["ym"])){
    
$year  = (int)substr($_GET["ym"], 04);
    
$month = (int)substr($_GET["ym"], 42);
}
else {
    
$month date("m");
    
$year  date("Y");
}

$num_day mktime(0,0,0,$month,1,$year);
$skip date("w"mktime(0,0,0,$month,1,$year)) - 1;
if(
$skip 0$skip 6;

$c_head '';
$c_body '';
$day 1;
$period 10;
$this_day=date(j);

if (
date("t",$num_day)-$this_day<$period$period_next=$period-date("t",$num_day)+$this_day;
else 
$period_next=0;

for(
$i 0$i 6$i++){
    
$c_body .= '<tr>';
    for(
$j 0$j 7$j++){
        if((
$skip 0)or($day date("t"$num_day))){
            
$c_body .= '<td class="none"> </td>';
            
$skip--;
        }
        else {
            if ((
$this_day>=$day-$period)&&($this_day<=$day)&&(date(m)==$month)&&(date(Y)==$year)){
                
$c_body .= '<td class="today">'.$day.'</td>';
             }
            else 
$c_body .= '<td class="day">'.$day.'</td>';
            
$day++;
        }
    }
    
$c_body .= '</tr>';
}

$c_head '
    <tr>
        <th colspan="2"><a href="?ym='
.date("Ym"mktime(0,0,0,$month-1,1,$year)).'">« Пред</a></th>
        <th colspan="3">'
.date("F, Y",$num_day).'</th>
        <th colspan="2"><a href="?ym='
.date("Ym"mktime(0,0,0,$month+1,1,$year)).'">След »</a></th>
    </tr>
    <tr>
        <th>Понедельник</th>
        <th>Вторник</th>
        <th>Среда</th>
        <th>Четверг</th>
        <th>Пятница</th>
        <th>Суббота</th>
        <th>Воскресенье</th>
    </tr>'
;

echo 
"<table id='calendar' width='400' border='1' cellspacing='0' cellpadding='5'>
    <tr><td>
$c_head $c_body </td></tr>
</table>"
;

if(isset(
$_GET["ym"])){
    
$year  = (int)substr($_GET["ym"], 04);
    
$month = (int)substr($_GET["ym"]+142);
}
else {
    
$month date("m"mktime(0,0,0,date('m')+1,1,date('Y')));
    
$year  date("Y"mktime(0,0,0,date('m')+1,1,date('Y')));
}

$num_day mktime(0,0,0,$month,1,$year);
$skip date("w"$num_day) - 1;
if(
$skip 0$skip 6;

$c_head '';
$c_body '';
$day 1;

for(
$i 0$i 6$i++){
    
$c_body .= '<tr>';
    for(
$j 0$j 7$j++){
        if((
$skip 0)or($day date("t"$num_day))){
            
$c_body .= '<td class="none"> </td>';
            
$skip--;
        }
        else {
            if ((
$day<$period_next)&&(date(m)==$month-1)&&(date(Y)==$year)){
                
$c_body .= '<td class="today">'.$day.'</td>';
             }
            else 
$c_body .= '<td class="day">'.$day.'</td>';
            
$day++;
        }
    }
    
$c_body .= '</tr>';
}

$c_head '
    <tr>
        <th colspan="2"><a href="?ym='
.date("Ym"mktime(0,0,0,$month-1,1,$year)).'">« Пред</a></th>
        <th colspan="3">'
.date("F, Y"$num_day).'</th>
        <th colspan="2"><a href="?ym='
.date("Ym"mktime(0,0,0,$month+1,1,$year)).'">След »</a></th>
    </tr>
    <tr>
        <th>Понедельник</th>
        <th>Вторник</th>
        <th>Среда</th>
        <th>Четверг</th>
        <th>Пятница</th>
        <th>Суббота</th>
        <th>Воскресенье</th>
    </tr>'
;

echo 
"<table id='calendar' width='400' border='1' cellspacing='0' cellpadding='5'>
    <tr><td>
$c_head $c_body </td></tr>
</table>"
;
?>

Второй месяц добавил специально, т.к. если текущий месяц подходит к концу, значит промежуток для выбора дат должен переносится на следующий месяц.

Далее можно вылавливать клики по выделенным дням при помощи jQuery и отправлять информацию по данным кликам на сервер, где эти данные будут обрабатываться и сохраняться.
06.07.2014 18:03:14
Найти все сообщения Цитировать это сообщение
Странник Не на форуме
Рядовой
*

Сообщений: 4
У нас с: Jul 2014
Сообщение: #8
RE: Прошу помощи при написании календаря
Со вторым календарем замечательно, спасибо огромное.
Я думал при нажатии на определенный день недели будет высвечиваться окно, в котором будет показана выбранная дата, и слева в виде спойлера будет отображаться время, которое пользователь будет выбирать.
Попробую сам додумать, как это можно будет реализовать.
Спасибо большое за совет и помощь.
06.07.2014 18:38:45
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru