2010-08-11 2 views
5

Я хочу установить заголовок моей веб-страницы на Ultan.me - Независимо от заголовка сообщения. Я хочу, чтобы он отображал заголовок сообщения. Сообщения отправляются в базу данных MySQL, а строка заголовка называется «title». Любая помощь приветствуется этим небольшим вопросом.Set Page Title using PHP

Update:

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

Кодекс (только необходимо часть этого начало):

<html> 
<head> 

<meta name="keywords" content="Mac user Ultan Casey TheCompuGeeks UltanKC"> 
<title>Ultan.me - <?echo $title;?></title> 

<link rel="stylesheet" href="css/styles.css" type="text/css" /> 
<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> 
<script type="text/javascript" 
src="js/jquery.labelify.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $(":text").labelify(); 
}); 
</script> 
<style> 
a {text-decoration:none} 

</style> 
</head> 
<body> 
<div id="main"> 

<!-- Menu Start --> 
<div id="menu"> 
<ul> 
<li><a href="index.php">home</a></li> 
<li><a href="index.php">about me</a></li> 
<li><a href="index.php">archives</a></li> 
<li><a href="index.php">contact</a></li> 
<li><a href="index.php">gallery</a></li> 

</ul> 
</div> 
<!-- Menu End --> 

<img src="images/banner.png" /> 
<div id="content"> 
<div id="posts"> 
<?php 
mysql_connect ('localhost', 'root', 'root') ; 
mysql_select_db ('ultankc'); 

if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { 
    die("Invalid ID specified."); 
} 

$id = (int)$_GET['id']; 
$sql = "SELECT * FROM php_blog WHERE id='$id' LIMIT 1"; 

$result = mysql_query($sql) or print ("Can't select entry from table php_blog.<br />" . $sql . "<br />" . mysql_error()); 

while($row = mysql_fetch_array($result)) { 

    $date = date("l F d Y", $row['timestamp']); 

    $title = stripslashes($row['title']); 
    $entry = stripslashes($row['entry']); 
    $get_categories = mysql_query("SELECT * FROM php_blog_categories WHERE `category_id` = $row[category]"); 
    $category = mysql_fetch_array($get_categories); 


    ?> 
<p><?php echo "<p id='post-title'><strong><a href=\"post.php?id=". $id . "\">" . $title . "</a></strong></p>"; ?><br /><br /> 
<div id="entry"><?php echo $entry; ?> 
</div><br /><br /> 
<p id="date">Posted in <a href="category.php?category=<?php echo $row['category']; ?>"><?php echo $category['category_name']; ?></a> on <?php echo $date; ?></p> 
</p> 
<h2 id="share-title">Share This Post</h2> 
<div id="social-share"> 
<li id="link-right"><a href="http://twitter.com/home?status= 
I just read <?php echo $title; ?> at http://ultan.me/post.php?id=<?php echo $id; ?>"><center>Twitter</center></a></li> 
<li id="link-left"><a href="http://digg.com/submit?url=http://ultan.me/post.php?id=<?php echo $id; ?>"><center>Digg</center></a></li> 
<br> 
<li id="link-right"><a href="http://www.facebook.com/sharer.php?u=http://ultan.me/post.php?id=<?php echo $id; ?>&t=<?php echo $title; ?>"><center>Facebook</center></a></li> 
<li id="link-left"><a href="http://www.google.com/buzz/post?url=http://ultan.me/post.php?id=<?php echo $id; ?> 
"><center>Google Buzz</center></a></li> 
<div class="clr"></div> 
</div> 
<h2 id="comments-title">Comments</h2> 
<div id="comment-list"> 
    <?php 

} 
$commenttimestamp = strtotime("now"); 

$sql = "SELECT * FROM php_blog_comments WHERE entry='$id' ORDER BY timestamp"; 
$result = mysql_query ($sql) or print ("Can't select comments from table php_blog_comments.<br />" . $sql . "<br />" . mysql_error()); 
while($row = mysql_fetch_array($result)) { 
    $timestamp = date("l F d Y", $row['timestamp']); 
     printf("<div class='comment-ind'><p id='comments'><a id='username' href=\"%s\">%s</a> %s</p>", stripslashes($row['url']), stripslashes($row['name']), $timestamp); 
    print("<p class='comments'>" . stripslashes($row['comment']) . "</p><div class='clr'><br></div></div>"); 

    } 
?> 
<div class="clr"></div> 
<form id="commentform" method="post" action="process.php"> 

<p><input type="hidden" name="entry" id="entry" value="<?php echo $id; ?>" /> 

<input type="hidden" name="timestamp" id="timestamp" value="<?php echo $commenttimestamp; ?>"> 

<input type="text" name="name" id="name" title="Name (required)" /><br /> 

<input type="text" name="email" id="email" title="Mail (will not be published) (required)" /><br /> 

<input type="text" name="url" id="url" title="Website" value="http://" /><br /> 

<br /> 
<textarea title="Your Comment Goes Here" name="comment" id="comment"></textarea></p> 

<p><input type="submit" name="submit_comment" id="submit_comment" value="Add Comment" /></p> 

</form> 
</div> 
<div id="pages"> 

<?php 
$total_results = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS num FROM php_blog")); 
$total_pages = ceil($total_results['num']/$blog_postnumber); 
if ($page > 1) { 
    $prev = ($page - 1); 
    echo "<a href=\"?page=$prev\">&lt;&lt; Newer</a> "; 
} 
for($i = 1; $i <= $total_pages; $i++) { 
    if ($page == $i) { 
     echo "$i "; 
    } 
    else { 
     echo "<a href=\"?page=$i\">$i</a> "; 
    } 
} 
if ($page < $total_pages) { 
    $next = ($page + 1); 
    echo "<a href=\"?page=$next\">Older &gt;&gt;</a>"; 
} 

?> 
</div> 
</div> 
</div> 
<!-- Sidebar Start --> 
<div class="sidebar"> 

<!-- Item 1 --> 
<div id="side-item"> 
<h2> 
<a href="http://www.dailybooth.com/UltanCasey"> 
<img src="images/db-icon.jpg">Dailybooth 
</a></h2> 
<div id="side-item-content"> 
<center> 
<img src="http://dailybooth.com/UltanCasey/latest/medium.jpg" /> 
</center> 
</div> 

</div> 

<!-- Item 2 --> 

<div id="side-item"> 
<h2><img src="images/connect.jpg" />Connect</h2> 
</div> 
<div id="side-item-content"> 
<div class="tweet-title"><p><a href="http://www.twitter.com/UltanKc">Latest Tweet:</a></p></div> 
<div id="tweet"> 
<?php 

function getTwitterStatus($userid){ 
$url = "http://twitter.com/statuses/user_timeline/$userid.xml?count=1"; 

function auto_link_twitter ($text) 
{ 
    // properly formatted URLs 
    $urls = "/(((http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.[a-z]+(\.[a-z]{2,2})?)\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is"; 
    $text = preg_replace($urls, " <a href='$1'>$1</a>", $text); 

    // URLs without protocols 
    $text = preg_replace("/href=\"www/", "href=\"http://www", $text); 

    // Twitter usernames 
    $twitter = "/@([A-Za-z0-9_]+)/is"; 
    $text = preg_replace ($twitter, " <a href='http://twitter.com/$1'>@$1</a>", $text); 

    // Twitter hashtags 
    $hashtag = "/#([A-Aa-z0-9_-]+)/is"; 
    $text = preg_replace ($hashtag, " <a href='http://hashtags.org/$1'>#$1</a>", $text); 
    return $text; 
} 

$xml = simplexml_load_file($url) or die("could not connect"); 

     foreach($xml->status as $status){ 
     $text = $status->text; 
     } 
     echo auto_link_twitter ($text); 
} 


getTwitterStatus("UltanKC"); 

?> 
</div> 
<br> 
<ul> 
<li id="social"><a href="#">YouTube</a></li> 
<li id="social"><a href="#">Twitter</a></li> 
<li id="social"><a href="#">LastFM</a></li> 
<li id="social"><a href="#">Email</a></li> 
</ul> 

</div> 
<!-- Item 2 End--> 
<div id="side-item"> 
<h2><img src="images/archive.jpg" />Archives</h2> 
</div> 
<div id="archive-side"> 
<?php 
mysql_connect ('localhost', 'root', 'root') ; 
mysql_select_db ('ultankc'); 

$result = mysql_query("SELECT FROM_UNIXTIME(timestamp, '%Y') AS get_year, COUNT(*) AS entries FROM php_blog GROUP BY get_year"); 

while ($row = mysql_fetch_array($result)) { 
    $get_year = $row['get_year']; 
    $entries = $row['entries']; 

    echo "<li id='tag'><a href=\"archives.php?year=" . $get_year . "\">Entries from " . $get_year . " (" . $entries . ")<br /></a></li>"; 
} 

$result1 = mysql_query("SELECT * FROM php_blog_categories ORDER BY category_name ASC"); 

while($row = mysql_fetch_array($result1)) { 

    $result2 = mysql_query("SELECT COUNT(`id`) AS entries FROM php_blog WHERE category = $row[category_id]"); 
    $num_entries = mysql_fetch_array($result2); 

    echo '<li id="tag"><a href="category.php?category=' . $row['category_id'] . '">' . $row['category_name'] . ' (' . $num_entries['entries'] . ')</a></li>'; 

} 
?> 
</div> 

</div> 

<div class="clr" /> 
</div> 
<!-- Sidebar End --> 
<div id="footer"> 
<p> &copy; Ultan Casey 2010</p> 
<p style="margin-top: -18px; float:right"><a href="index.php">Home</a> | <a href="about.php">About Me</a> | <a href="mailto:[email protected]">Email Me</a></p> 
</div> 
</div> 
</div> 
</body> 
</html> 
?> 
+3

1 для троллинга. – Frankie

ответ

2

Подведите поиск данных в верхней части сценария, и после этого использования:

<title>Ultan.me - <?php echo htmlspecialchars($title, ENT_QUOTES, 'UTF-8'); ?></title> 
+0

Вы забыли «Ultan.me» –

+0

Когда я попытаюсь, чтобы область после «Ultan.me -» была пуста.Я не открыл PHP в самом начале документа. Нужно ли мне? – 2010-08-11 23:49:17

+0

@klez: так? он сам это придумает. – zerkms

7

Вы разобрать поле из базы данных, как обычно.

Тогда предположим, что вы поместите его в переменной с именем $title, вы просто

<html> 
<head> 
<title>Ultan.me - <?php echo htmlspecialchars($title);?></title> 
</head> 

EDIT:

Я вижу вашу проблему. Вы должны установить $title перед использованием. То есть, вы должны запросить базу данных до <title>...

+0

Когда я пытаюсь, чтобы область после «Ultan.me -» была пуста. Я не открыл PHP в самом начале документа. Нужно ли мне? – 2010-08-11 23:52:33

+6

короткие теги - это странная практика – zerkms

+0

Какие zerkms пытаются сказать, вам следует использовать Вместо

1

Проблема заключается в том, что $title ссылается на строку 5, прежде чем она будет назначена в строке 58. Переупорядочение кода непросто, поскольку данные извлекаются и выводятся на в то же время. Просто, чтобы проверить, как something like this work?

Поскольку вы только извлекаете одну строку, вам не нужно использовать цикл while, но я оставил ее с надеждой, что вам будет легче связываться с вашим текущий код. Все, что я сделал, - это удалить фактический результат извлечения данных и добавить переменные для названия категории и категории, которые затем упоминаются как обычно позже. Кроме того, я не тестировал это. :)

1

Это будет сложно изменить код, чтобы сделать эту работу, но я буду стараться :)

Итак, поместите это в верхней части кода:

<?php require_once('mysql.php'); ?> 

верхняя часть файла должна выглядеть следующим образом:

<?php require_once('mysql.php'); ?> 
<html> 
    <head> 

    <meta name="keywords" content="Mac user Ultan Casey TheCompuGeeks UltanKC"> 
    <title>Ultan.me - <?php echo htmlspecialchars($title); ?> </title> 

Затем создайте файл с именем mysql.php в том же каталоге, что файл, который содержит код, который вы цитируемый находится в

.

Помещенный это mysql.php:

<?php 
mysql_connect ('localhost', 'root', 'root'); 
mysql_select_db ('ultankc'); 

if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { 
    die("Invalid ID specified."); 
} 

$id = (int)$_GET['id']; 
$sql = "SELECT * FROM php_blog WHERE id='$id' LIMIT 1"; 

$result = mysql_query($sql) or print ("Can't select entry from table php_blog.<br />" .  $sql . "<br />" . mysql_error()); 

$res = mysql_fetch_assoc($result); 

$date = date("l F d Y", $res['timestamp']); 
$title = $res['title']; 
$entry = $res['entry']; 
$get_categories = mysql_query("SELECT * FROM php_blog_categories WHERE `category_id` = $res['category']"); 
$category = mysql_fetch_array($get_categories); 

?> 

Ну, надеюсь, что помог :)

21

Вот метод я использую (для подобных вещей, а не только название):

<? 
ob_start(); // Buffer output 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 

<head> 
<title><!--TITLE--></title> 
</head> 

<body> 
<? 
$pageTitle = 'Title of Page'; // Call this in your pages' files to define the page title 
?> 
</body> 
</html> 
<? 
$pageContents = ob_get_contents(); // Get all the page's HTML into a string 
ob_end_clean(); // Wipe the buffer 

// Replace <!--TITLE--> with $pageTitle variable contents, and print the HTML 
echo str_replace ('<!--TITLE-->', $pageTitle, $pageContents); 
?> 

Обычно PHP работает с выполнением любых битов кода и печать всего вывода непосредственно в браузере.Если вы скажете "echo 'Some text here.';", эта строка будет отправлена ​​браузером и будет освобождена из памяти.

Что делает буферизация вывода, говорит: «Распечатайте весь вывод в буфер. Удерживайте его. Не отправляйте никому в браузер, пока я вам не скажу».

Так что это значит, что он буферизует все HTML-страницы ваших страниц в буфер, а затем в самом конце, после тега, он использует ob_get_contents(), чтобы получить содержимое буфера (обычно это HTML вашей страницы исходный код, который уже был отправлен браузером) и помещает его в строку.

ob_end_clean() освобождает буфер и освобождает некоторую память. Нам больше не нужен исходный код, потому что мы просто сохранили его в $ pageContents.

Затем, наконец, я просто нахожу & замену на исходный код вашей страницы ($ pageContents) для любых экземпляров '' и заменяю их на любую переменную $ pageTitle. Конечно, он заменит <title><!--TITLE--></title> на название вашей страницы. После этого я повторяю $ pageContents, как и браузер.

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

Надеюсь, мои комментарии достаточно ясны. Посмотрите ob_start() в руководстве по PHP (http://php.net/ob_start), если вы хотите, чтобы точно знать, как это работает (и вы должны) :)

+1

Так как вы все равно сталкиваетесь с этой проблемой, почему бы просто не использовать шаблонный движок, например Smarty? – Brad

+0

Работает как шарм. благодаря –

2

Вы должны установить значение $title, прежде чем вторя его.

Кроме того, вы действительно должны дезинфицировать любые данные, прежде чем использовать его в запросах, поскольку это создает угрозу безопасности

0
<?php echo APP_TITLE?> - <?php echo $page_title;?> 

это должно работать нормально для вас

1

Я знаю, что это старый пост, но прочитав это я считаю, что это решение намного проще (хотя технически оно решает проблему с Javascript, а не PHP).

<html> 
    <head> 
    <title>Ultan.me - Unset</title> 
    <script type="text/javascript"> 
     function setTitle(text) { 
      document.title = text; 
     } 
    </script> 
    <!-- other head info --> 
    </head> 

    <?php 
    // Make the call to the DB to get the title text. See OP post for example 
    $title_text = "Ultan.me - DB Title"; 

    // Use body onload to set the title of the page 
    print "<body onload=\"setTitle('$title_text')\" >"; 

    // Rest of your code here 
    print "<p>Either use php to print stuff</p>"; 
    ?> 
    <p>or just drop in and out of php</p> 
    <?php 

    // close the html page 
    print "</body></html>"; 
    ?> 
2

header.php имеет тег заголовка установлен в <title>%TITLE%</title>; символы «%» очень важны, так как вряд ли кто типы% TITLE%, так что вы можете использовать, что для str_replace позже(). Затем, вы используете выходной буфер, как так

<?php 
ob_start(); 
include("header.php"); 
$buffer=ob_get_contents(); 
ob_end_clean(); 
$buffer=str_replace("%TITLE%","NEW TITLE",$buffer); 
echo $buffer; 
?> 

Для получения дополнительной справки, нажмите PHP - how to change title of the page AFTER including header.php?

1

Что об использовании что-то вроде:

<?php 
    $page_title = "Your page tile"; 
    include("navigation.php");    // if required 
    echo("<title>$page_title</title>"); 
?> 
0

создать новую страницу PHP и добавить этот код:

<?php 
 
function ch_title($title){ 
 
    $output = ob_get_contents(); 
 
    if (ob_get_length() > 0) { ob_end_clean(); } 
 
    $patterns = array("/<title>(.*?)<\/title>/"); 
 
    $replacements = array("<title>$title</title>"); 
 
    $output = preg_replace($patterns, $replacements,$output); 
 
    echo $output; 
 
} 
 
?>

в <head> добавить код: <?php require 'page.php' ?> и на каждой странице, вы вызываете функцию ch_title('my title');