@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.
Мои личные попытки сводились к тому что, переменная равна значению из бд и в не перебора я не смог применить.
Вопрос таков, как возможно избежать данного повторения, буду очень признателен если поделитесь ссылкой куда мне такому не опытному пройтись.
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Arik
Попробуйте Виджеты, так у вас будет одно место для перебора и можно будет разные условия передавать, как вариант еще глянуть виджеты из коробки, может удобнее будет наследоваться от кого
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы