在Sharepoint中,如何根据超链接对列表进行排序?

时间:2013-05-20 19:17:36

标签: sharepoint sorting hyperlink

我正在使用自定义列表设置项目信息中心。这一切都在浏览器中,我相信它是2007年,但我不知道如何确定。其中一列是“Project Stoplight”。该字段是一个超链接,在描述中是指向绿色,黄色或红色圆圈图像的链接,以表示项目的状态。创建新项目时,用户将相应的超链接复制并粘贴到超链接字段中,以表示显示的图像。我需要一种通过红绿灯排序的方法(所有绿色,黄色和红色项目组合在一起)。任何人对我如何做到这一点都有任何想法?

2 个答案:

答案 0 :(得分:0)

我终于想出了怎么做。基本上,我创建了两列:项目状态(I)和项目状态(S)(第一个代表图像,第二个代表字符串)。项目状态(I)列根据用户在创建新项目时在项目状态(S)类别中选择的内容显示图像。这是使用计算列(项目状态(I))和以下代码公式完成的:

=IF([Project Status (String)]="Green","<DIV><img src='/Site%20Pictures/grn.jpg'/></DIV>",IF([Project Status (String)]="Yellow","<DIV><img src='/Site%20Pictures/yel.jpg'/></DIV>",IF([Project Status (String)]="Red","<DIV><img src='/red.jpg'/></DIV>","Error")))

基本上,这是HTML脚本,如果满足正确的条件,则从互联网上提取图像(即,如果项目状态(S)=绿色等)。但是,SharePoint不会在计算列中呈现HTML脚本。您会注意到,如果您创建了一个显示代码的新视图,而不是图片。为了获得图片,需要在网页中嵌入JavaScript。这是通过创建内容编辑器Web部件,编辑源代码并粘贴以下代码来完成的:

<script type="text/javascript">
//
// Text to HTML
// Feedback and questions: Christophe@PathToSharePoint.com
//
var theTDs = document.getElementsByTagName("TD");
var i=0;
var TDContent = " ";
while (i < theTDs.length) {
try {
TDContent = theTDs[i].innerText || theTDs[i].textContent;
if ((TDContent.indexOf("<DIV") == 0) && (TDContent.indexOf("</DIV>") >= 0)) {
theTDs[i].innerHTML = TDContent;
}
}
catch(err){}
i=i+1;
}
//
// ExpGroupRenderData overwrites the default SharePoint function
// This part is needed for collapsed groupings
//
function ExpGroupRenderData(htmlToRender, groupName, isLoaded) {
var tbody=document.getElementById("tbod"+groupName+"_");
var wrapDiv=document.createElement("DIV");
wrapDiv.innerHTML="<TABLE><TBODY id=\"tbod"+ groupName+"_\" isLoaded=\""+isLoaded+ "\">"+htmlToRender+"</TBODY></TABLE>";
var theTBODYTDs = wrapDiv.getElementsByTagName("TD"); var j=0; var TDContent = " ";
while (j < theTBODYTDs.length) {
try {
TDContent = theTBODYTDs[j].innerText || theTBODYTDs[j].textContent;
if ((TDContent.indexOf("<DIV") == 0) && (TDContent.indexOf("</DIV>") >= 0)) {
theTBODYTDs[j].innerHTML = TDContent;
}
}
catch(err){}
j=j+1;
}
tbody.parentNode.replaceChild(wrapDiv.firstChild.firstChild,tbody);
}
</script>

此代码是从互联网上复制的。我自己没有写。从回顾它来看,它似乎要比它需要的复杂得多,但只要你的HTML被包围它就会起作用,它会将HTML转换成它应该的样子。

答案 1 :(得分:-1)

您可以创建另一个计算列,并根据超链接字段中的图像值,您可以在该计算字段中设置文本状态。完成后,您可以轻松地按该列进行排序或分组。