@FrelFrloich

Yii2 php foreach и как благоприятно задать условия if?

Понимаю что из вопроса не понятно что я хочу, не смог сформулировать.

И так, есть сортировка в конроллере.
public function actionIndex()
    {
        $server_list_earli = Listserver::find()->orderBy(['status'=> SORT_ASC, 'date' => SORT_ASC])->all();                         
                         
        return $this->render
        ('index',['list_earlier' => $server_list_earli]);
    }


в index.php имеется foreach и в нём условия.

<div class="box__list box__solar">
        <?php $showed = false; ?>
          
        <?php foreach($list_earlier as $list):?>
          <?php 
          if ( $list->date_start < date("Y-m-d") && $list->date_end > date("Y-m-d") ) {
            $status = $list->status;
          }else {
            $status = 'simple__content__section'';
          }

          if ( $status == 'content__section' ) {
            $icon_star = $a;
            $priority = 1;
            $icon_round = $list->icon_item;
          }else if ( $status == 'midle__content__section' ) {
            $icon_star = $b;
            $priority = 2;
            $icon_round = $list->icon_item;
          }else if ( $status == 'under__content__section' ) {
            $icon_star = $c;
            $priority = 3;
            $icon_round = $list->icon_item;
          }else if ( $status == 'simpler__content__section'' ) {
            $icon_star = ' ';
            $priority = 5;
            $icon_round = ' ';         
          }
          ?>  
          <?php if ($list->date >= date('Y-m-d')): ?>
            <?php  if ($priority < 3): ?>
              <?php if(!$showed){echo '<div class="box__headline heading__hight"><h3>Заголовок<span class="title__line"></span>Сервера <i class="fa fa-usd" aria-hidden="true"></i></h3></div>';$showed = true;} ?>
              <div class="box__span <?= $status ?>">
                <span class="b__link__item item__icon"><?= $icon_star ?></span>
                <span class="b__link__item item__name"><?= $list->name ?></span>
                <span class="b__link__item item__bonus"><?= $icon_round?></span>
                <span class="b__link__item item__date"><?= Yii::$app->formatter->asDate($list->date) ?></span>   
              </div>
            <?php endif; ?>
          <?php endif; ?>
        <?php endforeach;?>
       </div>
     </div>


идея всего этого безобразия была такова(не судите строго изучаю недавно и с урывками в последнее время, любитель я и не зарабатываю на этом). Что всё цеплял к данному $status = $list->status; статусу через базу задана начальная дата и окончание, если дата окончилось то $status = 'simple__content__section''; и соответственно всё автоматом спадает (иконки, css класс и тд), но при этом я могу изменять через бд всё что мне надо....

Всё работает как часы (правда я более чем уверен что так код не пишется и есть какое либо решении поудобней). Но есть маленькое но, таких переборов массива несколько меняется лишь условие с датой и переменной.

<?php if ($list->date >= date('Y-m-d')): ?>
            <?php  if ($priority < 3): ?>


Я к сожалению вынужден множественные условия повторять в каждом переборе а их у меня 5.
Мои личные попытки сводились к тому что, переменная равна значению из бд и в не перебора я не смог применить.
Вопрос таков, как возможно избежать данного повторения, буду очень признателен если поделитесь ссылкой куда мне такому не опытному пройтись.
  • Вопрос задан
  • 246 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Arik
Попробуйте Виджеты, так у вас будет одно место для перебора и можно будет разные условия передавать, как вариант еще глянуть виджеты из коробки, может удобнее будет наследоваться от кого
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы