2012-10-01 23 views
13

Tôi đang tập hợp một trang danh mục đầu tư đơn giản vào trung gian. Tôi tạo các trang 'làm việc' động dựa trên dữ liệu YAML cục bộ. Đây là trong config.rb:Sử dụng MIddleman 3.0 - Làm cách nào để đặt tiêu đề trang riêng lẻ trên các trang động?

data.work.projects.each do |project| 
    page "/work/#{project[0]}.html", :proxy => "project_template.html" do 
    @project = project 
    end 
end 

Vì mục đích SEO, tôi muốn mỗi trang được tạo động này có tiêu đề và mô tả trang duy nhất.

Tiêu đề hiện được đặt trong file bố trí như thế này

%title 
    = current_page.data.title 

và tôi biết tôi có thể sử dụng frontmatter để thiết lập các biến CURRENT_PAGE như thế này

--- 
title: "Recent Work - " 
--- 

Và tôi có thể dính vào đó vào project_template của tôi .haml, nhưng có cách nào để có được một cái gì đó như thế này để làm việc?

--- 
title: "Recent Work - " + @project.title 
--- 

Trả lời

21

Thay vì đặt tiêu đề ở mặt trước (như bạn đang làm), bạn có thể sử dụng content_for.

Ví dụ: trong cách bố trí:

%title= yield_content(:title)

Và trong bản mẫu của trang năng động:

- content_for(:title, @project.title)

+0

cảm ơn! cách tiếp cận content_for hoạt động, chỉ trong bố cục đó là yield_content (: title) –

+0

cảm ơn, đã cập nhật câu trả lời để sử dụng 'yield_content' – ghempton

2

Tôi đã tìm thấy một cách khác để làm việc xung quanh giới hạn đó. Thay vì đi cho dữ liệu trang, lấy dữ liệu từ frontmatter metadata:

%title = current_page.metadata[:page]['title'] 

Nó không phải là tốt đẹp và ngắn như nhận được các dữ liệu thông qua current_page.data, nhưng tôi đã chỉ cố gắng thay đổi metadata:

proxy newpath, oldpath, :page => { 'title' => newtitle } 

tôi không chắc chắn lý do tại sao nhưng nếu tôi nhớ chính xác tôi cũng đã thiết lập các tài nguyên siêu dữ liệu sau đó trên đã sẵn sàng:

resource.add_metadata :page => { 'title' => newtitle } 

tôi vẫn nghĩ/hy vọng rằng phải có một sol tốt hơn ution. Đó là loại hoàn toàn kỳ lạ mà chúng tôi không thể thiết lập dữ liệu frontmatter cho các trang proxy.

6

Đây là giải pháp mô-đun đơn giản nhất.

Trong cách bố trí của bạn, ném vào:

%title= 'Your Site Title | ' + @title 

@title là một biến Ví dụ ruby ​​rằng sẽ có sẵn cho trang hiện tại.

Trong trang hiện tại của bạn, ném vào (không quên dấu gạch ngang):

- @title = 'Your Page Title' 

Sau đó, bạn sẽ được tốt để đi!

Các vấn đề liên quan