클라이언트 OM (JS)에 의한 변형의 근본을 얻는 방법?
-
10-12-2019 - |
문제
홈 하위 사이트, 정보, 연락처와 같은 "주 사이트"(사이트 모음의 근원이 아님)에 하위 사이트가 있다고 가정 해보십시오."주요 사이트"는 실제로 다른 사이트의 언어 변형입니다.또 다른 단어에서는이 같은 구조를 가지고 있습니다
- http://mysite -> this is root SPWeb
- http://mysite/de-de -> this is "root variation"
- http://mysite/de-de/Lists/myList -> list I'd like to get
- http://mysite/de-de/Home/History -> sub-site in de-de variation from where I'd like to get "myList"
.
내가하고 싶은 것은 다음과 같은 것
var rootOfVarSPWeb = SP.ClientContext.get_current().get_web().get_rootOfVariation()
//get the list
//do other stuff in root of variation
.
편집 : 질문은 SharePoint 2013입니다.
해결책
It actually depends what version of SharePoint is used.
How to retrieve Variation Labels via CSOM?
Since variations labels are stored in a Hidden List (MOSS 2007, SPS 2010/2013) we could retrieve it via CSOM (ECMAScript) as demonstrated below:
function getVaritationLabels(OnSuccess,OnError){
var ctx = SP.ClientContext.get_current();
var rootWeb = ctx.get_site().get_rootWeb();
var webProperties = rootWeb.get_allProperties();
ctx.load(rootWeb);
ctx.load(webProperties);
ctx.executeQueryAsync(
function() {
var varLabelsListId = webProperties.get_item('_VarLabelsListId');
var labelsList = rootWeb.get_lists().getById(varLabelsListId);
var labelItems = labelsList.getItems(SP.CamlQuery.createAllItemsQuery());
ctx.load(labelItems);
ctx.executeQueryAsync(
function() {
var variationLabels = [];
var e = labelItems.getEnumerator();
while (e.moveNext()) {
var labelItem = e.get_current();
variationLabels.push({
'IsSource': labelItem.get_item('Is_x0020_Source'),
'Language': labelItem.get_item('Language'),
'Locale': labelItem.get_item('Locale'),
'Title': labelItem.get_item('Title'),
'TopWebUrl': labelItem.get_item('Top_x0020_Web_x0020_URL')
});
}
OnSuccess(variationLabels);
},
OnError
);
},
OnError
);
}
The function returns an array of Variation Label entries:
IsSource
- Determines whether the Variation Label is set as the source label
Language
- Returns the Language of the Variation Labe
Locale
- Returns the Locale of the Variation Label
Title
- Returns the title of the Variation Label, which is the unique string identifier of the label
TopWebUrl
- Returns the URL of the top Publishing Web of the variation hierarchy of this label.
Example: How to determine Variation Home?
Assume the following variation labels have been configured
where
en-us
Variation Label corresponds to Variation Home (Is Source
parameter is set to True
)
then the following function will return the Url of the variation hierarchy:
function getVariationLabelSourceUrl()
{
var sourceUrl = '';
getVaritationLabels(
function(variationLabels){
for(var j = 0; j < variationLabels.length;j++){
var variationLabel = variationLabels[j];
if(variationLabel.IsSource){
sourceUrl = variationLabel.TopWebUrl.get_url();
break;
}
}
console.log('Variation Label Source Url: ' + sourceUrl);
},
function(sender,args) {
console.log('An error occurred: ' + args.get_message());
}
);
}
P.S. The demonstrated code samples been tested with SharePoint 2013