2012-06-08 8 views
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 

Теперь все новые статьи, используя тот же макет и обе вышеуказанные ссылки получают одни и те же данные из базы данных. 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 

Но проблема здесь есть оба используя тот же макет и на основе идентификатора статьи (033 в приведенном выше примере), данные извлекаются и отображаются. Я не могу изменить или жестко закодировать канонический href.

Есть ли способ добавить тег ссылки вручную в файле action.class или в файле шаблона?

ответ

2

Согласно an old ticket (на основе old thread in the old symfony forum) - что точка to the final source, вы можете esaily создать помощника, который добавить ссылку тега на странице (например /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') ?> 
+0

Привет Я создал помощник в/Lib/symfony/helper как CanonicaHelper.php, и я вставил код, содержащий add_link. Затем в шаблоне я вызвал функцию add_link() и добавил include_slot ('links') в layout.php Должен ли я переименовать include_slot ('links') в include_slot ('Canonical') .... Я пробовал в обоих направлениях. Это не wortking –

+1

Я отредактировал свой ответ (вам нужно использовать 'use_helper') – j0k

+0

Привет, я не мог правильно разместить свой код в поле комментариев. Поэтому я ответил на свой вопрос. Пожалуйста, дайте мне знать, правильно ли. –

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');?> 
+0

Вы помещаете помощника в неправильную папку. Переместите файл CanonicalHelper.php в '/ lib/helper /' (если не существует помощника папки, создайте его). – j0k

+0

Мне очень жаль .. Это была ошибка ввода .. :) это только в справочном справочнике. Кроме того, каждый думает ОК .. Большое спасибо ... :) –

+0

эй ... Мне очень жаль .. Я всегда благодарю вас за человека ... Я просто принял свой собственный ответ, и он удалил ваше предпочтение .. Прошу прощения. Я принимаю ваш ответ .. –

1

Symfony 1.0.11

Важная часть слот («ссылки») & end_slot() поэтому все, что печать между будет присвоен слот аналогичен ob_start & OB_END()

function add_link($href, $rel) 
    { 
     slot('links'); 
     echo "\n<link rel=\"$rel\" href=\"$href\" />\n"; 
     end_slot(); 
    } 
Смежные вопросы