Как я могу использовать PHP Simple HTML DOM Parser для получения содержимого тега ‹h1›‹/h1›?

Я новичок в PHP =) Сейчас я использую PHP для своего шаблона сайта. У меня есть заголовок, содержащий всю мою информацию <head></head>. Что я хочу сделать, так это написать код, который будет брать содержимое тега <h1></h1> со страницы и отображать его в теге <title></title> в моем включении header.php.

Я получил PHP Simple HTML DOM Parser отсюда: [http://simplehtmldom.sourceforge.net/][1], и я нашел код (я забыл где во всех моих гуглях), который выглядит следующим образом:

<?php
$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$html = file_get_html('http://www.myurl.com/');
foreach($html->find('#content h1') as $element){
    echo $element->plaintext;}
?>

Я думаю, что это должно повторять содержимое тега h1? Как я уже сказал, я новичок в PHP и знаю только основы, и я действительно не знаю ООП (пока), поэтому извините, если я задаю глупый вопрос.

Похоже, он получает текущую страницу, затем помещает содержимое тега h1 в переменную $element, а затем повторяет его. Но ничего не происходит, когда я помещаю его на свою страницу. Может ли кто-нибудь помочь мне с тем, что я делаю неправильно? Спасибо за чтение!! знак равно

РЕДАКТИРОВАТЬ: вот мой HTML

Из файла header.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<?php
/* current page url */
function curPageURL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}
?>

<?php include '/home/dreami14/public_html/simplehtmldom/simplehtmldom/simple_html_dom.php' ?>

<title>
<?php
$url = curPageURL();
$html = file_get_html($url);
foreach($html->find('#main h1') as $element){
    echo $element->plaintext;}
?></title>

<link rel="stylesheet" type="text/css" href="/stylesheet.css" />
</head>
<body>

Из test.php:

<?php include '/home/dreami14/public_html/design/includes/head.php' ?>

<div id="main">
<h1>This should be the title</h1>
<p>Blah blah</p>
</div>

</body>
</html>

Я не получаю никаких ошибок, но мой <title></title> пуст.

Изменить, чтобы добавить: также я повторил $url в самом документе, поэтому я знаю, что эта часть работает


person KeriLynn    schedule 14.05.2010    source источник
comment
Мне кажется, что это бесконечный цикл. Чтобы отобразить всю страницу, вы вызываете один и тот же URL-адрес внутри своего скрипта, который затем пытается создать всю страницу, которая снова вызывает URL-адрес... понял мою точку зрения?   -  person Felix Kling    schedule 14.05.2010
comment
Спасибо, Феликс, поэтому, когда я это делаю: [[[ $html = file_get_html($url); ]]], это та часть, которая вызывает всю страницу? Есть ли другой способ сделать это, о котором вы знаете?   -  person KeriLynn    schedule 14.05.2010
comment
Простой парсер HTML DOM — хороший скрипт. Ваш шаблон - плохая идея.   -  person Kemo    schedule 15.05.2010


Ответы (3)


Вы не говорите, как структурирован ваш HTML, но если вы хотите найти h1 с идентификатором content, вам нужно использовать

foreach($html->find('h1#content') as $element){

так, как вы делаете это прямо сейчас, он говорит: «найти любой элемент h1 внутри другого элемента с идентификатором content».

person Pekka    schedule 14.05.2010
comment
Спасибо за ваш ответ, это то, что я хотел сделать. Я только что попробовал несколько разных способов: присвоив тегу h1 идентификатор заголовка и изменив php-код на h1 # title, но он по-прежнему ничего не повторяет :( - person KeriLynn; 14.05.2010

Я бы немного реструктурировал ваш код. По сути, вы пытаетесь получить содержимое в h1 до его заполнения. В вашем test.php я бы определил массив с метаданными, а затем включил заголовок.
Вот так:

test.php

<?php 
$meta = array();
$meta['title'] = "This should be the title";

include '/home/dreami14/public_html/design/includes/head.php' 

?>

<div id="main">
<h1><?php echo $meta['title'] ?></h1>
<p>Blah blah</p>
</div>

</body>
</html>

head.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <title>
 <?php echo (isset($meta) && isset($meta['title'])) ? $meta['title'] : "Default title"; ?>
   </title>
   <link rel="stylesheet" type="text/css" href="/stylesheet.css" />
</head>
<body>

Но если вы начинаете делать более сложные вещи, вам следует взглянуть на Model-View-Controller и, например, фреймворк Zend, который его реализует.

person Felix Kling    schedule 15.05.2010

Я думаю, что это так, только печатать дочерний контент:

html = file_get_html($url);
foreach($ret->children as $child) {  
   echo $child;
}
person superedi    schedule 14.07.2010