Проблемы при добавлении пользовательского viewstyle на vwstyles.xsl и vwstyles.xml
-
29-09-2020 - |
Вопрос
Я пробую несколько часов, чтобы настроить вид на миниатюру на библиотеке изображений в SharePoint 2013 без удачи.
Что я хочу сделать, это добавить дату, что картинка была сделана под заголовком изображения. Так что он отображается как при русхождении миниатюрного миниатюра, а когда оно мышело.
Я пытался Google это много, и попробовал как jQuery Solutions и редактирование файлов vwstyles.xml и vwstyles.xsl. Делая Iisreset каждый раз, когда я редактирую что-то, но без каких-либо удачи.
Это похоже на названия классов, а идентификаторы ID в XML и XSL-файлах не присутствуют на фактической странице, а наоборот.
Так мне было интересно, если кто-то здесь сделал то же самое раньше, потому что у меня возникает идеи, где редактировать эти файлы, чтобы изменения появились на странице.
Я сделал новый ViewStyle в файле XML (скопирован из стиля «ViewStylepiclibdetailsname») и скопировал тот же идентификатор в файле XSL и дал как новый идентификатор, так и новое имя для моего ViewStyle. Это, кажется, хорошо работает, но ни одно из изменений я не появляюсь на странице.
Вот просмотра в моих файле vwstyles.xml:
<ViewStyle ID="21" DisplayName="CustomThumbnail" BaseType="1" Type="109" Preview="_layouts/15/images/prvpicl.gif" Description="$Resources:core,ViewStylePicLibDetailsDesc;">
<ViewBody>
<Switch>
<Expr>
<IfEqual>
<Expr1>
<LookupColumn Name="FSObjType"/>
</Expr1>
<Expr2>0</Expr2>
<Then>
<Field Name="EncodedAbsUrl"/>
</Then>
<Else>
<Field Name="ServerUrl" URLEncodeAsURL="TRUE"/>
</Else>
</IfEqual>
</Expr>
<Case Value="">
<HTML><![CDATA[<tr valign="top"]]></HTML>
</Case>
<Default>
<HTML>
<![CDATA[
<Script>
fNewItem = false;
]]>
</HTML>
<IfNew Name="Created_x0020_Date">
<HTML><![CDATA[fNewItem = true;]]></HTML>
</IfNew>
<HTML>
<![CDATA[
InsertItem(
]]>
</HTML>
<ScriptQuote>
<IfEqual>
<Expr1>
<LookupColumn Name="FSObjType"/>
</Expr1>
<Expr2>0</Expr2>
<Then>
<Field Name="EncodedAbsUrl"/>
</Then>
<Else>
<Field Name="ServerUrl" URLEncodeAsURL="TRUE" />
</Else>
</IfEqual>
</ScriptQuote>
<HTML>
<![CDATA[,
"]]>
</HTML>
<Column Name="ID"/>
<HTML>
<![CDATA[",
]]>
</HTML>
<ScriptQuote>
<UrlBaseName>
<LookupColumn Name="FileLeafRef"/>
</UrlBaseName>
</ScriptQuote>
<HTML>
<![CDATA[,
]]>
</HTML>
<ScriptQuote>
<GetFileExtension>
<LookupColumn Name="FileLeafRef"/>
</GetFileExtension>
</ScriptQuote>
<HTML>
<![CDATA[,
"]]>
</HTML>
<Column Name="Created_x0020_Date"/>
<HTML>
<![CDATA[",
]]>
</HTML>
<Column Name="ImageWidth"/>
<HTML>
<![CDATA[",
"]]>
</HTML>
<Column Name="ImageHeight"/>
<HTML>
<![CDATA[",
]]>
</HTML>
<ScriptQuote>
<Column Name="Title" />
</ScriptQuote>
<HTML>
<![CDATA[,
]]>
</HTML>
<ScriptQuote>
<Column Name="Description" />
</ScriptQuote>
<HTML>
<![CDATA[,
]]>
</HTML>
<LookupColumn Name="FSObjType"/>
<HTML>
<![CDATA[,
]]>
</HTML>
<ScriptQuote>
<MapToIcon>
<Column Name="HTML_x0020_File_x0020_Type"/>
<HTML>|</HTML>
<Column Name="File_x0020_Type"/>
</MapToIcon>
</ScriptQuote>
<HTML>
<![CDATA[,
fNewItem);
</Script>
<tr valign="top" id=row]]>
</HTML>
<Column Name="ID"/>
</Default>
</Switch>
<HTML><![CDATA[>]]></HTML>
<Fields>
<HTML><![CDATA[<td Class="]]></HTML>
<FieldSwitch>
<Expr>
<Property Select="ClassInfo"/>
</Expr>
<Case Value="Menu">
<HTML><![CDATA[ms-vb-title" onmouseover="OnChildItem(this)" height="100%]]></HTML>
</Case>
<Case Value="Icon">ms-vb-icon</Case>
<Default>
<FieldSwitch>
<Expr>
<Property Select="Type"/>
<PresenceEnabled/>
</Expr>
<Case Value="UserTRUE">ms-vb-user</Case>
<Case Value="UserMultiTRUE">ms-vb-user</Case>
<Default>ms-vb2</Default>
</FieldSwitch>
</Default>
</FieldSwitch>
<HTML><![CDATA[">]]></HTML>
<Field/>
<HTML><![CDATA[</td>]]></HTML>
</Fields>
<HTML><![CDATA[</tr>]]></HTML>
</ViewBody>
<ViewFooter>
<HTML>
<![CDATA[
<?IMPORT namespace='stsplrc' implementation='#default#vml'?>
<stsplrc:rect ID=webImageSyncer style="display:none;width:100;height:100"></stsplrc:rect>
<span ID=selectionCacheMgr class=userdata style="display:none"></span>
<span ID=DebugBox class=ms-selectedtitle style="display:none"></span>
]]>
</HTML>
<HTML><![CDATA[</table></td></tr></table>]]></HTML>
<HTML>
<![CDATA[
<Script>
fImglibDefautlView = true;
strSeperator = "&";
if (ctx.displayFormUrl.indexOf("?") == -1)
strSeperator = "?";
urlCmdForDisplay = ctx.displayFormUrl + strSeperator + "RootFolder=]]>
</HTML>
<GetVar Name="RootFolder" URLEncode="TRUE"/>
<HTML>
<![CDATA[";
ViewHeaderScript(]]>
</HTML>
<ScriptQuote>
<GetVar Name="ViewStyle" HTMLEncode="TRUE"/>
</ScriptQuote>
<HTML>
<![CDATA[,
]]>
</HTML>
<ListProperty Select="WebImageWidth"/>
<HTML>
<![CDATA[,
]]>
</HTML>
<ListProperty Select="WebImageHeight"/>
<HTML>
<![CDATA[,
]]>
</HTML>
<ListProperty Select="ThumbnailSize"/>
<HTML>
<![CDATA[);
currentPicture = ]]>
</HTML>
<IfEqual>
<Expr1>
<GetVar Name="picID"/>
</Expr1>
<Expr2></Expr2>
<Then>0</Then>
<Else>
<GetVar Name="picID"/>
</Else>
</IfEqual>
<HTML>
<![CDATA[;
ViewFooterScript();
</Script>]]>
</HTML>
</ViewFooter>
<GroupByHeader>
<HTML><![CDATA[<tbody id="titl]]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[" groupString="]]></HTML>
<GetVar Name="GroupByValueString"/>
<HTML><![CDATA["><tr><td colspan="100"]]></HTML>
<Switch>
<Expr>
<GetVar Name="GroupByIndent"/>
</Expr>
<Case Value="0">
<HTML><![CDATA[ class="ms-gb" ]]></HTML>
</Case>
<Default>
<HTML><![CDATA[ class="ms-gb2" ]]></HTML>
</Default>
</Switch>
<HTML><![CDATA[ nowrap="nowrap"><img src="/_layouts/15/images/blank.gif?rev=23" alt="" height="1" width="]]></HTML>
<GetVar Name="GroupByIndent"/>
<HTML><![CDATA[" /><a href="javascript:" onclick="javascript:ExpCollGroup(']]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[','img_]]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[');return false;"><img id="img_]]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[" src="/_layouts/15/images/minus.gif?rev=23" alt="]]></HTML>
<HTML>$Resources:core,groupExpColl;</HTML>
<HTML><![CDATA[" border="0" /></a> ]]></HTML>
<HTML><![CDATA[<a href="javascript:" onclick="javascript:ExpCollGroup(']]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[','img_]]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[');return false;">]]></HTML>
<GetVar Name="GroupByField" HTMLEncode="TRUE" />
<HTML><![CDATA[</a> : ]]></HTML>
<GetVar Name="GroupByValue"/>
<HTML><![CDATA[</td></tr></tbody>]]></HTML>
<HTML>
<![CDATA[
<script type="text/javascript">
fIsInGroupByView = true;
</script>]]>
</HTML>
</GroupByHeader>
<ViewFields>
<FieldRef Name="SelectedFlag"/>
<FieldRef Name="DocIcon"/>
<FieldRef Name="NameOrTitle"/>
<FieldRef Name="ImageSize"/>
<FieldRef Name="FileSizeDisplay"/>
<FieldRef Name="RequiredField" Explicit="TRUE"/>
</ViewFields>
<Script>
g_RequiredFields[6] = new Array;
g_RequiredFields[6]["RequiredField"] = true;
</Script>
</ViewStyle>
</ViewStyles>
.
И вот части файла XSL я пытался редактировать, я добавил некоторые теги
, чтобы увидеть, появляются ли они в таблице на странице, но они никогда не делают. .
<xsl:template match="View[ViewStyle/@ID='21']" mode="RenderView">
<!-- total first -->
<xsl:if test="Aggregations[not(@Value='Off')]/FieldRef">
<tr>
<xsl:if test="$InlineEdit">
<td width="1%"/>
</xsl:if >
<xsl:apply-templates mode="aggregate" select="ViewFields/FieldRef[not(@Explicit='TRUE')]">
<xsl:with-param name="Rows" select="$AllRows"/>
<xsl:with-param name="GroupLevel" select="0"/>
</xsl:apply-templates>
</tr>
</xsl:if>
<xsl:variable name="Fields" select="ViewFields/FieldRef[not(@Explicit='TRUE')]"/>
<xsl:variable name="Groups" select="Query/GroupBy/FieldRef"/>
<xsl:variable name="Collapse" select="Query/GroupBy[@Collapse='TRUE']"/>
<xsl:variable name="GroupCount" select="count($Groups)"/>
<xsl:for-each select="$AllRows">
<xsl:variable name="thisNode" select="."/>
<xsl:variable name="Position" select="position()" />
<!-- work on every other row -->
<!-- this code will pick up the -->
<xsl:if test="$Position mod 2 = 1">
<!-- start of new row -->
<tr>
<td valign="top" width="49%" class="ms-stylebox">
<xsl:apply-templates mode="Item" select="$thisNode">
<xsl:with-param name="Fields" select="$Fields"/>
<xsl:with-param name="Collapse" select="$Collapse"/>
<xsl:with-param name="Position" select="position()"/>
<xsl:with-param name="Last" select="last()"/>
</xsl:apply-templates>
</td>
<td width="1.5%">
<xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&nbsp;</xsl:text>
</td>
<xsl:choose>
<xsl:when test="$Position != last()">
<td valign="top" width="49%" class="ms-stylebox">
<xsl:apply-templates mode="Item" select="$AllRows[$Position + 1]">
<xsl:with-param name="Fields" select="$Fields"/>
<xsl:with-param name="Collapse" select="$Collapse"/>
<xsl:with-param name="Position" select="position()"/>
<xsl:with-param name="Last" select="last()"/>
</xsl:apply-templates>
<p>test</p>
</td>
</xsl:when>
<xsl:otherwise>
<td valign="top" width="49%">
<xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&nbsp;</xsl:text>
<p>test otherwise</p>
</td>
</xsl:otherwise>
</xsl:choose>
</tr>
<tr>
<td>
<xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&nbsp;</xsl:text>
<p>test end</p>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</xsl:template>
.
и последний бит в файле xsl:
<xsl:template mode="Item" match="Row[../../@ViewStyleID='21']">
<xsl:param name="Fields" select="."/>
<xsl:param name="Collapse" select="."/>
<xsl:param name="Position" select="1"/>
<xsl:param name="Last" select="1"/>
<xsl:variable name="thisNode" select="."/>
<xsl:variable name="ID">
<xsl:call-template name="ResolveId"><xsl:with-param name="thisNode" select ="."/></xsl:call-template>
</xsl:variable>
<xsl:variable name="FSObjType">
<xsl:choose>
<xsl:when test="$EntityName != ''">0</xsl:when>
<xsl:otherwise><xsl:value-of select="./@FSObjType"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="targetUrl">
<xsl:choose>
<!-- this is a URL from the links list, so we should dump in the displayform url instead -->
<xsl:when test="substring(@FileRef, string-length(@FileRef) - 4) = '_.000'">
<xsl:value-of select="$FORM_DISPLAY"/>&ID=<xsl:value-of select="$ID"/>
</xsl:when>
<!-- regular files just use the file ref -->
<xsl:otherwise>
<xsl:value-of select="@FileRef"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<table border="0" width="100%" cellspacing="0">
<tr class="ms-styleheader">
<td class="ms-detailhdricon" width="10%">
<xsl:choose>
<xsl:when test="@FSObjType='1'">
<xsl:variable name="alttext">
<xsl:value-of select="../@listformtitle_folder"/>: <xsl:value-of select="@FileLeafRef"/>
</xsl:variable>
<!-- This is a folder -->
<xsl:variable name="mapico" select="$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico"/>
<xsl:variable name="folderIconPath">
<xsl:call-template name="GetFolderIconSourcePath">
<xsl:with-param name="thisNode" select="$thisNode"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$RecursiveView='1'">
<img border="0" alt="{$alttext}" src="{$folderIconPath}" />
</xsl:when>
<xsl:otherwise>
<xsl:variable name="FolderCTID">
<xsl:value-of select="$PagePath" />?RootFolder=<xsl:value-of select="@FileRef.urlencode" />&FolderCTID=<xsl:value-of select="@ContentTypeId" />
</xsl:variable>
<a tabindex="-1" href="{$FolderCTID}" onclick="javascript:EnterFolder("{$FolderCTID}");javascript:return false;">
<img border="0" alt="{$alttext}" title="{$alttext}" src="{$folderIconPath}" />
</a>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<!-- Not a Folder -->
<xsl:choose>
<xsl:when test="not (@CheckoutUser.id) or @CheckoutUser.id =''">
<img border="0" alt="{@FileLeafRef}" title="{@FileLeafRef}" src="/_layouts/15/images/{@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico}?rev=23" />
</xsl:when>
<xsl:otherwise>
<xsl:variable name="alttext">
<xsl:value-of select="@FileLeafRef"/> <xsl:value-of select="../@managecheckedoutfiles_header_checkedoutby"/>: <xsl:value-of select="@CheckoutUser.title"/>
</xsl:variable>
<img border="0" alt="{$alttext}" title="{$alttext}" src="/_layouts/15/images/{@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico}?rev=23" />
<img src="/_layouts/15/images/checkoutoverlay.gif?rev=23" class="ms-vb-icon-overlay" alt="{$alttext}" title="{$alttext}" />
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</td>
<td colspan="2" class="ms-detailhdrmid" width="80%">
<a onfocus="OnLink(this)" href="{$targetUrl}" onmousedown="return VerifyHref(this,event,'{$XmlDefinition/List/@DefaultItemOpen}','{@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','')"
onclick="return DispEx(this,event,'','','','','{$XmlDefinition/List/@DefaultItemOpen}','{@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{@HTML_x0020_File_x0020_Type}','','{@CheckoutUser.id}','{$Userid}','{$XmlDefinition/List/@ForceCheckout}','{@IsCheckedoutToLocal}','{@PermMask}')">
<xsl:value-of select="@FileLeafRef.Name"/>
</a>
<xsl:if test="@Created_x0020_Date.ifnew='1'">
<xsl:call-template name="NewGif">
<xsl:with-param name="thisNode" select="$thisNode"/>
</xsl:call-template>
</xsl:if>
</td>
<td align="right" class="ms-detailhdredit" width="10%">
<xsl:call-template name="FieldRef_Edit_body">
<xsl:with-param name="thisNode" select="."/>
</xsl:call-template>
</td>
</tr>
<xsl:for-each select="$Fields[not(@Name='Edit') and not(@Name='LinkFilenameNoMenu') and not(@Name='DocIcon')]">
<tr>
<td><xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&nbsp;</xsl:text></td>
<td class="ms-detailbtitle" width="25%">
<span class="ms-stylelabel">
<xsl:value-of select="@DisplayName"/>
</span>
</td>
<td class="ms-stylebody" width="75%">
<xsl:apply-templates select="." mode="PrintFieldWithDisplayFormLink">
<xsl:with-param name="thisNode" select="$thisNode"/>
</xsl:apply-templates>
</td>
<td><xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&nbsp;</xsl:text></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
. Решение
от личного опыта: Редактирование .xsl (например, vwstyles.xsl или fldtypes.xsl) Файлы SharePoint требуют переработки пула приложения.Только когда вы перерабатываете пул приложения, SharePoint загружает файлы снова с диска.В противном случае он получает его из кэша.
Другие советы
Взгляд быстро посмотрите на него (так как это стена поста: P), есть несколько вещей, которые я заметил, что может оказать влияние на эту работу или нет.
Я посмотрел на ваш файл XML, и кажется, у вас есть тег ViewStyle и Viewbody, но без просмотра просмотра и видоискателя.Они обязаны создать Custome ViewStyle.
Другой момент, это может быть более яркая проблема, заключается в том, что у вас есть эти две строки кода:
g_RequiredFields[6] = new Array;
g_RequiredFields[6]["RequiredField"] = true;
.
Вы проходите в 6, но вам нужно пройти в идентификатор пользовательского просмотра вы созданного.Так что попробуйте изменить от 6 до 21. Если я найду несколько вопросов, поскольку я прохожу через код, я дам вам знать.