【问题标题】:How can I prevent the user from selecting a date before today in the Joomla Calendar field?如何防止用户在 Joomla 日历字段中选择今天之前的日期?
【发布时间】:2013-02-12 19:20:52
【问题描述】:

我想在组件adsmanger的搜索模块中自定义Joomla的日历字段,基本上是我想要的:

  • 防止用户选择今天之前的日期。
  • 防止用户在字段中输入,他只能使用日历选择日期。
  • 将当前日期设置为默认值

这里是组件中日历字段的生成部分:

<?php
case 'date':

            $options = array();
            $options['size'] = 16;
            $options['maxlength'] = 16;
            if ($field->required == 1) {
                $options['class'] = 'adsmanager_required';
                $options['mosReq'] = '1';
                $options['mosLabel'] = "$strtitle";
            }
            else 
            {
                $options['class'] = 'adsmanager';
            }
            $return .= JHTML::_('behavior.calendar');
            if ($value != "") {
                if (function_exists("strptime")) {
                    $a = strptime($value, JText::_('ADSMANAGER_DATE_FORMAT_LC'));
                    $timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
                } else {
                    $timestamp = strtotime($value);
                }
                if ($timestamp != null)
                    $value = date("Y-m-d",$timestamp);
                else
                    $value = "";
            }
            $return .=  JHTML::_('calendar', $value, "$field->name", "$field->name", JText::_('ADSMANAGER_DATE_FORMAT_LC'), $options); ?>

【问题讨论】:

    标签: date joomla calendar field


    【解决方案1】:

    日历实际上并没有办法完全按照您开箱即用的方式执行。不过,有一些方法可以让你更接近。

    包含的方法是设置可用年份,至少可以保留在今年。

    Calendar.setRange(2013, 2020);
    

    在 javascript 函数中还有一种方法可以添加 onUpdate 处理程序,您可以使用它来编写自己的比较函数来将日期限制为今天和以后。然而,在 Joomla 中似乎没有一个好方法可以将函数传递到这个位置,因为它应该是 Calendar.setup() 调用的一部分。生成 javascript 的代码位于第 880 行的 libraries/joomla/html/html.php

    【讨论】:

    • 谢谢你的回答,我找到了那行,但我的网站是关于拼车的,我不想让用户选择过去的日期,那么禁用在字段,还有关于默认值?谢谢
    • 这些都是可能的选择。我相当有信心 Joomla 没有内置的方法来做你想做的事,所以你面前可能有一些重要的编码(如果我有什么东西,我会发布它)。您可能想要考虑尝试不同的日历弹出窗口(您可能想要查看 Joomla here 附带的日历的更新和商业版本),或者可以尝试编写自己的 Javascript 函数来解析结果,或者当日历关闭或保存时。
    • 再次感谢您,我会试一试,但您知道我不是 JS 开发人员,我认为可以使用 PHP 修复它...
    • 你可以用 PHP 修复它,但它不会那么好。您也可以在他们提交表单后进行检查,以检查日期是否有效(即今天之后),如果没有则将他们踢回表单页面。 (如果使用标准模型保存功能,return false 应该为您完成大部分工作。)但是,这可能会让用户感到沮丧。老实说,无论如何你都应该这样做,以防 JS 被禁用或失败......
    • 你可以编写一个自定义规则来检查 now()。然后使用 AddPathRule 添加规则。编写该代码一点也不难。
    猜你喜欢
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2021-02-28
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多