2

我已经构建了一个解决方案,其中包含多个母版页/页面布局作为一组 SharePoint 2010 发布网站集的功能。

一个一致的要求是能够获取页面所有者联系电子邮件并将其显示在母版页的页脚中。如果没有输入联系电子邮件页面,那么我需要从人员选取器中获取页面所有者数据,并从中获取联系电子邮件。

我不想将每个发布页面布局都添加到我的解决方案中,并手动将联系人电子邮件列添加到占位符中,这对我来说似乎很疯狂。我认为必须有一种方法可以从母版页中获取页面所有者数据,但我无法弄清楚。我开始查看 jQuery SPServices 库,但到目前为止我也无法弄清楚。

有没有人有使用 Masterpage 中提供的页面所有者联系信息添加联系电子邮件的经验?

4

1 回答 1

0

好的,为了解决这个问题,您需要在您的站点上安装 jQuery 1.7.x+ 和SPServices jQuery 库版本 0.7.2 或更高版本。

使用GetListItems作为来自 SPServices 的操作。

我在 Pages 目录中搜索页面,所以 listName 是“Pages”。

CAML 视图字段基本上是 PublishingContactEmail 和 PublishingContact 的列。我发现那些使用u2u 的 CAML builder 版本 4.0.0.0

ows_ 变量可以在 firebug 的 POST 对象的 xml 视图中找到。

ows_PublishingContact 返回联系人信息的长字符串。幸运的是,电子邮件地址被 包围,#,这使得将其拆分为一个数组,然后搜索电子邮件 @ 很容易,但这就是存在的原因。

function get_page_contact_email() {    
    var thisPageID = _spPageContextInfo.pageItemId;    
    var e;    
    $().SPServices({    
        operation: "GetListItems",    
        async: false,    
        listName: "Pages",    
        CAMLViewFields: "<ViewFields><FieldRef Name='PublishingContactEmail' /><FieldRef Name='PublishingContact' /></ViewFields>",    
        CAMLQueryOptions: "<QueryOptions><ExpandUserField>True</ExpandUserField></QueryOptions>",    
        completefunc: function (xData, Status) {    
            $(xData.responseXML).SPFilterNode("z:row").each(function () {    
                if (thisPageID == $(this).attr("ows_ID")) {    
                    if ($(this).attr("ows_PublishingContactEmail")) { // if page email is set    
                        e = $(this).attr("ows_PublishingContactEmail");    
                    } else if ($(this).attr("ows_PublishingContact")) { //otherwise use contact info    
                        var contact = $(this).attr("ows_PublishingContact").split(",#");    
                        for (var c = 0; c < contact.length; c++) {    
                            if (contact[c].indexOf("@") != -1) {    
                                e = contact[c];    
                            }    
                        }    
                    } else { //or nothing is set.    
                        e = false;    
                    }    
                }    
            });    
        }    
    });    
    return e;    
}
于 2012-12-03T10:21:18.740 回答