2011-10-24 20 views
9

Tôi đang cố gắng xây dựng một chủ đề (chuyển đổi một mẫu hiện có mà tôi có) trong Orchard nhưng tôi gặp khó khăn khi tạo kiểu cho tiện ích Blog Archives. Tôi có một vùng "sidebar", trong đó tôi đặt widget.Làm thế nào để tạo kiểu cho một Widget ở Orchard?

Để có nó ra đánh dấu tôi muốn tôi đã tạo ra một mẫu mới trong quan điểm của tôi thư mục: Widget-BlogArchives.cshtml Tất cả các mẫu nó quấn nội dung của widget trong một div như vậy:

<div class="box box_small"> 
    @Display(Model.Content) 
</div> 

Vì vậy, tôi mong đợi tất cả nội dung tiện ích nằm trong div của tôi. Tuy nhiên, HTML được tạo trông giống như sau:

<article class="widget-blog-archives widget" shape-id="15"> 
    <header shape-id="15"> 
    <h1 shape-id="15">The Archives</h1> 
    </header> 
    <div class="box box_small" shape-id="15"> 
    <div class="archives" shape-id="16"> 
     <ul class="archiveMonthList" shape-id="16"> 
     <li class="first last" shape-id="16"> 
     <a href="(shortened)/10" shape-id="16">October 2011 (1)</a> 
    </li> 
    </ul> 
    </div> 
    </div> 
</article> 

Điều tôi không hiểu là toàn bộ bài viết đến từ đâu? Làm thế nào tôi có thể nhận được các tiêu đề vào div của tôi và thay đổi để a?

Có thể ai đó cũng vui lòng giải thích vị trí trong Mô hình tiêu đề "Lưu trữ" được lưu trữ không? Tôi đã xem qua mô hình trong công cụ truy tìm hình dạng nhưng không thể tìm thấy nó ...

Cảm ơn.

CẬP NHẬT

Như Bertrand giải thích tôi đã thực hiện một số thay đổi của tôi Widget-BlogArchives.cshtml:

@using Orchard.ContentManagement 
@using Orchard.Widgets.Models 
@{ 
    Model.Metadata.Wrappers.Clear(); 
    var title = ((IContent)Model.ContentItem).As<WidgetPart>().Title; 
} 
<div class="box box_small"> 
    <h3>@title</h3> 
    @Display(Model.Content) 
</div> 

này bây giờ tạo ra HTML tôi muốn.

Trả lời

4

Đánh dấu này đến từ trình bao bọc tiện ích con. Có thể chặn trình bao bọc bằng cách gọi Model.Metadata.Wrappers.Clear(). Sau đó, bạn hoàn toàn có thể thực hiện việc hiển thị từ ghi đè tiện ích của riêng mình.

Nếu bạn mở widget.wrapper.cshtml, bạn sẽ tìm thấy câu trả lời cho câu hỏi thứ hai của bạn:

var title = ((IContent)Model.ContentItem).As<WidgetPart>().Title; 

nào cũng có thể được thực hiện theo cách này:

var title = Model.ContentItem.WidgetPart.Title 
+0

Cảm ơn bạn Bertrand. Tôi sẽ đặt mã để xóa các trình bao bọc ở đâu? Và đây có phải là một cách được khuyến nghị để tạo kiểu cho widget hay tôi nên ghi đè lên trình bao bọc thay vì Widget-BlogArchives.cshtml? Tôi vẫn đang cố nắm bắt tất cả các khái niệm ở đây và thực hành tốt nhất là gì. – b3n

+0

Bạn sẽ đặt mã đó vào ghi đè mẫu tiện ích con của mình. một cái gì đó như widget-blogarchives.cshtml, tùy thuộc vào những gì bạn đang cố gắng làm (nhìn vào các thay thế có sẵn trong hình dạng truy tìm để quyết định cái nào bạn muốn, bạn có thể muốn thêm tính năng thay thế tiện ích bằng cách này, để có được nhiều khả năng hơn). Bạn không thể thay thế trình bao bọc, do đó, việc ghi đè mẫu trình bao bọc tiện ích sẽ ghi đè lên tất cả các tiện ích con. Có lẽ không phải những gì bạn muốn. vì vậy có, đây là một cách hoàn toàn hợp lý để làm việc. –

+0

Có Tôi đã bật tính năng thay thế, do đó ghi đè Widgets-BlogArchives.cshtml. Tôi chỉ không thể tìm ra được cái đầu đến từ đâu vì tôi không thể tìm thấy nó trong công cụ dò tìm hình dạng. – b3n

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