【问题标题】:How to change title of the page after including header.php?PHP - 如何在包含 header.php 之后更改页面标题?
【发布时间】:2012-10-12 03:11:06
【问题描述】:

page.php:

<?php
include("header.php");
$title = "TITLE";
?>

header.php:

<title><?php echo $title; ?></title>

我希望在包含头文件之后设置我的标题。是否有可能做到这一点?我在 php-fusion tvs 上看到过一些类似的东西:http://docs.php-fusion.it/temi:output_handling

【问题讨论】:

  • 最好的办法是改变你程序的逻辑,这样你就可以在输出标题标签之前及时定义标题。有一些变通方法,但它们很笨拙。
  • +1 佩卡。对于“kludgy”,请阅读“复杂”、“相对较高的处理成本”和“对于必须维护该东西的人来说太疯狂了”。修复你的架构,不要与之抗争。

标签: php title


【解决方案1】:

像这样使用 jQuery 函数:

$("title").html('your title');

【讨论】:

  • 这是一个有效的解决方案,但在 SEO 方面是个坏主意。如果没有加载 javascript,标题不会更改(所有机器人不加载页面 javascript)
【解决方案2】:

1.只需在 require 函数前添加 $title 变量

<?php

$title = "Your title goes here";
require("header.php");

?>

2。在 header.php 中添加以下代码

<title><?php echo $title; ?></title>

【讨论】:

    【解决方案3】:

    每一个 Simple 只是使用一个函数,我创建了它。

       <?
    function change_meta_tags($title,$description,$keywords){
            // This function made by Jamil Hammash
        $output = ob_get_contents();
        if ( ob_get_length() > 0) { ob_end_clean(); }
        $patterns = array("/<title>(.*?)<\/title>/","<meta name='description' content='(.*)'>","<meta name='keywords' content='(.*)'>");
        $replacements = array("<title>$title</title>","meta name='description' content='$description'","meta name='keywords' content='$keywords'");
    
        $output = preg_replace($patterns, $replacements,$output);  
        echo $output;
    }
    ?>
    

    首先你必须创建function.php文件并将这个函数放在里面,然后在Header.php中的MetaTags下make require。 使用这个函数 change_meta_tags("NEW TITLE","NEW DESCRIPTION",NEW KEYWORDS); . 不要在 Header.php 中使用这个函数!!只是与其他页面。

    【讨论】:

    • 只要确保将正确的顺序放在标题、描述、关键字的前面。否则此功能将不起作用,其次使用单引号作为描述和关键字。是的,确实非常方便的功能
    【解决方案4】:

    扩展 Dainis Abols 的答案,以及您关于输出处理的问题,

    考虑以下几点:

    您的 header.php 的标题标签设置为 &lt;title&gt;%TITLE%&lt;/title&gt;; "%" 很重要,因为几乎没有人输入 %TITLE%,所以您可以稍后将其用于 str_replace()。

    那么,你可以像这样使用output buffer

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

    应该这样做。

    编辑

    我相信Guy's idea 效果更好,因为它会在您需要时为您提供默认值,即 IE:

    • 标题现在是&lt;title&gt;Backup Title&lt;/title&gt;
    • 代码现在是:
    <?php
        ob_start();
        include("header.php");
        $buffer=ob_get_contents();
        ob_end_clean();
    
        $title = "page title";
        $buffer = preg_replace('/(<title>)(.*?)(<\/title>)/i', '$1' . $title . '$3', $buffer);
    
        echo $buffer;
    ?>
    

    【讨论】:

    • 这种方法对seo友好吗??
    • 是和不是。如果您每隔几天更改一个标题,搜索引擎不会喜欢它,但是为每个页面设置不同的标题绝对是 seo 友好的。
    【解决方案5】:

    这很容易。 将此代码放入 header.php

            <? 
    $sitename = 'Your Site Name'
    $pagetitle;
    
    if(isset($pagetitle)){
     echo "<title>$pagetitle." | ". $sitename</title>";
    } 
      else {
    echo "<title>$sitename</title>";
    }
    ?>
    

    然后在页面里放:

     <?
        $pagetitle = 'Sign up'
        include "header.php";
        ?>
    

    因此,如果您在 Index.php 上,标题就是您的站点名称。 例如,如果您在注册页面上,标题为 Sign up |您的网站名称

    【讨论】:

      【解决方案6】:

      稍微扩展一下 we.mamat 的回答, 您可以使用 preg_replace 而不是简单的替换,并且完全不需要 %title%。像这样的:

      <?php
      ob_start();
      include("header.php");
      $buffer=ob_get_contents();
      ob_end_clean();
      
      $title = "page title";
      $buffer = preg_replace('/(<title>)(.*?)(<\/title>)/i', '$1' . $title . '$3', $buffer);
      
      echo $buffer;
      ?>
      

      【讨论】:

        【解决方案7】:

        您可以使用 JavaScript 进行设置

        <script language="javascript">
            document.title = "The new title goes here.";
        </script>
        

        【讨论】:

        • 不错,但它有两个缺点。一个不用于 seo,因为此代码未在标题中写入标题标签。二是如何添加元描述和关键字?
        【解决方案8】:

        在页面顶部添加此代码

        <?php
            $title="This is the new page title";
        ?>
        

        在您的模板头文件中添加此代码(包含)

        <title><?php echo $title; ?></title>
        

        【讨论】:

          【解决方案9】:

          您可以做的是,将输出存储在一个变量中,例如:

          header.php

          <?php
             $output = '<html><title>%TITLE%</title><body>';
          ?>
          

          PS:您需要删除 all 回声/打印等,以便所有可能的输出都存储在 $output 变量中。

          这很容易做到,方法是在文件开头定义$output = '';,然后查找/替换 echo$output .=

          然后将%TITLE% 替换为您需要的:

          <?php
              include("header.php");
              $title = "TITLE";
          
              $output = str_replace('%TITLE%', $title, $output);
              echo $output;
          ?>
          

          另一种方法是在您的代码中使用javascript,而不是:

          <title><?php echo $title; ?></title>
          

          把它放在那里:

          <script type="text/javascript">
              document.title = "<?=$title;?>"
          </script>
          

          或者 jQuery,如果你愿意的话:

          <script type="text/javascript">
              $(document).ready(function() {
                  $(this).attr("title", "<?=$title;?>");
              });
          </script>
          

          【讨论】:

          • 第一个变体似乎不起作用。然后,如果我使用 js,页面标题会发生变化,但如果你看源代码,那不是我需要的
          • 好吧,实际上,第一个变体有效,但它将页面标题放在标题区域之外,因为 echo 不在 header.php 页面中
          • 您需要删除 header.php 中的 all 回声,并在您有 echo 的任何地方写入 $output .=。这就是脚本的想法。
          • 哦,JS 总是会改变客户端的视图,而不是实际的源代码。
          猜你喜欢
          • 1970-01-01
          • 2013-08-02
          • 2022-06-14
          • 2017-12-31
          • 1970-01-01
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多