SilverStripe获得图像宽度/高度的一半

时间:2011-11-22 00:46:56

标签: image silverstripe

如何计算图像的高度和宽度?我试图将图像置于第一个答案中描述的中心:

How to make an image center (vertically & horizontally) inside a bigger div

这就是我到目前为止所尝试的:

<% control ProfileImage %>
    <% if getOrientation = 1 %>
        <img src="$URL" style="margin-left: -{$Width/2)}px" class="portrait"/>
    <% else_if getOrientation = 2 %>
        <img src="$URL" class="landscape"/>
    <% end_if %>
<% end_control %>

决定性行的输出是:

<img src="/assets/Uploads/picture.jpg" style="margin-left: -{154/2)}px" class="portrait"/>

然后我尝试编写一个自己的函数:

class Profile extends Page{
//...
function GetHalfWidth(){
    return ($this->ProfileImage->Width)/2;
}
//...
}

但是当我尝试在前端查看页面时出现以下错误:

[Notice] Trying to get property of non-object

1 个答案:

答案 0 :(得分:2)

要获得模型中图像的宽度,可以将功能更改为:

function GetHalfWidth() {
    $width = $this->obj('ProfileImage')->Width;
    return $width / 2;
}

但是,如果您尝试在ProfileImage的控制循环中引用该方法表单,则需要“跳出”并使用$ Top.GetHalfWidth

我认为更好的方法是将它定义为ProfileImage的一种方法,如果ProfileImage是从Image继承的......

Profile.php

<?php
class Profile extends Page {

    ...

    public static $has_one = array(
        'ProfileImage' => 'Profile_Image'
    );

    ...
}
class Profile_Controller extends Page_Controller {
    ...
}
class Profile_Image extends Image {

    function GetHalfWidth() {
        $width = $this->Width;
        return $width / 2;
    }

}