Как мне реализовать Disqus в ASP.NET MVC? - PullRequest
8 голосов
/ 19 января 2011

Я нахожусь в процессе определения компромиссов компоновки / покупки для общедоступного веб-сайта и достиг довольно интересного пути.

Фон

Частью дизайна веб-сайта является включение комментариев против набора различных «элементов», которые, очевидно, имеют свои собственные идентификаторы. (т. е. / рецепты / 23 или оборудование / 16 и т. д., и т. д.).

Изначально я указал систему комментариев с тегами. Тем не менее, спонсор проекта вернулся и спросил, будет ли легко включить Disqus в свой микс. Я использовал это раньше с Joomla (никогда в .NET) и думаю, что это будет отличная идея, так как комментарии автоматически распределяются через обычные социальные сети по умолчанию.

Вопрос

Достаточно ли безболезненно настроить реализацию Disqus на ASP.NET MVC, которая работает без проблем? Существуют ли учебники или примеры работающего решения Disqus в ASP.NET MVC? Я видел этот пример и прочитал документацию .

Ответы [ 4 ]

15 голосов
/ 25 мая 2011

Очевидно, что есть замечательный пакет nuget для Disqus.

Install-Package Disqus.Helper

И тогда это так же просто, как прикрепить это к вашему виду, разделу или частичному виду где-то ...

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

http://disqusforwebpages.codeplex.com/documentation

6 голосов
/ 19 января 2011

Я предпочитаю использовать асинхронный подход к загрузке 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>

Это все, что нужноэто.

3 голосов
/ 19 января 2011

Если у вас все в порядке с фирменным знаком disqus, вызов API javascript - это путь. Если вам нужна более глубокая интеграция - или вам нужно, чтобы ваши комментарии оставались на вашем сайте - вы можете проверить небольшую библиотеку, которую я написал, под названием disqussharp - ее довольно полная обертка вокруг версии 1.1 API disqus и может использоваться для многих вещей.

2 голосов
/ 15 февраля 2011

Вот несколько методов расширения, которые нацелены как на 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") %>

наслаждайтесь ...

...