5

私はsymfony 1.0.6を使用しています。

私のサイトには 2 つの 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

現在、すべての新しい記事は同じレイアウトを使用しており、上記の両方のリンクはデータベースから同じデータを取得しています。Google は、同じコンテンツに対して複数の 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 に答える
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 に答える