2012-06-08 11 views
5

Estoy usando Symfony 1.0.6.¿Cómo agregar una etiqueta canónica a las páginas derivadas del mismo vínculo?

En mi sitio tengo dos URL.

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

y

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

Ahora, todos los nuevos artículos están utilizando mismo diseño y los dos enlaces de arriba consiguen mismos datos de la base de datos. Google informa sobre la duplicación de contenidos dado que obtiene varias URL para el mismo contenido. cuando buscaba una solución, tiene que usar la estructura "canónica" corrige este problema, que requieren

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

que se añade en la sección de cabecera de la página

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

Pero el problema aquí es, ambos son usando el mismo diseño y basado en la identificación del artículo (033 en el ejemplo anterior), se recogen y se muestran los datos. No puedo cambiar o codificar href canónico.

¿Hay alguna forma de agregar la etiqueta de enlace manualmente en action.class o en el archivo de plantilla?

Respuesta

2

Según an old ticket (basado en un old thread in the old symfony forum) - cuyo punto to the final source, puede crear esaily un ayudante que añadir una etiqueta de enlace a su página (por ejemplo /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); 
} 

Entonces se le puede llamar en su plantilla:

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

por último, no se olvide de añadir la ranura en su 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> 

Si desea agregarlo desde actions, también se define en la publicación del blog.

edición:

Si crea un ayudante llamado CanonicalHelper.php no se olvide de incluirlo cuando se desea utilizar la función add_link:

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

Hola He creado un ayudante en/lib/symfony/helper como CanonicaHelper.php y yo hemos pegado el código que contiene add_link. Luego en la plantilla llamé a la función add_link() y agregué include_slot ('links') en layout.php Debería cambiar el nombre de include_slot ('links') a include_slot ('Canonical') ... Lo intenté en ambos sentidos. No es wortking –

+1

He editado mi respuesta (debe usar 'use_helper') – j0k

+0

Hola, no pude publicar mi código correctamente en el cuadro de comentarios. Entonces respondí mi propia pregunta. Por favor, hágamelo saber si es correcto. –

0

Hola estoy haciendo tan por debajo y por favor deje yo sé si estoy en lo correcto o equivocado

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

En layout.php:

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

En el archivo de éxito:

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

Pone el asistente en la carpeta incorrecta. Mueva el archivo CanonicalHelper.php en '/ lib/helper /' (si la carpeta auxiliar no existe, créelo). – j0k

+0

Lo siento mucho ... Fue un error de tipeo ... :) está solo en el directorio de ayuda. Aparte de eso, todo está bien. Muchas gracias ... :) –

+0

hey ... Lo siento mucho ... Siempre estoy agradecido por completo hombre ... Acabo de aceptar mi propia respuesta y eliminó su preferencia .. Lo siento otra vez ... Acepto tu respuesta ... –

1

Symfony 1.0.11

parte importante es la ranura ('links') & end_slot() por lo que cualquier impresión en el medio serán asignados a la ranura similar a ob_start & OB_END()

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