Конструкция require_once ломает всю вёрстку

Рейтинг: 1Ответов: 3Опубликовано: 11.04.2015

Пытаюсь писать код в стиле MVC. И как только добавляю require_once "../header.php", то ломается вёрстка. Пример view:

<?php    
$header = require_once '../header.php';
$mtar = require_once '../mtar.php';    
return "
$header
$mtar   
<div class='wrap'>
        <div id='content'>
            <div class='column-left'>";

В таком варианте на экран в html выдётся сначала всё, что перечислено в require_once, а уже затем представление самой страницы. Короче говоря, выдаётся в нарушении логики page.php:

<?php
return "<!DOCTYPE html>
<html>
<!-- здесь meta и проч скрипты -->    

$pageData->content
$pageData->scriptElements

</body>
</html>";

Если убрать из кода require_once, то вёрстка будет без ошибок. Подскажите, как правильно включить ../header.php, ../footer.php и другие файлы?

Ответы

▲ 1Принят
  1. Пользуйтесь функциями или классами для формирования блоков
  2. require_once возвращает true если файл успешно загружен

Например в вашем случае:

blocks.php

<?php
function printHeader($options) {
?>
<!DOCTYPE html>
<html>
<!-- здесь meta и проч скрипты -->    
<?php
    echo $options->content;
    echo $options->scriptElements;
}
// ... дальше другие функции

page.php

require_once("blocks.php");
printHeader($pageData);
// что-то выводим на страницу
printFooter($pageData);

PS. Кстати верстка ломается в первую очередь из-за того, что вы закрываете теги body и html в "хедере"

▲ 1
$header = require_once '../header.php';
$mtar = require_once '../mtar.php';  

Заменить на

$header = file_get_contents('../header.php');
$mtar = file_get_contents( '../mtar.php' );    

Либо убрать $header и $mtar из html

MVC тут у тебя и не пахнет, рекомендую ознакомиться с каким-нибудь фреймворком

▲ 1

Делай только так:

require_once '../header.php';
require_once '../mtar.php';    

И только в тех местах, где данный файл должен выводиться. Не нужно запихивать в переменную файлы, которые должны просто сразу выводиться.