Webiant Logo Webiant Logo
  1. No results found.

    Try your search with a different keyword or use * as a wildcard.

TopicDetails.cshtml

@model TopicModel

@using Nop.Core
@using Nop.Core.Domain.Seo
@using Nop.Core.Domain.Topics

@inject IWebHelper webHelper
@inject SeoSettings seoSettings

@{
    var isPopup = ViewBag.IsPopup ?? false;

    if (!isPopup)
    {
        Layout = "_ColumnsOne";
    }

    if (!Model.IsPasswordProtected)
    {
        //title
        NopHtml.AddTitleParts(!string.IsNullOrEmpty(Model.MetaTitle) ? Model.MetaTitle : Model.Title);
        //meta
        NopHtml.AddMetaDescriptionParts(Model.MetaDescription);
        NopHtml.AddMetaKeywordParts(Model.MetaKeywords);
    }

    if (seoSettings.CanonicalUrlsEnabled)
    {
        var topicUrl = (await NopUrl.RouteGenericUrlAsync<Topic>(new { SeName = Model.SeName }, webHelper.GetCurrentRequestProtocol())).ToLowerInvariant();
        NopHtml.AddCanonicalUrlParts(topicUrl, seoSettings.QueryStringInCanonicalUrlsEnabled);
    }

    //page class
    NopHtml.AppendPageCssClassParts("html-topic-page");
}
@if (Model.IsPasswordProtected)
{
    <script asp-location="Footer">
        $(function() {
            $('#button-password').on('click', function () {
                var postData = {
                    id: $("#topic-@Model.Id").val(),
                    password: $('#password').val()
                };
                addAntiForgeryToken(postData);

                $.ajax({
                    cache: false,
                    type: "POST",
                    url: "@Url.RouteUrl(NopRouteNames.Ajax.TOPIC_AUTHENTICATE)",
                    data: postData,
                    dataType: "json",
                    success: function (data, textStatus, jqXHR) {
                        if (data.Authenticated) {
                            $('#ph-topic #ph-title h1').html(data.Title);
                            if ($('#ph-topic #ph-title h1').text().length == 0) {
                                $('#ph-title').hide();
                            }
                            $('#ph-topic .page-body').html(data.Body);
                            $('#ph-password').hide();
                            $('#ph-topic').show();
                            //we need to re-run the validation plugin after the content is loaded after successful authentication
                            $.validator.unobtrusive.parse('#ph-topic');
                        }
                        else {
                            $('#password-error').text(data.Error).fadeIn("slow");
                            $('#ph-password #password').select().focus();
                        }
                    }
                });
                return false;
            });
        });

        $(function() {
            $('#ph-topic').hide();
            $('#ph-password #password').select().focus();
        });
    </script>
    <div class="topic-password" id="ph-password">
        <form asp-route="@NopRouteNames.Ajax.TOPIC_AUTHENTICATE" method="post" autocomplete="off">
            <input asp-for="Id" id="topic-@Model.Id" type="hidden" />
            <label for="password" class="enter-password-title">
                @T("Topic.EnterPassword")
            </label>
            <div class="enter-password-form">
                <input name="password" id="password" type="password" />
                <button type="submit" id="button-password" class="button-1 topic-password-button">@T("Topic.Button")</button>
            </div>
            <div class="password-error" id="password-error" style="display: none;"></div>
        </form>
    </div>
}
<div class="page topic-page" id="ph-topic">
    @await Component.InvokeAsync(typeof(WidgetViewComponent), new { widgetZone = PublicWidgetZones.CustomerTopicDetailsTop, additionalData = Model })
    <div class="page-title" id="ph-title">
        <h1>@Model.Title</h1>
    </div>
    <div class="page-body">
        @Html.Raw(Model.Body)
    </div>
    @await Component.InvokeAsync(typeof(WidgetViewComponent), new { widgetZone = PublicWidgetZones.CustomerTopicDetailsBottom, additionalData = Model })
</div>