gle*_*lex 6 tridion tridion-2011
我目前正在开发一个网站,它会在一些细节页面上显示一个图像库.它必须在底部显示带有小缩略图的导航,并且必须为每个元素显示一些基本信息和大图像.
大图像也必须调整大小,因为它们允许最大尺寸.
关键是每个多媒体组件只使用一个源图像,并且能够在发布时调整图像大小,因此,源图像将被发送到客户端浏览器缩略图和大图像.可以使用样式或HTML显示小图像和大图像,但这是非常有用的,因为源(其中一些非常重)图像总是发送给客户.
我的第一个想法是一个自定义代码片段,用C#编写的东西,但我觉得很复杂,只将一些图像调整到一定的大小,然后再将它们再次调整为另一个大小.我找不到用最适合的路径替换最终HTML上的SRC的方法.
另一个想法是创建一个旧式的PublishBinary方法,但我发现这非常复杂,因为看起来像当前的Tridion架构根本不打算这样做......
而最重要的一点是,即使我们能够成功地进行大小调整(某种程度上),它目前是一个Tridion 2011问题,可以发布两次相同的图像.大型和小型版本实际上都来自同一个多媒体组件,因此不应该发布它们或者使用名称进行播放,第一个将永远消失,因为路径将使用第二个更新:-S.
有任何想法吗?
Chr*_*ers 10
我在过去构建了一个重新调整TBB大小的图像,它读取Dreamweaver或XSLT模板的输出.我们的想法是使用第一个模板生成如下标记.
<img src="tcm:1-123" maxWidth="250" maxHeight="400"
cropPosition="middle" variantId="250x400"
action="PostProcess" enlargeIfTooSmall="true"
/>
Run Code Online (Sandbox Code Playgroud)
然后,"重新调整大小"TBB会对包中的输出项进行处理,查找具有PostProcess操作的节点.
然后,它System.Drawing根据maxHieght和maxWidth维度属性使用库创建多媒体组件的变体,并使用AddBinary()提到的方法@frank并使用variantId属性作为文件名前缀和变体id(并用URL替换SRC属性)来发布它.新二进制).
为了使其100%灵活,如果其中一个maxHeight或多个maxWidth属性设置为0,则TBB仅根据"非零"维度重新调整大小,或者如果两者都设置,则根据cropPosition属性裁剪图像.这使我们能够为横向和纵向图像制作sqare缩略图而不会扭曲它们.该enlargeIfTooSmall属性用于防止小图像被拉伸到太多.
你可以在这里看到最终画廊的样本:http://medicine.yale.edu/web/help/examples/specific/photo/index.aspx
和其他图像重新调整示例:http://medicine.yale.edu/web/help/examples/general/images.aspx
所有图像都只上传到CMS一次,然后在发布时动态调整大小和裁剪.
Tridion可以很好地在单个MMC上发布多个变体.当您调用时,AddBinary您可以指定此二进制文件是MMC的变体,每个变体由您指定的简单字符串标识.
public Binary AddBinary(
Stream content,
string filename,
StructureGroup location,
string variantId,
Component relatedComponent,
string mimeType
)
Run Code Online (Sandbox Code Playgroud)
如您所见,您还可以指定二进制文件的文件名.如果这样做,则变体具有唯一文件名,并且不同MMC之间的文件名保持唯一,这是您的责任.通常,最简单的方法是使用variantId的一些指示简单地为文件名添加前缀或后缀:<MmcImageFileName>_thumbnail.jpg.
对于最近的一个演示项目,我采用了一种完全不同的方法.二进制文件都发布到代理数据库.它们是通过HttpModule从代理中提取的,HttpModule将二进制数据写入文件系统.我可以在图像的URL中编码所需的宽度或高度(当然,对于不是图像的二进制文件,这部分逻辑将不起作用).然后,模块动态调整图像大小(真正动态,而不是在发布期间!)并将调整后的版本写入磁盘.
例如:如果我请求/Images/photo.jpg,我将获得原始图像.如果我请求/Images/photo_h100.jpg,我会得到100像素高的版本.url /Images/photo_w150.jpg的宽度为150像素.
不需要任何变体,也不需要重新发布,因为尺寸要求不同:调整大小完全按需完成!服务器上的性能损失可以忽略不计:每个大小只生成一次,直到重新发布图像.
我使用.NET,但当然它也适用于Java.
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |