2

我的克隆页面模板中有以下代码:

<img 
tal:define="folderimagetitle python:context.getField('folderimagetitle').getAccessor(context)()"
tal:condition="folderimagetitle" 
src="" 
alt="" 
tal:replace="structure python:context.getWrappedField('folderimage').tag(context, alt=folderimagetitle, css_class='photo')" 
/>

基本上我想在 H1 标签旁边显示图像。该图像可以正常工作并显示,但它会显示与文本不对齐的完整图像大小。我也不想只添加一个高度和宽度属性,因为这会导致图像边缘参差不齐,无法很好地缩放。

如何将其缩小到 Plone 中可用的默认尺寸之一,即列表、图标、平铺、拇指、迷你、预览和大?

4

2 回答 2

5

“现代”方式是使用 plone.app.imaging。

例子

<img tal:define="scales context/@@images;
                 thumbnail python: scales.scale('image', width=64, height=64);"
     tal:condition="thumbnail"
     tal:attributes="src thumbnail/url;
                     width thumbnail/width;
                     height thumbnail/height" />

http://plone.org/products/plone.app.imaging/

于 2012-08-13T14:12:47.620 回答
5

接受的答案非常完美,但这里有一个关于它如何工作的额外提示:

/@@images 上下文在任何对象类型上都是可获取的,但 scales.scale() 的第一个参数是必须在该上下文上使用 .getField(name) 可获取的字段名称。

因此,例如,如果您有一个画廊视图,它在 view/images 上显示了一个图像列表,您可以使用:

<li tal:repeat="image view/images">
<img tal:define="scales image/@@images;
                 img python: scales.scale('image', width=100, height=100);"
     tal:attributes="src img/url">
</li>

请特别注意,您不能只将图像实例传递为:

scales context/@@images; <--- Don't do this. You need the @@images for an Image
scales.scale(instance, width=10, height=10);

如果由于某种原因您需要使用 TAL 以外的语言执行此操作则诀窍是使用 restrictedTraverse() 来获取“@@images”上下文,例如:

%if request.context.children.has(0, 'ATBlob'):
    <%
        # NB. The 'ATBlob' is the concrete Image instance
        image = request.context.children.nth(0, 'ATBlob')  
        scales = image.restrictedTraverse('@@images')
        scaled_image = scales.scale('image', width=100, height=100)
    %>
    ${scaled_image} 
%endif
于 2014-07-22T04:02:00.740 回答