5

我正在使用 symfony 1.0.6。

在我的网站中,我有两个 URL。

http://newe4s.com/news/articles/view/033/job-news-and-information

http://newe4s.com/news/articles/view/033/job-news-and-information/graduate/Connections-help-graduates-get-jobs

现在,所有新文章都使用相同的布局,并且以上两个链接都从数据库中获取相同的数据。谷歌报告内容重复,因为它获得了相同内容的多个 URL。当我搜索解决方案时,我发现使用“规范”结构解决了这个需要

<link rel="canonical" href="http://newe4s.com/news/articles/view/033/job-news-and-information />

添加到页面头部

http://newe4s.com/news/articles/view/033/job-news-and-information/graduate/Connections-help-graduates-get-jobs

但这里的问题是,两者都使用相同的布局并基于文章 id(上例中的 033),获取并显示数据。我无法更改或硬编码规范的 href。

有没有办法在 action.class 或模板文件中手动添加链接标签?

4

3 回答 3

2

根据旧票(基于旧 symfony 论坛中的旧线程) - 指向最终来源,您可以轻松创建一个助手,将链接标签添加到您的页面(例如/lib/helper/CanonicalHelper.php):

/**
* Add link tag to slot 'links'
*
* @param String $href [Absolute or internat URI]
* @param String $rel [value for 'rel' attribtue, e.g. 'canonical']
*
* @return void
*/
function add_link($href, $rel)
{
  $slot = get_slot('links');

  try {
    $href = url_for($href, true);
    $slot .= "\n<link rel=\"$rel\" href=\"$href\" />";
  } catch (InvalidArgumentException $e) {
    $slot .= "\n<!-- Could not add Link '$href': Only absolute or internal URIs allowed -->";
  }

  slot('links', $slot);
}

然后你可以在你的模板中调用它:

<?php add_link(
  'http://newe4s.com/news/articles/view/033/job-news-and-information',
  'canonical'
); ?>

最后,不要忘记在你的layout.php

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Title</title>
    <link rel="shortcut icon" href="/favicon.ico" />
    <?php include_javascripts() ?>
    <?php include_stylesheets() ?>
    <?php include_slot('links'); ?>
  </head>

如果您想从 中添加它actions,它也在博客文章中定义。

编辑:

如果您创建了一个名为的助手,CanonicalHelper.php请不要忘记在要使用add_link函数时包含它:

<?php use_helper('Canonical') ?>
于 2012-06-08T21:28:30.017 回答
1

Symfony 1.0.11

Important part is slot('links') & end_slot() so whatever print in between will be assigned to slot similar to ob_start & ob_end()

function add_link($href, $rel)
   {
      slot('links');
      echo "\n<link rel=\"$rel\" href=\"$href\" />\n";
      end_slot();
   }
于 2015-06-18T09:33:30.210 回答
0

嗨,我正在做以下事情,如果我是对的或错的,请告诉我。

在 /lib/symfony/CanonicalHelper.php

<?php 
function add_link($href, $rel)
{
 $slot = get_slot('links');
 try {
  $href = url_for($href, true);
  $slot.= "\n<link rel=\"$rel\" href=\"$href\" />";
 }
 catch (InvalidArgumentException $e) {
 $slot.= "\n<!-- Could not add Link '$href': Only absolute or internal URIs allowed   -->";
}
 return $slot;
}
?>

在 layout.php 中:

<?php include_slot('links'); ?>

在成功文件中:

<?php use_helper('Canonical');?>
<?php echo add_link('nonsense', 'canonical');?>
于 2012-06-11T12:32:50.537 回答