2012-06-08 24 views
5

Sto usando symfony 1.0.6.Come aggiungere tag canonico alle pagine derivate dallo stesso link?

Nel mio sito ho due URL.

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

e

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

Ora, tutti i nuovi articoli si utilizza lo stesso layout e entrambi i link di cui sopra ottengono stessi dati dal database. Google sta segnalando la duplicazione dei contenuti poiché riceve più URL per lo stesso contenuto. Quando ho cercato una soluzione, ho avuto che l'utilizzo di struttura "canonica" risolve questo problema, che richiedono

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

da aggiungere nella sezione head della pagina

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

Ma il problema qui è, entrambi sono utilizzando lo stesso layout e in base all'ID articolo (033 nell'esempio sopra), i dati vengono recuperati e visualizzati. Non riesco a modificare o href canonico hard-code.

Esistono modi per aggiungere manualmente il tag di collegamento in action.class o nel file di modello?

risposta

2

Secondo an old ticket (basata su una old thread in the old symfony forum) - che punto to the final source, è possibile esaily creare un supporto che aggiungere un tag link alla tua pagina (ad esempio /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); 
} 

Poi si può chiamare nel modello:

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

Infine, non dimenticate di aggiungere lo slot nel vostro 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> 

Se si desidera aggiungerlo dallo actions, è definito anche nel post del blog.

edit:

Se si crea un helper chiamato CanonicalHelper.php non dimenticare di includere quando si desidera utilizzare la funzione add_link:

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

Hi Ho creato un aiutante sotto/lib/symfony/helper come CanonicaHelper.php e ho incollato il codice contenente add_link loro. Poi nel template ho chiamato la funzione add_link() e ho aggiunto include_slot ('link') in layout.php Devo rinominare include_slot ('links') in include_slot ('Canonical') .... Ho provato in entrambi i modi. Non è dannoso –

+1

Ho modificato la mia risposta (è necessario utilizzare 'use_helper') – j0k

+0

Salve, non ho potuto inserire correttamente il mio codice nella casella dei commenti. Così ho risposto alla mia domanda. Per favore fatemi sapere se è giusto. –

0

Ciao sto facendo come qui sotto e vi preghiamo di so se ho ragione o torto

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

Nel file di Successo:

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

Hai messo l'helper nella cartella sbagliata. Spostare il file CanonicalHelper.php in '/ lib/helper /' (se l'helper della cartella non esiste, crearlo). – j0k

+0

Sono molto dispiaciuto .. Stava digitando un errore .. :) è solo nella directory helper. A parte questo è tutto ok OK .. Molte grazie ... :) –

+0

hey ... Sono molto dispiaciuto .. Sono sempre ringraziato per intero uomo ... Ho appena accettato la mia risposta e ha rimosso la tua preferenza .. Mi dispiace ancora .. Accetto la tua risposta .. –

1

Symfony 1.0.11

parte importante è di slot ('link') & end_slot() in modo da qualunque stampa in mezzo sarà assegnato al posto connettore simile a ob_start & ob_end()

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