2012-06-08 15 views
5

Ich benutze symfony 1.0.6.Wie kanonische Tag die Seiten hinzugefügt werden, die von demselben Link abgeleitet sind?

In meiner Website habe ich zwei URLs.

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

und

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

nun alle neuen Artikel werden mit demselben Layout und die beiden obigen Links gleichen Daten aus der Datenbank erhalten. Google meldet doppelte Inhalte, da mehrere URLs für denselben Inhalt abgerufen werden. Als ich nach einer Lösung gesucht, ich habe das „kanonische“ Struktur behebt dieses Problem mit der erfordern

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

in Kopfteil der Seite

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

Aber Problem ist hier hinzugefügt werden, sind beide Unter Verwendung desselben Layouts und basierend auf der Artikel-ID (033 im obigen Beispiel) werden Daten abgerufen und angezeigt. Ich kann kanonische href nicht ändern oder fest codieren.

Gibt es Möglichkeiten, Link-Tags manuell in action.class oder in einer Vorlagendatei hinzuzufügen?

Antwort

2

Nach an old ticket (basierend auf einer old thread in the old symfony forum) - welchem ​​Punkt to the final source, können Sie esaily einen Helfer erstellen, die einen Link-Tag zu Ihrer Seite hinzufügen (zum Beispiel /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); 
} 

Dann können Sie es nennen in der Vorlage:

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

Schließlich vergessen Sie nicht den Steckplatz in Ihrem layout.php hinzuzufügen:

<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> 

Wenn Sie es aus der actions hinzufügen möchten, ist es auch im Blog Post definiert.

edit:

Wenn Sie erstellen einen Helfer CanonicalHelper.php genannt vergessen Sie nicht, es zu schließen, wenn Sie add_link Funktion verwenden möchten:

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

Hallo ich einen Helfer unter/lib erstellt haben/symfony/helper wie CanonicaHelper.php und ich habe den Code mit add_link deren eingefügt. Dann In der Vorlage ich aufgerufen add_link() -Funktion und hinzugefügt include_slot ('Links') in layout.php Sollte ich Include_slot ('Links') zu include_slot ('Canonical') umbenennen .... Ich habe auf beide Arten versucht. Es ist nicht working –

+1

Ich habe meine Antwort bearbeitet (Sie müssen 'use_helper' verwenden) – j0k

+0

Hallo, ich konnte meinen Code nicht ordnungsgemäß in der Kommentar-Box veröffentlichen. Also habe ich meine eigene Frage beantwortet. Bitte lassen Sie mich wissen, wenn es richtig ist. –

0

Hallo ich tue, wie unten und lassen Sie es Ich weiß, ob ich richtig oder falsch bin.

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

In layout.php:

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

In Success-Datei:

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

Sie legen den Helfer in den falschen Ordner. Verschieben Sie die Datei CanonicalHelper.php in '/ lib/helper /' (wenn der Ordnerhelfer nicht existiert, erstellen Sie ihn). – j0k

+0

Es tut mir sehr leid .. Es war Tippfehler .. :) Es ist nur im Helferverzeichnis. Abgesehen davon ist jeder denk OK .. Vielen Dank ... :) –

+0

hey ... es tut mir sehr leid .. ich bin immer danke dir Mann ... Ich habe nur meine eigene Antwort akzeptiert und es entfernt Ihre Präferenz .. Es tut mir leid wieder .. Ich akzeptiere deine Antwort .. –

1

Symfony 1.0.11

Wesentlicher Teil ist Slot ('Links') & end_slot() so was auch immer Druck dazwischen werden zugewiesen werden, die ähnlich zu dem Schlitz & OB_END ob_start()

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