Как функциональность в пользовательской странице aspx sharepoint - PullRequest
0 голосов
/ 03 мая 2018

Я хочу включить функцию «Мне нравится» (например, количество лайков) на пользовательской странице «aspx», созданной на сайте SharePoint. Ниже приведен код jQuery для похожих функций, которые я нашел.

var likepage = {
    //Likes the current page. 
    LikePage: function () {
        likepage.getUserLikedPage(function(likedPage, likeCount) {

            var aContextObject = new SP.ClientContext();
            EnsureScriptFunc('reputation.js', 'Microsoft.Office.Server.ReputationModel.Reputation', function() {
                Microsoft.Office.Server.ReputationModel.
                    Reputation.setLike(aContextObject,
                        _spPageContextInfo.pageListId.substring(1, 37),
                        _spPageContextInfo.pageItemId, !likedPage);

                aContextObject.executeQueryAsync(
                    function() {
                        var elements = document.getElementsByClassName('likecount');
                        if (likedPage) {
                            likeCount--;
                        } else {
                            likeCount++;
                        }
                        for (var i = 0; i < elements.length;i++) {
                            elements[i].innerHTML = likeCount;
                        }
                    }, function(sender, args) {
                        // Custom error handling if needed

                    });
            });
        });

    },
    // Checks if the user already liked the page, and returns the number of likes. 
    getUserLikedPage: function (cb) {
        var context = new SP.ClientContext(_spPageContextInfo.webServerRelativeUrl);
        var list = context.get_web().get_lists().getById(_spPageContextInfo.pageListId);
        var item = list.getItemById(_spPageContextInfo.pageItemId);

        context.load(item, "LikedBy", "ID", "LikesCount");
        context.executeQueryAsync(Function.createDelegate(this, function (success) {
            // Check if the user id of the current users is in the collection LikedBy. 
            var $v_0 = item.get_item('LikedBy');
            if (!SP.ScriptHelpers.isNullOrUndefined($v_0)) {
                for (var $v_1 = 0, $v_2 = $v_0.length; $v_1 < $v_2; $v_1++) {
                    var $v_3 = $v_0[$v_1];
                    if ($v_3.$1E_1 === _spPageContextInfo.userId) {
                        cb(true, item.get_item('LikesCount'));
                    }
                }
            }
            cb(false, item.get_item('LikesCount'));
        }),
            Function.createDelegate(this, function (sender, args) { 
            //Custom error handling if needed 
            }));
    },
    initialize: function () {
        var elements = document.getElementsByClassName('likecount');
        likepage.getUserLikedPage(function(likedPage, likesCount) {
            for (var i = 0; i < elements.length; i++) {
                elements[i].innerHTML = likesCount;
            }
        });
    }
};
_spBodyOnLoadFunctionNames.push("likepage.initialize");

Проблема в том, что я получаю сообщение об ошибке в следующей строке:

var context = new SP.ClientContext(_spPageContextInfo.webServerRelativeUrl);

Это дает мне следующую ошибку:

_spPageContextInfo не определено

После некоторых поисков я обнаружил, что некоторые библиотеки необходимо импортировать. Поэтому я импортировал следующие библиотеки.

<SharePoint:ScriptLink Name="MicrosoftAjax.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.core.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.runtime.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:FormDigest ID="FormDigest1" runat="server"></SharePoint:FormDigest>

Даже после загрузки я получаю ошибку выше. Какие могут быть возможные причины? Любая помощь будет заметна.

1 Ответ

0 голосов
/ 04 мая 2018

Пример кода ниже для вашей справки:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@ Page Language="C#" %>
<%@ Register tagprefix="SharePoint" namespace="Microsoft.SharePoint.WebControls" assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">

<head runat="server">
<meta name="WebPartPageExpansion" content="full" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<SharePoint:CssRegistration Name="default" runat="server"/>

<SharePoint:ScriptLink Name="MicrosoftAjax.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.core.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:ScriptLink Name="SP.runtime.js" runat="server" Defer="False" Localizable="false"/>
<SharePoint:FormDigest ID="FormDigest1" runat="server"></SharePoint:FormDigest>

<script type="text/javascript" src="//code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(function() {
    alert(_spPageContextInfo.webServerRelativeUrl);
});
</script>

</head>
<body>

<form id="form1" runat="server">
</form>

</body>

</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...