Как автоматом заполнить <title> текстом из <h1>? (продолжение)

12
M5
На сайте с 28.12.2005
Offline
135
2432

Гуру, подскажите пожалуйста!

Вот в этой старой теме показан пример, когда все размещено в одном файле php. Однако если есть иклюды, то совершенно не понятно как организовать из <h1> в <title>.

К примеру, у меня хидер такой:

<HTML>

<HEAD>

<TITLE><?=$title ?></TITLE>

<META http-equiv="Content-Type" content="text/html; charset=windows-1251">

<META NAME="Description" content="<?=$descr?>">

<meta name="keywords" content="">

<meta http-equiv="keywords content="">

<meta name="resourse-type" content="document">

<LINK rel="stylesheet" type="text/css" href="file.css">

</head>

<BODY...

Сама страница, такая:

<?php

$title=Название';

$descr='Название';

include_once('./_header.php');

?>

<?include 'body.php';?>

<h1>Заголовок</h1>

<p>Какой то текст.</p>

<?php

include_once("./_footer.php");

?>

И футер такой:

</body>

</html>

Собственно вопрос, как тут можно организовать <title> текстом из <h1>?

Спасибо.

ewg777
На сайте с 04.06.2007
Offline
225
#1

Сначала всё подготовить для вывода, а потом разом вывести нельзя?

K
На сайте с 31.08.2006
Offline
47
#2

В хидер самой первой строчкой добавить

<?php ob_start(); ?>

В самый конец футера добавить:

<?php 

$content = ob_get_content();
ob_end_clean();
preg_match ( "/<h1>(.*)<\/h1>/i", $content, $matches);
preg_replace ( "/<title>(.*)<\/title>/i", '<title>' . $matches[1] . '</title>', $content);
echo $content;
?>

Не уверен, что этот код сразу заработает - т.к. писал "на коленке". Но идея должна быть понятна.

Размещаем статьи - Украинское СМИ, ПР5, ТИЦ 3000, ЯК, ДМОЗ, домену > 10 лет (/ru/forum/416715)
M5
На сайте с 28.12.2005
Offline
135
#3
В хидер самой первой строчкой добавить
PHP код:
<?php ob_start(); ?>
В самый конец футера добавить:
PHP код:
<?php
$content = ob_get_content();
ob_end_clean();
preg_match ( "/<h1>(.*)<\/h1>/i", $content, $matches);
preg_replace ( "/<title>(.*)<\/title>/i", '<title>' . $matches[1] . '</title>', $content);
echo $content;
?>
Не уверен, что этот код сразу заработает - т.к. писал "на коленке". Но идея должна быть понятна.

:( Fatal error: Call to undefined function: ob_get_content() in $content = ob_get_content(); (это в футере)

K
На сайте с 31.08.2006
Offline
47
#4
Michael-5:
:( Fatal error: Call to undefined function: ob_get_content() in $content = ob_get_content(); (это в футере)

$content = ob_get_contents();

(я букву одну пропустил)

M5
На сайте с 28.12.2005
Offline
135
#5
Kirilll:
$content = ob_get_contents();

(я букву одну пропустил)

Ошибка исчезла, но title пустой всё-равно:(

K
На сайте с 31.08.2006
Offline
47
#6

сейчас немного занят.

через полчасика смогу отладить и выложить готовый код

Kirilll добавил 03.11.2009 в 16:51

Строчку в коде

preg_replace ( "/<title>(.*)<\/title>/i", '<title>' . $matches[1] . '</title>', $content);

надо заменить на

$content = preg_replace ( "/<title>(.*)<\/title>/i", '<title>' . $matches[1] . '</title>', $content);

Должно заработать.

Qinghua
На сайте с 01.09.2009
Offline
103
#7

удалено.....

M5
На сайте с 28.12.2005
Offline
135
#8
Kirilll:
сейчас немного занят.
через полчасика смогу отладить и выложить готовый код

Kirilll добавил 03.11.2009 в 16:51
Строчку в коде
preg_replace ( "/<title>(.*)<\/title>/i", '<title>' . $matches[1] . '</title>', $content);

надо заменить на
$content = preg_replace ( "/<title>(.*)<\/title>/i", '<title>' . $matches[1] . '</title>', $content);

Должно заработать.

Просто супер!!!

Всё заработало!!!

Спасибище!!!

И теперь чтобы вот совсем обнаглеть, как прицепить ко всем этому скажем название сайта, т.е. НОВОСТЬ(из h1) > Название сайта

K
На сайте с 31.08.2006
Offline
47
#9

$content = preg_replace ( "/<title>(.*)<\/title>/i", '<title>' . $matches[1] . ' &gt; Название сайта</title>', $content);

Соответственно " &gt; Название сайта" можете менять на все что угодно. Главное - что если у вас в названии сайта есть одиночная кавычка ( ' ), перед ней надо поставить обратный слеш (чтоб было вот так - \' ).

Спасибо за комментарий к репе ;-)

M5
На сайте с 28.12.2005
Offline
135
#10
Kirilll:
$content = preg_replace ( "/<title>(.*)<\/title>/i", '<title>' . $matches[1] . ' &gt; Название сайта</title>', $content);

Соответственно " &gt; Название сайта" можете менять на все что угодно. Главное - что если у вас в названии сайта есть одиночная кавычка ( ' ), перед ней надо поставить обратный слеш (чтоб было вот так - \' ).

Спасибо за комментарий к репе ;-)

Всё заработало, правда \ не пригодилось, работает и так... это норм?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий