LifeAct
@LifeAct
Создаем и раскручиваем, не ставим на конвейер

Как в цикле присвоить переменной значение?

Всем привет!

Есть необходимость сделать разделение ленты по датам! У меня в шаблоне есть цикл вывода записей ленты:

<?php

global $DateControl; /*ПРОБУЮ   ГЛОБАЛЬНУЮ ПЕРЕМЕННУЮ*/



class td_module_8 extends td_module {
    function render() {
        ob_start();
        $title_length = $this->get_shortcode_att('m8_tl');
		
		date_default_timezone_set('Europe/Kiev');
		$DateNow =   date("d.m.Y");
		//$DateControl = "1"; ЕСЛИ ТУТ ДЕЛАТЬ ПРИСВОЕНИЕ - ПРИСВАИВАЕТ
		$DateNews = $this->get_date();	
        ?>

        <div class="<?php echo $this->get_module_classes();?>">
            <div class="item-details">
			<?php //dsy даты
			if($this->get_date() != $DateControl ){  //ЭТО РАБОЧАЯ ЛОГИКА, ЕСЛИ ДАТА ТЕКУЩЕГО ПОСТА ОТЛИЧАЕТСЯ ОТ КОНТРОЛЬНОЙ ДАТЫ (DateControl - ПРИСВАИВАЕМ В КОНЦЕ ЦИКЛА, И ВОТ ПРИСВОЕНИЕ НИЖЕ, ОНО НЕ РАБОТАЕТ), ТО СТАВИТ ДАТУ НОВОГО ДНЯ
				  echo   $this->get_date(); 			   
			}
			?>

			<?php //DSY ВАЖНОСТЬ			 
			$i = get_field( "important-news", $this->post->ID ); 
			//$icon = '<img src= ' + get_field( "img-icon", $this->post->ID ) + '>';
			$icon =   get_field( "img-icon", $this->post->ID )  ;

			switch ($i) {
				case null:
					 echo $this->get_title($title_length, $icon);
					break;				 

				case "important":
					 echo $this->get_titleImportant($title_length, $icon); 
					break;

				case "importanthard":
					  echo $this->get_title_very_Important($title_length, $icon); 
					 break;
			}
			?> 

				 <?php /* echo $this->get_image('td_324x235'); */ ?>

                <div class="td-module-meta-info">
                    <?php if (td_util::get_option('tds_category_module_8') == 'yes') { echo $this->get_category(); }?>
                    <?php echo $this->get_author();?>
                    <?php echo $this->get_date();?>  
                    <?php /*echo get_the_time('', $this->post->ID ); */?>				
                    <?php echo $this->get_comments();?>					 
                </div>
            </div>

            <?php echo $this->get_quotes_on_blocks();?>
			<?php  
			$DateControl = $this->get_date(); // ВОТ ТУТ ЗАГВОЗДКА, ПРИСВОЕНИЕ НИГДЕ НЕ РАБОТАЕТ, ТОЛЬКО В ВЕРХНЕЙ ЧАСТИ КОДА, А МНЕ ПРИСВАИВАТЬ ДАТУ НАДО В КОНЦЕ КАЖДОЙ ИТЕРАЦИИ ЦИКЛА
			?>
        </div>
		 
        <?php return ob_get_clean();
    }
}


В ИТОГЕ должно получиться:

20/07/2018
12:00 новость вава в
12:40 новость вава в вава
18:00 новость вава в ывывыв

19/07/2018
12:00 новость вава в
12:40 новость вава в вава
18:00 новость вава в ывывыв

18/07/2018
12:00 новость вава в
12:40 новость вава в вава
18:00 новость вава в ывывыв

UPD 1:

Я кажется понял. $DateControl всегда имеет первичное значение, которое задается при объявлении, либо нулевое значение если оно не задается, потому что при каждом выводе записи (при каждом цикле) оно создается заново. Значение что присваиваю в конце просто не сохраняется.

UPD 2:

Чтобы переменная сохраняла значение добавил static.

Но теперь почему то условный оператор не работает:
$DateNews = $this->get_date();
static $DateControl ; 

 if( $DateControl !=  $DateNews ){
				  echo   'DateControl !=  DateNews </br></br>';
				  echo   $DateControl; 				   
				   
			}
			
				  echo   'Обе переменные вне</br>';  
				  echo   $DateControl;  
				  echo   $this->get_date(); 

				   //echo   $DateNews;


Добавил вывод переменных, чтобы видеть них содержание, картина:

v53qqPk.png

DateControl != DateNews — тут же даты равны!, а блок условного оператора срабатывает
23.07.2018

Обе переменные вне
23.07.2018
23.07.2018

UPD: 3

разобрался, оказывается $this->get_date() брала не просто дату, а:
<time class=»entry-date updated td-module-date» datetime=»2018-07-23T23:22:53+03:00″>23.07.2018</time>

визуально в браузере я вижу чисто дату, а в исходнике совсем другое. Теперь все сравнивает и все красиво - 37SnHRV.png

Всем спасибо
  • Вопрос задан
  • 1372 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Ключевое слово global должно быть внутри функции - оно не для объявления переменных как глобальных, а для импорта их в текущую область видимости.

Но раз у вас используется класс, гораздо разумнее использовать статическое свойство этого класса вместо глобальной переменной.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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