2012-06-08 7 views
5

Używam Symfony 1.0.6.Jak dodać znacznik kanoniczny do stron pochodzących z tego samego łącza?

Na mojej stronie mam dwa adresy URL.

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

i

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

Teraz wszystkie nowe artykuły są przy użyciu tego samego układu i oba powyższe linki uzyskać te same dane z bazy danych. Google zgłasza duplikowanie treści, ponieważ otrzymuje wiele adresów URL dla tej samej treści. Kiedy szukałem rozwiązania, mam, że za pomocą „kanoniczną” strukturę rozwiązuje ten problem, który wymaga

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

być dodany w sekcji head strony

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

Ale problem polega na tym, oba są przy użyciu tego samego układu i na podstawie identyfikatora artykułu (033 w powyższym przykładzie), dane są pobierane i wyświetlane. Nie mogę zmienić ani hartować kanonicznego kanonu.

Czy są jakieś sposoby na ręczne dodanie tagu linku w action.class lub w pliku szablonu?

Odpowiedz

2

Według an old ticket (na podstawie old thread in the old symfony forum) - który punkt to the final source można esaily utworzyć pomocnika, który doda tag link do swojej strony (na przykład /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); 
} 

Następnie można go nazwać w szablonie:

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

Wreszcie, nie zapomnij dodać gniazdo w 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> 

Jeśli chcesz go dodać z actions, jest to również zdefiniowane w poście na blogu.

edit:

Jeśli utworzyć pomocnika nazwie CanonicalHelper.php nie zapomnij podać go, gdy chcesz użyć add_link funkcję:

<?php use_helper('Canonical') ?> 
+0

Witam mam stworzył pomocnika w/lib/symfony/helper jako CanonicaHelper.php i ja wkleiliśmy kod zawierający add_link ich. Następnie w szablonie nazwałem funkcję add_link() i dodałem include_slot ('links') w layout.php Czy mogę zmienić nazwę include_slot ('links') na include_slot ('Canonical') .... Próbowałem w obie strony. To nie jest bzdura –

+1

Edytowałem swoją odpowiedź (musisz użyć 'use_helper') – j0k

+0

Cześć Nie mogłem poprawnie opublikować mojego kodu w polu komentarza. Odpowiedziałem więc na własne pytanie. Daj mi znać, jeśli to prawda. –

0

Hi robie jak poniżej i daj ja wiem, czy mam rację, czy nie.

W /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; 
} 
?> 

W layout.php:

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

W pliku sukcesu:

<?php use_helper('Canonical');?> 
<?php echo add_link('nonsense', 'canonical');?> 
+0

Umieszczasz pomocnika w niewłaściwym folderze. Przenieś plik CanonicalHelper.php do '/ lib/helper /' (jeśli pomocnik folderu nie istnieje, utwórz go). – j0k

+0

Bardzo mi przykro .. To był błąd w pisaniu .. :) jest tylko w katalogu pomocnika. Poza tym każdy myśli OK ... Bardzo dziękuję ... :) –

+0

hej ... bardzo mi przykro .. Zawsze jestem bardzo wdzięczny człowiekowi ... Po prostu przyjąłem moją własną odpowiedź i usunąłem twoje preferencje .. Przepraszam raz jeszcze ... Akceptuję twoją odpowiedź .. –

1

Symfony 1.0.11

Ważne jest to gniazdo ('linki') & end_slot() więc cokolwiek druku pomiędzy zostanie przypisany do slotu podobny do ob_start & ob_end()

function add_link($href, $rel) 
    { 
     slot('links'); 
     echo "\n<link rel=\"$rel\" href=\"$href\" />\n"; 
     end_slot(); 
    } 
Powiązane problemy