8

我正在为一个公共网站指定构建/购买权衡,并找到了一个相当有趣的途径。

背景

网站设计的一部分是结合对一组不同的“项目”的评论,这些“项目”显然有自己的 ID。(即 /recipes/23 或设备/16 等)。

最初,我指定了一个带有标签的评论系统。但是,项目发起人回来询问是否可以轻松地将 Disqus 纳入组合中。我以前在 Joomla 中使用过它(从未在 .NET 中使用过),并认为这将是一个好主意,因为默认情况下,评论会通过通常的社交网络媒体自动分发。

问题

在无缝运行的 ASP.NET MVC 上设置 Disqus 的实现是否相当轻松?ASP.NET MVC 中是否有可用的 Disqus 解决方案的教程或示例?到目前为止,我已经看过这个例子阅读了文档。

4

4 回答 4

16

显然,Disqus 有一个很棒的 nuget 包。

Install-Package Disqus.Helper

然后就像将其粘贴在您的视图、部分或局部视图中一样简单......

@Disqus {
     Disqus.Initialize("YourForumShortName")
}
@Discus.ShowComments("PageIdentifierOfYourChoice")

http://disqusforwebpages.codeplex.com/documentation

于 2011-05-25T14:19:59.623 回答
6

我选择使用异步 JavaScript 加载方法(而不是使用成熟的 API 方法)。这是在 ASPNET MVC 中使用它的简单程度(它也适用于 ASP.NET):

文档中

<!-- add the div to receive the comments via ajax -->
<div id="disqus_thread"></div>

<!-- the required javascript link to disqus -->
<script type="text/javascript">
    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
    var disqus_shortname = 'mydisqusname';

    // Question pour XWiki : ici il faut que je configure un identifier
    // c'est comme un sujet de Mail. Il faudrait que je mette par exemple
    // l'url de la page XWiki afin que les commentaires soient regroupes

    // ensemble par article. Bref est ce que vous pouvez me mettre un ID ?

    var disqus_identifier = 'comments-league-<%= Html.Encode(Model.ID) %>';
    var disqus_url = '<%= HttpContext.Current.Request.Url %>';
    // using disqus_developer = 1 helps to debug to localhost etc..
    var disqus_developer = 1;


    /* * * DON'T EDIT BELOW THIS LINE * * */
    (function() {
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';

        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
</script>

这里的所有都是它的。

于 2011-01-19T12:59:53.603 回答
3

如果您对 disqus 品牌感到满意,那么 javascript API 调用就是您的最佳选择。如果你需要更深入的集成——或者需要做一些事情,比如确保你的评论留在你的网站上——你可能想看看我写的叫做disqussharp的小库——它是 v 1.1 的一个相当完整的包装器disqus API,可用于很多事情。

于 2011-01-19T14:46:28.340 回答
2

下面是一些针对 Disqus 和 IntenseDebate 的扩展方法:

首先,Disqus 助手(向 PieterG 致敬):

/// <summary>
/// Display Comments for Post
/// </summary>
/// <param name="html"></param>
/// <param name="postIdentifier"></param>
/// <returns></returns>
public static MvcHtmlString DisqusScript(this HtmlHelper html, string postIdentifier)
{
    var commentsBuilder = new StringBuilder();
    var id = Config.DisqusId; // get the Disqus id from config file
    var devMode = Config.DevMode; // get the devmode ('0' or '1') from config file

    commentsBuilder.Append("<div id=\"disqus_thread\"></div>");

    commentsBuilder.Append("<script type=\"text/javascript\">");
    commentsBuilder.Append("var disqus_shortname = '" + id + "';");
    commentsBuilder.Append("var disqus_identifier = '" + postIdentifier + "';");
    commentsBuilder.Append("var disqus_url = '" + HttpContext.Current.Request.Url + "';");
    commentsBuilder.Append("var disqus_developer = '" + devMode + "';");

    /* * * DON'T EDIT BELOW THIS LINE * * */
    commentsBuilder.Append("(function () {");
    commentsBuilder.Append("var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;");
    commentsBuilder.Append("dsq.src = 'http://" + id + ".disqus.com/embed.js';");

    commentsBuilder.Append("(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);");
    commentsBuilder.Append("})();");
    commentsBuilder.Append("</script>");

    commentsBuilder.Append("<noscript>");
    commentsBuilder.Append("Please enable JavaScript to view the <a href=\"http://disqus.com/?ref_noscript\">comments");
    commentsBuilder.Append("powered by Disqus.</a>");
    commentsBuilder.Append("</noscript>");
    return MvcHtmlString.Create(commentsBuilder.ToString());
}

然后是激烈的辩论版本:

/// <summary>
/// Display Comments for Post
/// </summary>
/// <param name="html"></param>
/// <param name="postIdentifier"></param>
/// <returns></returns>
public static MvcHtmlString IntenseDebateScript(this HtmlHelper html, string postIdentifier)
{
    var commentsBuilder = new StringBuilder();
    var id = Config.IntenseDebateId; // get the IntenseDebate id from config file

    // js variables for embedded wrapper script
    commentsBuilder.Append("<script type=\"text/javascript\">");
    commentsBuilder.Append("var idcomments_acct = '" + id + "';");
    commentsBuilder.Append("var idcomments_post_id = '" + postIdentifier + "';");
    commentsBuilder.Append("var idcomments_post_url = '" + HttpContext.Current.Request.Url + "';");
    commentsBuilder.Append("</script>");

    /* * * DON'T EDIT BELOW THIS LINE * * */
    commentsBuilder.Append("<script type=\"text/javascript\" ");
    commentsBuilder.Append("src = 'http://www.intensedebate.com/js/genericCommentWrapperV2.js'>");
    commentsBuilder.Append("</script>");

    // add the target span for the comments
    commentsBuilder.Append("<span id='IDCommentsPostTitle' style='display:none'></span>");

    commentsBuilder.Append("<noscript>");
    commentsBuilder.Append("Please enable JavaScript to view the IntenseDebate comments");
    commentsBuilder.Append("</noscript>");
    return MvcHtmlString.Create(commentsBuilder.ToString());
}

两种情况下的用法:

// for intensedebate
<%=Html.IntenseDebateScript("comments-id-that-i-can-use") %>

//and for disqus
<%=Html.DisqusScript("another-comments-id-that-i-can-use") %>

请享用...

于 2011-02-15T10:37:19.773 回答