设置自定义发布日期,但如果它为空,则立即发布

时间:2017-03-30 12:29:22

标签: umbraco umbraco7

我正在尝试制作自定义发布日期,因为用户希望将其用作发布日期和排序。日期也将显示在页面上。

这就是我想要的:

  1. 用户可以输入日期
  2. 日期可以为空(意味着它将立即发布)
  3. 必须使用该日期进行排序
  4. 日期必须设置为UTC时间,因此对于世界上的每个人来说都是相同的
  5. 我很绝望,我无法弄清楚如何做到这一点。

    这是我到目前为止所尝试的内容:我找到了一个整洁的小插件,它显示用户在输入字段旁边的当前UTC时间,因此该人知道他们的UTC时间。我将其修改为始终在输入字段中输入当前日期:

    var timer = setInterval(function () {
        var date = $(".custom-date").val();
        if (date === "") {
            $(".custom-date").focus();
            $(".custom-date").click();
            $(".custom-date").trigger("click");
            //the date has now been set on the input field
        } else if (date !== "") {
            var newDate = new Date(date);
            var stringDate = newDate.getFullYear() + "-" + ('0' + (newDate.getMonth() + 1)).slice(-2) + "-" + ('0' + (newDate.getDate() - 1)).slice(-2) + " " + ('0' + (newDate.getHours() - offset)).slice(-2) + ":" + ('0' + newDate.getMinutes()).slice(-2) + ":" + ('0' + newDate.getSeconds()).slice(-2);
            $(".custom-date").val(stringDate);
            angular.element(".custom-date").scope().$apply(function () {
                angular.element(".custom-date").scope().datetimePickerValue = stringDate;
            });
            clearInterval(timer);
        }
    }, 1000);
    

    是的,这看起来很多......不,它不起作用。我在元素上执行焦点/单击/触发,因为这会自动将时间设置为用户的本地时间。然后我将其转换为UTC时间(偏移量是UTC时间偏移量)。然后我将日期应用到元素的范围,并在$ scope和视图中更新值(我实际上可以看到它)。

    但是,当我点击保存并发布时,日期会被重置(数据库中的日期为空)。只有当我实际点击输入字段并选择新日期时才会实际更新它。我喜欢这种方法,因为我100%控制它,所以它可能吗?似乎在范围上设置新日期并不会触发实际的"新日期已被选中"。

    或者我在这里有我的Razor代码:

    //selection is all my elements/nodes
    selection.OrderByDescending(x => x.GetProperty("publishDate") != null).ThenByDescending(x => x.GetPropertyValue("publishDate")).Where(x => x.GetPropertyValue<DateTime>("publishDate") < DateTime.UtcNow);
    

1 个答案:

答案 0 :(得分:0)

显然在Angular事件被触发之前,我需要至少称之为:

$(".custom-date").trigger("click");
$(".custom-date").change();

所以我在设定新约会后就这样做了,现在它正常运作。