Поддержка Проблемы и решения Не могу присвоить значение переменной

  • Всем привет!

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

    
    <?php
    
    global $DateControl; /*ПРОБУЮ   ГЛОБАЛЬНУЮ ПЕРЕМЕННУЮ*/
    
    class td_module_8 extends td_module {
    
        function __construct($post, $module_atts = array()) {
            //run the parrent constructor 
            parent::__construct($post, $module_atts);
        }
    
        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 новость вава в ывывыв

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

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

    Попробуйте переместить эту строку внутрь метода render().

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

    Модератор Yuri

    (@yube)

    при каждом выводе записи (при каждом цикле) оно создается заново.

    Чтобы по окончании работы функции внутренняя переменная не уничтожалась, ее надо объявлять как static.

    как 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;   
    				  
       
       
       
    		 
    

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

    View post on imgur.com

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

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

    • Ответ изменён 5 лет, 9 месяцев назад пользователем yessoftmk.

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

    визуально в браузере я вижу чисто дату, а в исходнике совсем другое. Теперь все сравнивает и все красиво — https://i.imgur.com/37SnHRV.png

    Всем спасибо

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Не могу присвоить значение переменной» закрыта для новых ответов.