具体5.8快速输入块 - 按属性过滤结果

时间:2017-01-14 16:15:25

标签: php oop orm concrete5 concrete5-8.x

根据开发人员文档here是否可以进一步按对象的属性过滤结果?

例如,假设您在码头拥有多艘拥有相同所有者的船只,并且您只想在码头找到所有者的船只,那么可以进一步过滤数据(即按属性BoatOwner过滤)。

在阅读了Doctrine2文档后,我可以理解这可以做到,但我无法解决如何扩展C5代码或我可以调用哪些方法来实现这一点。

<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>
<?php

if (isset($entry) && is_object($entry)) {

$boats = $entry->getBoats();

?>

<table class="table">
    <thead>
    <tr>
        <th>Name</th>
        <th>Year</th>
        <th>Owner</th>
        <th>Classification</th>
    </tr>
    </thead>
<tbody>
<?php if (count($boats)) {
    foreach($boats as $boat) { ?>
        <tr>
            <td><?=$boat->getBoatName()?></td>
            <td><?=$boat->getBoatYear()?></td>
            <td><?=$boat->getBoatOwner()?></td>
            <td><?=$boat->getBoatClass()?></td>
        </tr>
    <?php } ?>
<?php } else { ?>
    <tr>
        <td colspan="4">No boats found.</td>
    </tr>
<?php } ?>
</tbody>
</table>

<?php } ?>

以上是C5文档中的代码。可以通过某种方式扩展神奇的“获取”方法,还是使用$ boats数组(我认为它是一个数组)来选择只有具有特定属性值的船只的更简单的解决方案?

1 个答案:

答案 0 :(得分:0)

答案是在foreach循环中放置一个if语句。

if (count($boats)) {
    foreach($boats as $boat) { 
if($boat->getBoatOwner() == "boat owner's name here") {
?>
<tr>
        <td><?=$boat->getBoatName()?></td>
        <td><?=$boat->getBoatYear()?></td>
        <td><?=$boat->getBoatOwner()?></td>
        <td><?=$boat->getBoatClass()?></td>
    </tr>

<?php;
            } else {
                ?>

    <?php;
            } 



        ?>



        <?php } ?>
    <?php } else { ?>
        <tr>
            <td colspan="4">No boats found.</td>
        </tr>
    <?php } ?>
    </tbody>
</table>
<?php } ?>

我想我会将船主的名字作为变量传递,可能来自页面属性,这是有用的。