Логика/отделения презентация


У меня есть следующий код:

<div id="page-content">
<div class="container-fluid">
    <div class="row">
        <div class="col-lg-11">
            <div id="featured_users></div>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-11">
            <h1> Visitors </h1>
            <?php while($visitor = $visitors->fetch_object()) { ?>
            <?php $time = $visitor->time; ?>
            <?php $visitor = new User($visitor->viewer_id); ?>
            <?php 
            $this->insert('visitors/visitor',[
            'id' => $visitor->id,
            'profile_image' => $visitor->profile_image,
            'name' => $visitor->name,
            'time' => $time->convertToAgo($time);
            ]); 
            ?>
            <? } ?>
        </div>
    </div>
</div>
</div>

Я пытаюсь придумать способ, чтобы лучше отделить логику от представления. Я уже с помощью шаблонизатора (тарелки, родной для PHP шаблоны), этот код из одного из моих файлов шаблонов. Однако, как она стоит, это не легко для тех, кто не имеет понимание PHP, чтобы изменить свой файл шаблона и не путаться со всеми PHP-кода.

Может кто поможет мне с идеями на пути к этой логике разделения презентацию?



174
3
задан 8 февраля 2018 в 11:02 Источник Поделиться
Комментарии
1 ответ

    <?php
// this code goes into your controller
$visitor_rows = [];

// lets do all the hard work here
while($visitor = $visitors->fetch_object()) {
$time = $visitor->time;
$visitor = new User($visitor->viewer_id);
$visitor_rows[] = [
'id' => $visitor->id,
'profile_image' => $visitor->profile_image,
'name' => $visitor->name,
'time' => $time->convertToAgo($time),
]);
}

// the template only needs to know about $visitor_rows now
?>

<!-- the template is now a lot simpler to follow and understand -->
<!-- i prefer the foreach: endforeach; loop syntax when embedded in html -->
<div id="page-content">
<div class="container-fluid">
<div class="row">
<div class="col-lg-11">
<div id="featured_users"></div>
</div>
</div>
<div class="row">
<div class="col-lg-11">
<h1> Visitors </h1>
<?php foreach ($visitor_rows as $row): ?>
<?= $this->insert('visitors/visitor', $row) ?>
<?php endforeach ?>
</div>
</div>
</div>
</div>

1
ответ дан 9 февраля 2018 в 06:02 Источник Поделиться