Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 9

Автоматическое отключение checkbox'a

21.11.2010, 20:21. Показов 2415. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток) Столкнулся с одной проблемкой - есть сайт, на котором можно купить билеты на всякие концерты и события. Когда в админке создается новое событие, то там есть чекбокс "Добавить событие в слайдер". Проблема в том, что прошедшие события тоже отображаются в слайдере, т.е. нужно написать скрипт, который автоматически отключает чекбокс, если событие прошло. Я почти написал этот скрипт - сначала я сравниваю текущую дату и дату события, если дата события меньше текущей даты, то я отключаю чекбокс. Проблема в том, что я не могу понять как именно отключить чекбокс, вот код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$now = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
if ($dates == '') unset($dates);
else
{
$dates = explode ( "; ", $dates);
for ($j = 0, $jCount = count($dates); $j < $jCount; $j++)
{
$timestamp = mktime(0, 0, 0, substr($dates[$j], 3, 2), substr($dates[$j], 0, 2), substr($dates[$j], 6, 4));
if (($timestamp < $now) && get_post_meta(get_the_ID(), 'slider', true))
{
//Здесь нужно отключить чекбокс
}
}
}
?>
Выручайте)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.11.2010, 20:21
Ответы с готовыми решениями:

Автоматическое чекание другого checkboxa
Вот код &lt;input id=&quot;id1&quot;&gt;id1 &lt;input id=&quot;id1&quot;&gt;id1 jQuery('#id1').click(function checkf(){ if (jQuery('#id1').prop('checked',true)) ...

Автоматическое отключение кондиционера
Ребят вопрос такой, есть ли такие кондиционеры которые работают по принципу включил 18 градущсов и он их постоянно гонит 18 градусов и не...

Автоматическое отключение программы
Крч нужно сделать, такую фигню, что бы в 1 час ночи программа запускалась, а в 7 утра выключалась, помогите плиз.

17
 Аватар для nepster
61 / 61 / 11
Регистрация: 19.09.2009
Сообщений: 844
21.11.2010, 20:35
Я думаю стоит в этом месте вызвать ява скрипт который отключит чекбокс

вот нашел пример

[Ссылка удалена модератором!]
0
21.11.2010, 20:44
 Комментарий модератора 
nepster, Вы ведь не первый день на форуме и должны знать, что ссылки на сторонние форумы запрещены у нас!
1
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 9
21.11.2010, 20:56  [ТС]
Вот код слайдера
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<div class="eventSearch">
            <!--SLIDER-->
                          <?php
                       $now = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
                       if ($dates == '') unset($dates); 
                   else 
                   {
               $dates = explode ( "; ", $dates);
               for ($j = 0, $jCount = count($dates); $j < $jCount; $j++) 
                       {
                $timestamp = mktime(0, 0, 0, substr($dates[$j], 3, 2), substr($dates[$j], 0, 2), substr($dates[$j], 6, 4));
                if (($timestamp < $now) && get_post_meta(get_the_ID(), 'slider', true))
                            {
                    
                }
              }
                  }
                          ?>
            <?php
            $query = "meta_key=slider&meta_value=true";
            $my_query = new WP_Query($query);
            ?>
            <div class="mainSlider">
                <ul id="loadingPlace">
                    <?php
                        $i = 0;
                        while ($my_query->have_posts()) {
                            $my_query->the_post();
                            if (hasActualDate(get_post_meta(get_the_ID(), 'date', true)) == 1 && get_post_meta(get_the_ID(), 'slider', true)){
                            $i++;?>
                            <li <? echo "id='number$i' number='$i'"; echo $i != 1 ? ' style="display: none;"' : 'class="thisActive"'; ?>>
                                <a href="<?php the_permalink() ?>" title="Подробнее"><img src="<?php echo get_post_meta(get_the_ID(), 'photo_slider', true); ?>" alt="" /></a>
                                <div class="text">
                                    <a class="book" href="/shopping-cart/?task=addTicket&id=<? echo get_the_ID(); ?>">Заказать билет</a>
                                    <? the_title('<h4>', '</h4>', true); ?>
                                    <p><?php foreach((get_the_category()) as $category) {
                                        if ($category->parent != 0)
                                            echo "<a href='".get_category_link( $category->term_id )."'>".$category->cat_name;
                                        }?></a><br />
                                        <? echo getSoonDate(get_post_meta(get_the_ID(), 'date', true));
                                        ?></p>
                                </div>
                            </li><?php
                            }
                        }?>
                </ul><?
/*              if ($i > 1) {?>
                    <a class="prev" id="sliderPrev" count="<? echo $i; ?>"></a>
                    <a class="next" id="sliderNext"></a><? 
                }*/
                ?>
            </div>
Нельзя никак автоматическое отключение чекбокса реализовать с помощью php?
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
21.11.2010, 22:15
hasActualDate() - это функция, которая, судя по логике скрипта, определяет, актуальна ли еще дата события. Скорее всего, она работает неправильно.
Если найдете, где она определена - покажите.

P.S. Никаких чекбоксов здесь нет - скорее всего они в админке.
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 9
21.11.2010, 22:18  [ТС]
Вот эта функция
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function hasActualDate($dates, $calendar = null){
    $now = strtotime(date("d.m.Y"));
    $later = false;
    
    if ($calendar == null) {
        $calendar = $now;
        $later = true;
    }
    
    if ($dates == '') unset($dates); else $dates = explode ( "; " , $dates);
    if ($calendar == '') unset($calendar); else $calendar = explode ( "; " , $calendar);
 
    for ($j = 0, $jCount = count($dates); $j < $jCount; $j++) {
        $dates[$j] = strtotime(substr($dates[$j], 0, 10));
    }
    
    for ($i = 0, $iCount = count($calendar); $i < $iCount; $i++) {
        $calendar[$i] = strtotime($calendar[$i]);
        for ($j = 0, $jCount = count($dates); $j < $jCount; $j++) {
            if ((($dates[$j] >= $now) && ($calendar[$i] == $dates[$j]) && ($calendar[$i] >= $now)) || ($later && ($now <= $dates[$j]) )){
                return 1;
            }
        }
    }
    return 0;
}
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
21.11.2010, 22:44
Хм.. Код страшненький, но работает верно - проверил практически.
Остается вариант, что на сервере неправильная дата выставлена.. Это возможно?
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 9
21.11.2010, 22:48  [ТС]
Нет, я проверял серверное время. А нельзя никак реализовать следующее:
Если дата меньше текущей и значение чекбокса слайдера true, то мы берем и отключаем этот чекбокс?
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
21.11.2010, 22:57
Цитата Сообщение от [SVYAT
;1130042]то мы берем и отключаем этот чекбокс
Еще раз повторюсь, что чекбоксы все в админке. И скорее всего, значения чекбоксов хранятся в БД.
В вашем случае, логика такая же, но не чекбокс отключается, а вообще блок с описанием события блокируется. Если выделить из вашего кода условие, то выглядит это так:
PHP
1
2
3
4
if (hasActualDate(get_post_meta(get_the_ID(), 'date', true)) == 1 && get_post_meta(get_the_ID(), 'slider', true)) {
    // дата нормальная и чекбокс "показывать в слайдере" установлен
    // ... выводим блок события ...
}
Именно hasActualDate и сравнивает дату с текущей. Если текущая дата меньше даты события (событие еще предстоит) возвращается 1, иначе 0.

Добавлено через 1 минуту
Кстати, в каком формате даты на сайте?
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 9
21.11.2010, 23:22  [ТС]
Так принципиально, в каком формате дата на сайте?
У меня появилась идея! В слайдере идет проверка условия
PHP
1
 if (hasActualDate(get_post_meta(get_the_ID(), 'date', true)) == 1 && get_post_meta(get_the_ID(), 'slider', true))
Но нет оператора else после if'а. Я вот думаю - может, в else'е блокировать этот блок с событием? Как это лучше сделать?
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
21.11.2010, 23:30
Цитата Сообщение от [SVYAT
;1130144]в else'е блокировать этот блок с событием
Он и так блокируется.
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 9
21.11.2010, 23:45  [ТС]
Почему-то я в этом не уверен. Объясняю:у нас условие - если дата актуальная и чекбокс слайдера включен, то мы выводим на слайдер картинку, дату и т.д. А если одно из этих условий не выполняется? Суть проблемы в том, что в слайдере отображаются прошедшие события. При более подробном изучении структуры событий выяснилось, что у всех прошедших событий, которые отображаются в слайдере, стоит галочка "В слайдер". И отсюда два, на мой взгляд, приемлимых варианта решения - либо автоматически отключать чекбокс если дата прошла, либо попробовать с помощью else заблокировать появление события в слайдере, если у него не актуальна дата и включен чекбокс "В Слайдер".
Мне кажется, проще попробовать с помощью else, но что там писать - я не могу сообразить. Поможете?

Добавлено через 3 минуты
И можно ли реализовать отключение чекбокса, если у меня полный доступ ко всему сайту?
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
21.11.2010, 23:55
Короче, в данный момент логика такая:

Code
1
2
3
4
5
6
7
Для всех событий
{
    if (дата актуальная И чекбокс включен)
    {
        Выводим блок с событием
    }
}
Если хотя бы одно из условий внутри if(...) не выполняется, то блок НЕ выводится.

Добавлено через 4 минуты
Боюсь, что если вы не выложите более подробный пример (с определением функций типа get_post_meta, get_the_ID и пр.), то мы не сможем помочь.

Добавлено через 1 минуту
Цитата Сообщение от [SVYAT
;1130187]И можно ли реализовать отключение чекбокса, если у меня полный доступ ко всему сайту?
Можно, конечно. Узнайте, где хранятся значения чекбоксов.
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 9
22.11.2010, 00:08  [ТС]
get_post_meta это вывод произвольного поля custom fields в WordPress шаблоне
get_post_meta($post_id, $key, $single)
Переменные здесь обозначают:
* post_id - ID поста, из которого берутся произвольные поля. Чаще всего использует значение текущей статьи, поэтому параметр равен $post->ID.
* key - имя произвольного поля.
* single - установлен в true, если требуется вывести единичный результат в виде строки. Значение false используется для отображения всего массива данных с произвольными полями.

get_the_ID это получение ID. Какие примеры вы хотите?

Как узнать где хранятся значения чекбоксов? Есть ли какие-то функции или стандарты? Я предлагаю попробовать все-таки заняться отключением чекбоксов - мне кажется, так будет правильней.
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
22.11.2010, 09:37
Я не работал с WordPress, но по поводу функций я примерно так себе и представлял их назначение.

Где WordPress хранит значения чекбоксов - я не в курсе.

Последнее, за что я могу зацепиться, это в каком формате выдается дата этой конструкцией:
PHP
1
get_post_meta(get_the_ID(), 'date', true)
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 9
22.11.2010, 12:16  [ТС]
25.11.2010 21:00
Вот что выдается этой конструкцией
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
23.11.2010, 08:48
Могу предложить обойти необходимость использования hasActualDate и заменить ее на свой аналог.
Вместо кода <div class="mainSlider">...</div> вставить такой:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<div class="mainSlider">
    <ul id="loadingPlace">
        <?php
            $i = 0;
            while ($my_query->have_posts()) {
                $my_query->the_post();
                
                $evt_date = strtotime(substr(get_post_meta(get_the_ID(), 'date', true), 0, 10));
                $now_date = strtotime(date('d.m.Y'));
                
                if ($evt_date >= $now_date && get_post_meta(get_the_ID(), 'slider', true)){
                    $i++; ?>
                    <li <? echo "id='number$i' number='$i'"; echo $i != 1 ? ' style="display: none;"' : 'class="thisActive"'; ?>>
                        <a href="<?php the_permalink() ?>" title="Подробнее"><img src="<?php echo get_post_meta(get_the_ID(), 'photo_slider', true); ?>" alt="" /></a>
                        <div class="text">
                            <a class="book" href="/shopping-cart/?task=addTicket&id=<? echo get_the_ID(); ?>">Заказать билет</a>
                            <? the_title('<h4>', '</h4>', true); ?>
                            <p>
                                <?php foreach((get_the_category()) as $category) {
                                    if ($category->parent != 0)
                                        echo "<a href='".get_category_link( $category->term_id )."'>".$category->cat_name.'</a>';
                                } ?>
                                <br />
                                <? echo getSoonDate(get_post_meta(get_the_ID(), 'date', true)); ?>
                            </p>
                        </div>
                    </li>
                <?php
                }
            }
        ?>
    </ul>
</div>
0
0 / 0 / 0
Регистрация: 21.11.2010
Сообщений: 9
24.11.2010, 08:37  [ТС]
Код хороший, но, увы, на практике не работает. События все равно отображаются в слайдере.
Я узнал что нужно делать - работать с Custom Field, произвольные поля. Это можно сделать с помощью jQuery метода attr() так : $('slider').attr('checked', false);
Как вызвать этот метод в index.php? Нужно создать файл с расширением .js, а потом обратиться к этому файлу в index.php? Или можно напрямую впихнуть этот метод в index.php?
Напишите подробно, пожалуйста, я не могу понять как подключить скрипт.

Добавлено через 18 часов 42 минуты
Итак, я разобрался в чем соль. Функция HasActualDate не работает. Я создал на сайте пробное событие, сначала сделал это пробное событие прошедшим - HasActualDate возвращала 1. Потом я сделал это событие будущим - функция опять вернула такой же результат. И я, позаморачивавшись несколько дней с чекбоксами, понял что проще будет написать новую функцию, привожу полный код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<div class="mainSlider">
                <ul id="loadingPlace">
                    <?php
                        $i = 0;
                        while ($my_query->have_posts()) {
                            $my_query->the_post();
    /*Начало написанной функции. Логика, думаю, понятно, но поясню
разбиваем текущую дату и дату события на 2 части (текущее время и текущие число.месяц.год, потом делим время на часы,минуты,секунды и число,месяц,год. Затем обе даты переводим в метки времени Unix с помощью mktime и считаем разницу между датами. 86400 это количество секунд в дне, т.е. я работаю с днями. Затем ставим условие - если количество дней между датами >=0, то выполняем вывод на слайдер.*/  
  $date1 = date("d.m.y H:i:s");
  $date2 = get_post_meta(get_the_ID(), 'date', true);
  $arr1 = explode(" ", $date1);
  $arr2 = explode(" ", $date2);  
  $arrdate1 = explode(".", $arr1[0]);
  $arrdate2 = explode(".", $arr2[0]);
  $arrtime1 = explode(":", $arr1[1]);
  $arrtime2 = explode(":", $arr2[1]);
  $timestamp2 = (mktime($arrtime2[0], $arrtime2[1], 0, $arrdate2[1],  $arrdate2[0],  $arrdate2[2]));
  $timestamp1 = (mktime($arrtime1[0], $arrtime1[1], 0, $arrdate1[1],  $arrdate1[0],  $arrdate1[2]));
  $difference = floor(($timestamp2 - $timestamp1)/86400);
 
                            if ($difference >= 0 && get_post_meta(get_the_ID(), 'slider', true)){
                            $i++;?>
                            <li <? echo "id='number$i' number='$i'"; echo $i != 1 ? ' style="display: none;"' : 'class="thisActive"'; ?>>
                                <a href="<?php the_permalink() ?>" title="Подробнее"><img src="<?php echo get_post_meta(get_the_ID(), 'photo_slider', true); ?>" alt="" /></a>
                                <div class="text">
                                    <a class="book" href="/shopping-cart/?task=addTicket&id=<? echo get_the_ID(); ?>">Заказать билет</a>
                                    <? the_title('<h4>', '</h4>', true); ?>
                                    <p><?php foreach((get_the_category()) as $category) {
                                        if ($category->parent != 0)
                                            echo "<a href='".get_category_link( $category->term_id )."'>".$category->cat_name;
                                        }?></a><br />
                                        <? echo getSoonDate(get_post_meta(get_the_ID(), 'date', true)); ?>
                                        <br/>
                                        </p>
                                </div>
                            </li><?php
                            }
                        }?>
                </ul><?
/*              if ($i > 1) {?>
                    <a class="prev" id="sliderPrev" count="<? echo $i; ?>"></a>
                    <a class="next" id="sliderNext"></a><? 
                }*/
                ?>
            </div>
Этот метод применил и в остальных случаях, там косячил не только слайдер, но и разел "Популярные" и "Топ". Все оказалось намного проще отключения чекбоксов.
Спасибо тем, кто пытался мне помочь. Дай вам Бог легкой отладки и побольше халявы :-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.11.2010, 08:37
Помогаю со студенческими работами здесь

Автоматическое отключение компьютера
Здравствуйте, друзья! Очень прошу Вашей помощи. На днях по-неосторожности пролил немного чая в системный блок через верхний кулер. Кулер,...

Автоматическое отключение LAN соединения
Всем добрый день! Скажите пожалуйста как можно осуществить автоматическое отключение LAN соединения? Нужно допустим что бы оно в 8 вечера...

Автоматическое отключение ноутбука после включения
Добрый вечер! Ноутбук был пролит (клиентом) говорит чаем, а труханит пивом, я всё прочистил спиртом и дест. водой. Из за облитого чипа...

Автоматическое отключение тачпада при подключении мыши
Возможно ли реализовать то, что описано в заголовке. Ноутбук Lenovo ideapad y580 - версия Synaptics не поддерживает автоматическое...

Автоматическое отключение питание внешнего жёсткого диска
Имеется ноутбук Asus N61JV и внешний жёсткий диск Seagate STAA1000201. При простое (когда не используется) внешний жёсткий диск постоянно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru