Задать вопрос
@alex0176

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

Есть функция:

function dataDebug($data, $flag=false) {

			echo '<div class="mc__debugger">';
			echo '<div class="debug-entry">';
			if( !$flag ) {
				echo '<pre>';				
				print_r($data);
				echo '</pre>';
			}
			else {
				echo '<pre>';
				var_dump($data);
				echo '</pre>';
			}
			echo '</div>';
			echo '</div>';
	}
}

Она может вызывается несколько раз на странице. В качестве параметра передаются данные, которые затем эта функция отображает на экран с помощью print_r($data);. Возможно ли как то реализовать данный функционал, чтобы при вызове этой функции создавался только один контейнер <div class="mc__debugger"></div> с содержимым, которое будет накапливаться внутри него?
Сейчас, если если эта функция вызывается несколько раз, то она создает несколько отдельных контейнеров:

<div class="mc__debugger">Content HTML...</div>
<div class="mc__debugger">Content HTML...</div>
<div class="mc__debugger">Content HTML...</div>

А мне нужно, чтобы контейнер был только один, а вот внутреннее содержимое контейнера заполнялось по мере вызовов данной функции. Например:
Первый вызов функции - результат:

<div class="mc__debugger">
Content HTML 1
</div>

Второй вызов функции - результат:

<div class="mc__debugger">
Content HTML 1
Content HTML 2
</div>
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Должно сработать нечто подобное (раз уж в тегах JS указан):
function dataDebug($data, $flag = false)
{
    echo '<div class="debug-entry">';
    echo '<pre>';
    if (!$flag) {
        print_r($data);
    } else {
        var_dump($data);
    }
    echo '</pre>';
    echo '</div>';

    echo <<<JS
    <script>
    if (!window.debug_entries_moved) {
        window.debug_entries_moved = true;
    
        const $container = document.createElement(`div`);
        $container.classList.add(`mc__debugger`);
    
        [...document.querySelectorAll(`.debug-entry`)].forEach(($entry) => {
            $container.appendChild($entry);
        });
    
        document.body.appendChild($container);
    }
    </script>
    JS;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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