在我的CMS中,可以创建新文章,并选择要在该文章上显示的图像.选择图像时,也会自动创建图像的缩略图.
如果上传的图像名为image.jpg,则相应的缩略图将自动命名为image_thumbnail.jpg.
我现在想在提到文章的网站上的任何地方使用缩略图,除了文章本身(应该显示原始大图像).
但是我该怎么做呢?
我想如果我能得到的图像的原始名称,然后后缀(之前它分解.jpg,.png,.jpeg等)和硬编码_thumbnail的名称后,那么这将是足够的.
换句话说,我想获取完整的文件名,并将其分成两部分,以便我可以_thumbnail在两部分之间插入字符串.
也许这会起作用,但如果上传了一个名为image.2horses.jpg(文件名中包含多个点的文件)的图像呢?'.'之前的天真切口.不会在这里工作.
有办法解决这个问题吗?也许通过在最后4(.jpg,.png)或5(.jpeg)字符之前剪切文件名?
Tom*_*lak 20
脱离我的头顶:
<xsl:template name="substring-before-last">
<xsl:param name="string1" select="''" />
<xsl:param name="string2" select="''" />
<xsl:if test="$string1 != '' and $string2 != ''">
<xsl:variable name="head" select="substring-before($string1, $string2)" />
<xsl:variable name="tail" select="substring-after($string1, $string2)" />
<xsl:value-of select="$head" />
<xsl:if test="contains($tail, $string2)">
<xsl:value-of select="$string2" />
<xsl:call-template name="substring-before-last">
<xsl:with-param name="string1" select="$tail" />
<xsl:with-param name="string2" select="$string2" />
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
被称为:
<xsl:template match="/">
<xsl:variable name="filename" select="'image.2horses.jpg'" />
<xsl:variable name="basename">
<xsl:call-template name="substring-before-last">
<xsl:with-param name="string1" select="$filename" />
<xsl:with-param name="string2" select="'.'" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$basename" />
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
产量:
image.2horses
Run Code Online (Sandbox Code Playgroud)
鉴于$ filename中的图像文件名,
如果您可以假设所有图像都以".jpg"结尾,并且文件名中的其他位置没有".jpg",那么这应该有效:
<img src="{substring-before($filename, '.jpg')}_thumbnail.jpg" ... />
Run Code Online (Sandbox Code Playgroud)
如果您不知道图像类型(例如,您也想要处理gif和png),或者如果您认为扩展名可能在文件名中多次出现("image.jpg.jpg"),那么您将需要一个模板来帮助你:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<p>
<xsl:call-template name="image_thumbnail">
<xsl:with-param name="filename" select="'image.jpg'"/>
</xsl:call-template>
</p>
<p>
<xsl:call-template name="image_thumbnail">
<xsl:with-param name="filename" select="'image.09.07.11.jpg'"/>
</xsl:call-template>
</p>
<p>
<xsl:call-template name="image_thumbnail">
<xsl:with-param name="filename" select="'image.gif'"/>
</xsl:call-template>
</p>
<p>
<xsl:call-template name="image_thumbnail">
<xsl:with-param name="filename" select="'image with spaces.jpg'"/>
</xsl:call-template>
</p>
<p>
<xsl:call-template name="image_thumbnail">
<xsl:with-param name="filename" select="'image with irregular spaces.jpg'"/>
</xsl:call-template>
</p>
<p>
<xsl:call-template name="image_thumbnail">
<xsl:with-param name="filename" select="'image.jpg.again.jpg'"/>
</xsl:call-template>
</p>
</xsl:template>
<xsl:template name="image_thumbnail">
<xsl:param name="filename"/>
<xsl:choose>
<xsl:when test="contains($filename, '.')">
<xsl:variable name="before" select="substring-before($filename, '.')"/>
<xsl:variable name="after" select="substring-after($filename, '.')"/>
<xsl:choose>
<xsl:when test="contains($after, '.')">
<xsl:variable name="recursive">
<xsl:call-template name="image_thumbnail">
<xsl:with-param name="filename" select="$after"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="concat($before, '.', $recursive)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($before, '_thumbnail.', $after)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$filename"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19524 次 |
| 最近记录: |