【问题标题】:Need help implementing an Orchard CMS Shape Method需要帮助实施果园 CMS 形状方法
【发布时间】:2023-04-01 07:21:01
【问题描述】:

我刚刚学习 Orchard CMS,在实现一个 shape 方法以返回一些任意文本而不创建一整套模型、驱动程序等时遇到了麻烦。

我正在尝试使用http://docs.orchardproject.net/Documentation/Accessing-and-rendering-shapes的代码

public class DateTimeShapes : IDependency {
private readonly IClock _clock;

public DateTimeShapes(IClock clock) {
    _clock = clock;
    T = NullLocalizer.Instance;
}

public Localizer T { get; set; }

[Shape]
public IHtmlString DateTimeRelative(HtmlHelper Html, DateTime dateTimeUtc) {
    var time = _clock.UtcNow - dateTimeUtc;

    if (time.TotalDays > 7)
        return Html.DateTime(dateTimeUtc, T("'on' MMM d yyyy 'at' h:mm tt"));
    if (time.TotalHours > 24)
        return T.Plural("1 day ago", "{0} days ago", time.Days);
    if (time.TotalMinutes > 60)
        return T.Plural("1 hour ago", "{0} hours ago", time.Hours);
    if (time.TotalSeconds > 60)
        return T.Plural("1 minute ago", "{0} minutes ago", time.Minutes);
    if (time.TotalSeconds > 10)
        return T.Plural("1 second ago", "{0} seconds ago", time.Seconds);

    return T("a moment ago");
}

但是,我不完全确定这应该去哪里。我已经尝试将它放在控制器和模型中,但结果不成功。

所以,我的问题是,这段代码应该放在哪里?从模板中调用它的正确方法是什么?

【问题讨论】:

    标签: c# orchardcms orchardcms-1.7


    【解决方案1】:

    您可以将此代码放在一个名为 Shapes.cs 或 DateTimeShapes.cs 的类中(不是必需的,但与 Orchard 的约定类似)

    然后你可以像这样在你的视图中使用它:

    @{
        var date = DateTime.Now;
    }
    
    @Display.DateTimeRelative(date)
    

    【讨论】:

    • 谢谢。我能够使用它来显示形状,但现在我遇到了另一个问题。我只是想使用查询来获取一些内容,但是当我做形状时需要一个视图,它会覆盖我试图返回的文本。 (我的最终目标是抓取该项目,然后从中显示一些文本,但我现在卡住了。)正如我所说,现有的形状方法可以正常工作。但是如果我添加这一行,它的行为如上所述: var items = _contentManager.Query().Where(t => t.Title.Contains("Orchard"));
    • 你应该把它放在一个新问题中
    • 好的,我会这样做的。 :)
    猜你喜欢
    • 2019-04-15
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2011-02-13
    相关资源
    最近更新 更多