2014-02-19 5 views
0

Я знаю, что эта тема была опубликована повсюду, но их вопрос не я хочу. Я хочу вставить некоторые HTML-коды перед загрузкой страницы , не касаясь исходного кода на странице.Вставьте HTML-коды в указанное место

Пусть мой заголовок был оказываемая функцией называется render_header():

function render_body() { 
return "<body> 
    <div class='container'> 
    <div class='a'>A</div> 
    <div class='b'>B</div> 
    </div> 
    </body>"; 
} 

Теперь, я хочу, чтобы вставить HTML-коды с помощью PHP без редактирования render_body(). Я хочу функцию, которая вставить некоторые divs в container'div.

render_body(); 
<?php *//Insert '<div class="c" inside div container* ?> 
+0

так почему бы вам не создать некоторые страницы с теми кодами, которые вы хотите, и 'include_once'? – jycr753

+0

Ваша функция не сработает, потому что вы не избегаете двойных кавычек. – Prix

+0

Предполагая, что 'render_body()' является глобально включенной функцией, используемой во всем магазине (и вы исправили синтаксис с кавычками), вы можете использовать DOMDocument, я полагаю, читать в 'render_body()' как строку и манипулировать это после факта: http://uk3.php.net/domdocument – CD001

ответ

1

Единственное, что я могу думать о том, чтобы включить буферизацию вывода, а затем использовать DOMDocument класс читать весь буфер, а затем внести в него изменения. Это стоит сделать некоторые чтение документации (http://www.php.net/manual/en/book.dom.php), представленной в сценарии ...

т .:

<?php 


function render_body() { 
return "<body> 
    <div class='container'> 
    <div class='a'>A</div> 
    <div class='b'>B</div> 
    </div> 
    </body>"; 
} 

$dom = new DOMDocument(); 

$dom->loadHTML(render_body()); 

// get body tag 
$body = $dom->getElementsByTagName('body')->item(0); 

// add a new element at the end of the body 
$element = $dom->createElement('div', 'My new element at the end!'); 
$body->appendChild($element); 

echo $dom->saveHTML(); // echo what is in the dom 

?> 

EDIT:

В соответствии с предложениями CD001, я испытал этот код и оно работает.

+0

Вам действительно нужно включить буферизацию вывода? 'render_body()' на самом деле не передает тело (странно), он просто возвращает строку, содержащую его, вы можете просто использовать '$ dom-> loadHTML (render_body());' – CD001

+0

... бит "circlejerk" - но этот ответ в равной степени действителен и был до меня так +1;) – CD001

+0

Приветствует человека, но, как я уже сказал в комментарии к вашему. Если OP понимает XPath, это лучший вариант, поскольку PHP будет намного быстрее разбираться. –

1

Подобно тому, как альтернатива с использованием XPath - это должно загрузится на выходе из render_body() к XML (DOMDocument) объекта и создать XPath объект запроса ваш HTML, так что вы можете легко работать, где вы хотите вставить новый HTML.

Это, вероятно, будет работать только в том случае, если вы используете XML хорошо сформированный HTML.

//read in the document 
$xml = new DOMDocument(); 
$xml->loadHTML(render_body()); 

//create an XPath query object 
$xpath = new DOMXpath($xml); 

//create the HTML nodes you want to insert 
// using $xml->createElement() ... 

//find the node to which you want to attach the new content 
$xmlDivClassA = $xpath->query('//body/div[@class="a"]')->item(0); 
$xmlDivClassA->appendChild(/* the HTML nodes you've previously created */); 

//output 
echo $xml->saveHTML(); 

Принимал некоторое время, когда я должен был обратиться к документации ... слишком много JQuery в последнее время это разрушает мою способность манипулировать DOM, не смотря вещи: \

+0

Это очень приятно, если вы знаете xpath. Будет супер быстрый тоже +1. –

Смежные вопросы