2012-06-08 38 views
5

Symfony 1.0.6 kullanıyorum.Kanonik etiket nasıl aynı linkten türetilir?

Sitemde iki tane URL var.

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

ve Şimdi

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

, tüm yeni haberler aynı düzeni kullanıyorsanız ve hem yukarıdaki linkler veritabanından aynı veri almak. Google, aynı içerik için birden çok URL aldığından, içeriklerin çoğaltıldığını bildiriyor. Bir çözüm aranır zaman , ben "kanonik" yapısı kullanılarak

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

deyişle, her ikisi de burada baş sayfa

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

bölümünde Ama sorunu eklenecek gerektiren bu sorunu giderdiği var aynı düzeni kullanarak ve makale kimliğine dayalı olarak (yukarıdaki örnekte 033), veriler getirilir ve görüntülenir. Kanonik href'i değiştiremiyorum veya kodlayamıyorum.

Bağlantı etiketini action.class veya şablon dosyasında manuel olarak eklemenin herhangi bir yolu var mı?

cevap

2

an old ticket göre (bir old thread in the old symfony forum dayanarak) - bu noktada to the final source, sen esaily (örneğin /lib/helper/CanonicalHelper.php için) sayfasına bir bağlantı etiketi eklemek bir yardımcı oluşturabilirsiniz:

/** 
* 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); 
} 

O zaman arayabilirsin Şablonunuzdaki: Sonunda

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

, sizin layout.php yuvayı eklemeyi unutma:

<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'dan eklemek isterseniz, blogda da tanımlanmıştır.

düzenleme:

Eğer add_link fonksiyonunu kullanmak istediğinizde dahil etmeyi unutmayın CanonicalHelper.php adlı bir yardımcı oluşturursanız:

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

Merhaba ob_start benzer yarmak atanacak arasında ne olursa olsun baskı olduğunu/Symfony/helper olarak CanonicaHelper.php ve add_link içeren kodları yapıştırdık. Sonra şablonda add_link() işlevini çağırdım ve layout.php içinde include_slot ('bağlantılar') ekledim. include_slot ('Canonical') include_slot ('links') olarak yeniden adlandırmalıyım. Her iki şekilde denedim. –

+1

wortking değil benim cevabımı düzenledim ('use_helper' kullanmanız gerekir) – j0k

+0

Merhaba Ben kodumu düzgün bir şekilde yorum kutusuna gönderemedim. Bu yüzden kendi sorumu cevapladım. Lütfen doğruysa bana bildirin. –

0

Merhaba ben aşağıdaki gibi yapıyorum ve bildirin lütfen Ben doğru ya da yanlış olduğumu biliyorum. layout.php olarak /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; 
} 
?> 

yılında

: Başarı dosyasında

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

:

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

Yardımcıyı yanlış klasöre koydunuz. CanonicalHelper.php dosyasını '/ lib/helper /' dizinine taşıyın (klasör yardımcı programı mevcut değilse). – j0k

+0

Çok üzgünüm .. Hata yazıyordu .. :) sadece yardımcı dizinde. Bunun dışında her şey iyi .. Çok teşekkürler ... :) –

+0

hey ... Ben çok üzgünüm .. Size her zaman teşekkür ederim adamım ... Sadece kendi cevabımı kabul ettim ve tercihinizi kaldı .. Tekrar özür dilerim .. Cevabınızı kabul ediyorum .. –

1

Symfony'nin 1.0.11

Önemli kısmı yuvası ('bağlantıları') G/lib altında bir yardımcısı oluşturduk & end_slot() böylece & ob_end()

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