2012-06-08 29 views
5

Tôi đang sử dụng symfony 1.0.6.Làm cách nào để thêm thẻ chuẩn cho các trang được bắt nguồn từ cùng một liên kết?

Trong trang web của tôi, tôi có hai URL.

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

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

Bây giờ, tất cả các bài viết mới được sử dụng cùng một cách bố trí và cả hai liên kết ở trên nhận được cùng một dữ liệu từ cơ sở dữ liệu. Google đang báo cáo trùng lặp nội dung vì nó đang nhận nhiều URL cho cùng một nội dung. Khi tôi đã tìm kiếm một giải pháp, tôi có việc sử dụng "kinh điển" cấu trúc khắc phục vấn đề này đòi hỏi

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

để được thêm vào trong phần đầu của trang

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

Nhưng vấn đề ở đây là, cả hai đều sử dụng cùng một bố cục và dựa trên id bài viết (033 trong ví dụ trên), dữ liệu được tìm nạp và hiển thị. Tôi không thể thay đổi hoặc mã hóa kinh nghiêm href.

Có cách nào để thêm thẻ liên kết theo cách thủ công trong action.class hoặc trong tệp mẫu không?

Trả lời

2

Theo an old ticket (dựa trên một old thread in the old symfony forum) - thời điểm đó to the final source, bạn esaily có thể tạo ra một helper mà thêm một thẻ liên kết đến trang của bạn (ví dụ /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); 
} 

Sau đó, bạn có thể gọi nó trong mẫu của bạn:

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

Cuối cùng, đừng quên thêm khe trong layout.php của bạn:

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

Nếu bạn muốn thêm từ số actions, nó cũng được xác định trong bài đăng trên blog.

chỉnh sửa:

Nếu bạn tạo một helper gọi CanonicalHelper.php đừng quên gửi kèm theo khi bạn muốn sử dụng chức năng add_link:

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

Hi Tôi đã tạo ra một helper dưới/lib/symfony/helper như CanonicaHelper.php và tôi đã dán mã chứa add_link của họ. Sau đó, trong mẫu, tôi gọi hàm add_link() và thêm include_slot ('links') vào layout.php Tôi có nên đổi tên include_slot ('links') thành include_slot ('Canonical') .... Tôi đã thử theo cả hai cách. Nó không phải là wortking –

+1

Tôi đã chỉnh sửa câu trả lời của tôi (bạn cần sử dụng 'use_helper') – j0k

+0

Xin chào Tôi không thể đăng mã của tôi đúng trong hộp bình luận. Vì vậy, tôi đã trả lời câu hỏi của riêng tôi. Xin vui lòng cho tôi biết nếu nó đúng. –

0

Hi Tôi đang làm như sau và xin vui lòng cho tôi biết Nếu tôi đúng hay sai.

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

Trong layout.php:

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

Trong file thành công:

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

Bạn đặt trình trợ giúp vào thư mục sai. Di chuyển tệp CanonicalHelper.php trong '/ lib/helper /' (nếu trình trợ giúp thư mục không tồn tại). – j0k

+0

Tôi rất xin lỗi .. Nó đã được gõ sai lầm .. :) nó là trong thư mục trợ giúp chỉ. Bên cạnh đó là mọi suy nghĩ OK .. Rất cám ơn ... :) –

+0

hey ... Tôi rất xin lỗi .. Tôi luôn luôn cảm ơn đầy đủ cho bạn người đàn ông ... Tôi chỉ chấp nhận câu trả lời của riêng tôi và nó loại bỏ sở thích của bạn .. Tôi xin lỗi một lần nữa .. Tôi chấp nhận câu trả lời của bạn .. –

1

Symfony 1.0.11

phần quan trọng là khe cắm ('liên kết') & end_slot() vì vậy bất cứ in ở giữa sẽ được gán cho khe tương tự như ob_start & ob_end()

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