Как поднять дные выше и вывести их PHP 7.1

83
03 июня 2021, 01:00

Всем привет, прошу помочь в решение очень сложного вопроса (Мучаюсь с ним уже 4 дня).

Суть вопроса: Есть несколько функций, которые собирают данные со страницы объединяют их в третий функции и выводят массивами в нужных местах. Но есть одно но - Данные не хотят выводится выше функций, в которых он передаются.

Получаю данные вот так (код 1):

$APPLICATION->SetTitle("h1 документа");
$APPLICATION->SetPageProperty("title", "Тайтл");
$APPLICATION->SetPageProperty("description", "Описание");

Обрабатываю и объединяю для вывода вот так:

// Получаем тег H1 траницы и отправляем в SetMeta() и в ShowTitle($FALSE)
    function SetTitle($H1){
        $this->SetPageProperty('h1',$H1);
    }
    // Получаем title и description и отправвляем в GetPageProperty()
    private $arr = []; 
    public function SetPageProperty($TYPE,$TAGS)
    { 
        $this->arr['TAGS'][$TYPE]=$TAGS; 
    }
    // Объединяем все функции в один массив и передаём в GetPagePropertyList($TYPE);
    public function GetPageProperty(){ 
        return $this->arr; 
    } 
    // Получаем все мета теги сайта и отправвляем в SetMeta()
    public function GetPagePropertyList($TYPE){
        //Получаем данные из БД
        global $arItems,$arParams;
        //Получаем данные из БД
        $this->SetContent();
        if($TYPE=='h1'){
            return $this->arr['TAGS']['h1'];
        }
        if($TYPE=='title'){
            return $this->arr['TAGS']['title'];
        }
        if($TYPE=='description'){
            return $this->arr['TAGS']['description'];
        }
    }

Вывожу на страницу вот так:

H1 в HEAD
<h1><?=$APPLICATION->ShowTitle(false);?></h1>
TITLE в HEAD                    
<h1><?=$APPLICATION->ShowTitle(" ");?></h1>
description в HEAD
<h1><?=$APPLICATION->GetPagePropertyList('description');?></h1>

Ошибка заключается в том, что если вставляю код вывода данных после код_1 то всё работает, а если перед то нет. Мне нужно, что бы работало перед кодом_1

PHP 7.1

Прошу помощи, так как сам уже перепробовал все возможные варианты.

Answer 1

не пробовали с ob_star ob_get_contents?

Сам туплю)) поменял местами

ob_start();
echo '<p>код_1</p>';
$data = ob_get_contents();
ob_clean();
echo "<p>данные</p>";
echo $data;

код_1 выведется после вывода данных

Answer 2

Поместите нужное в переменную, где оно выводится гарантировано, а потом эту переменную выведите к показу там, где Вам нужно вывод сделать. Иного решения не будет - в этом случае, имхо.

Answer 3

Моё сообщение не является ответом на ваш вопрос, но уж сильно ваш метод режет глаза) По этому я его немного переписал:

 public function getPagePropertyList($type)
 {   
      return $this->arr['TAGS'][$type];
 }

Не называйте переменные заглавными буквами, так принято называть константы. Не пользуйтесь глобальными переменными от них больше вреда чем пользы, и зачем вам вызов этого в функции?

/Получаем данные из БД
        global $arItems,$arParams;
        //Получаем данные из БД
        $this->SetContent();

Так же название set используется для записи, а не для получения данных, для этого служит название get.

READ ALSO
Data Transfer Object: как инициализировать и должны ли быть геттеры?

Data Transfer Object: как инициализировать и должны ли быть геттеры?

Недавно узнал о паттерне DTO, до этого в приложении мои методы возвращали массивы - и это был ад их рефакторитьТеперь понял, что этот паттерн...

74
Как правильно массово загрузить файлы в форме?

Как правильно массово загрузить файлы в форме?

Всем приветНужно загружать 3 файла в форме, они хранятся в отдельной таблице

106
Как в java получить все числа месяца?

Как в java получить все числа месяца?

Всем доброго времени суток! Например, у меня на входе есть String date = "052018" (май 2018)

276