【问题标题】:SilverStripe 3: Image Object in controller functionSilverStripe 3:控制器功能中的图像对象
【发布时间】:2013-02-27 03:28:30
【问题描述】:

我正在尝试编写一个函数来显示来自 Holder Page 上子页面的图像。

因为 SilverStripe 在模板上缺少一些功能,所以我认为最好在控制器中处理它们。

我需要一些只能在 php 中完成的条件语句。

控制器.php

public function LatestWork() {

$works = WorkPage::get();

$i = 1;
$html = "";
foreach ($works as $work) {

  //Build the IMage Object so we can add it to the Work Object
  $ImageObj = File::get()->byID($work->FeaturedImageID);

  if ($this->is_odd($i)) {
    $html .= "<div class='row'>";
    $span = "span8";
  } else {
    $span = "span4";
  }
  $html .= "<div class = '$span'>" . $ImageObj->croppedImage(200,100)  . "</div>";
  if ($this->is_even($i)  || $i == $works->Count()) {
    $html .= "</div>";
  }
  $i++;
}

return $html;
}

当它在视图中处理时,div 和 span 存在,但图像不存在。代码中有更多条件,但这只是基本版本。 它改为显示“Image_Cached”。

如何让它显示图像?

【问题讨论】:

  • 当您返回 $ImageObj->croppedImage(200,100) 时没有 html 或其他任何内容,例如:返回 $ImageObj->croppedImage(200,100) 。 " " 它会显示图像,但只要您添加任何内容,它就会显示 Image_cache

标签: silverstripe


【解决方案1】:

控制器:

public function LatestWork() {
    $rows=new ArrayList();
    foreach(WorkPage::get() as $workPage){
        if (!isset($bucket)){
              $bucket = new ArrayList();
              $bucket->push($workPage);
              $rows->push($bucket);
        } else {
              $bucket->push($workPage);
              unset($bucket);
        }
    }
    return $rows;
}

模板:

<% loop LatestWork %>
    <div class="row">
    <% if Odd %>
        <div class="span-8">
            <% with $Me.First %>$FeaturedImage.CroppedImage(200,100)<% end_with %>
        </div>
        <div class="span-4">
            <% with $Me.Last %>$FeaturedImage.CroppedImage(100,50)<% end_with %>
        </div>
    <% else %>
        <div class="span-4">
            <% with $Me.First %>$FeaturedImage.CroppedImage(100,50)<% end_with %>
        </div>
        <div class="span-8">
            <% with $Me.Last %>$FeaturedImage.CroppedImage(200,100)<% end_with %>
        </div>
    <% end_if %>
    </div>
<% end_loop %>

将是 SS 的方式,这样您的显示逻辑就不会弄乱您的控制器

【讨论】:

  • 嗨,JF,再次感谢,正如我所说的那样,那里有更多的条件逻辑,SS 方式将无法做到这一点,这就是我尝试用 PHP 做到这一点的原因。如果有一种 SS 方式来交替我在 stackoverflow.com/questions/15098248/… 的示例中的每一行,那将是非常棒的。
  • Span8 将具有较大的图像(裁剪),而 Span4 将具有较小的图像(裁剪)。每隔一行,它将切换到 Span4 首先开始,然后 Span8 开始第二
  • 我已经更新了我的回复,可以解决您的问题
  • 谢谢,我会试一试,看看效果如何。我已经设法在控制器中完成了这一切,但它非常混乱,我不喜欢在控制器中创建 HTML,所以希望你的方式更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多