SilverStripe получает половину ширины / высоты изображения - PullRequest
0 голосов
/ 22 ноября 2011

как рассчитать высоту и ширину изображения? Я пытаюсь центрировать изображение, как описано в первом ответе:

Как сделать центр изображения (по вертикали и по горизонтали) внутри большего 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 Ответ

2 голосов
/ 22 ноября 2011

Чтобы получить ширину вашего изображения в модели, вы можете изменить свою функцию следующим образом:

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;
    }

}
...