2012-05-01 33 views
6

Tôi đã làm việc trên một ứng dụng đơn giản dựa trên sự khéo léo. Tôi đã tạo một vài loại mới. Đây là những gì tôi đã làm để kích hoạt ý kiến ​​về một loại nội dung luyện kỹ năng cụ thể có tên "activity_report":Không thể kích hoạt các cuộc thảo luận về các loại khéo léo Plone (thư mục)

Trong Plone Control Panel

Trong phần Thảo luận tôi kích hoạt như sau:

  • trên toàn cầu bật nhận xét
  • bật nhận xét ẩn danh

Trong các loại Mục Tôi đã chọn loại "Báo cáo hoạt động" từ trình đơn thả xuống và bật tùy chọn "Cho phép nhận xét".

Trên hệ thống tập tin

Trong tập tin FTI activityreport.xml:

<property name="allow_discussion">True</property> 

Tôi đã khởi động lại các ví dụ và thậm chí cài đặt lại các sản phẩm, nhưng tôi không thể kích hoạt phần ý kiến ​​trong loại khéo léo.

Điều đáng nói đến là loại tiêu chuẩn (ví dụ Trang) có thể kích hoạt mô-đun thảo luận.

Có điều gì tôi thiếu không?

+1

Tôi nghĩ rằng vấn đề của tôi cũng liên quan đến thực tế là loại nội dung của tôi là thư mục. Làm thế nào để tôi cho phép thảo luận về một loại thư mục? – jcuot

Trả lời

3

plone.app.discussion hiện đang vô hiệu hóa nhận xét cho tất cả các vùng chứa (xem https://dev.plone.org/ticket/11245 để thảo luận).

tôi đã sử dụng một bản vá khỉ như sau trong một dự án ngắn mạch kiểm tra bình thường và chắc chắn rằng bình luận đã được kích hoạt cho kiểu nội dung folderish tôi:

from Acquisition import aq_inner 
from Products.highcountrynews.content.interfaces import IHCNNewsArticle 
from plone.app.discussion.conversation import Conversation 
old_enabled = Conversation.enabled 
def enabled(self): 
    parent = aq_inner(self.__parent__) 
    if parent.portal_type == 'my_portal_type': 
     return True 
    return old_enabled(self) 
Conversation.enabled = enabled 

nơi 'my_portal_type' là, tất nhiên , portal_type bạn muốn bật tính năng nhận xét.

+1

Cảm ơn David! Điều này trông giống như giải pháp tôi sẽ áp dụng. Tôi cũng đang xem xét chuyển các loại thành tài liệu đơn giản. Trong trường hợp của tôi, lợi thế duy nhất sử dụng các loại thư mục sẽ là giữ các tài liệu liên quan với nhau trong vùng chứa. – jcuot

2

Phản hồi của David không chính xác. Lớp được monkeypatched là plone.app.discussion.browser.conversation.ConversationView:

from Acquisition import aq_inner 
from plone.app.discussion.browser.conversation import ConversationView 
old_enabled = ConversationView.enabled 

def enabled(self): 
    parent = aq_inner(self.__parent__) 
    if parent.portal_type == 'My_type': 
     return True 
    return old_enabled(self) 

Nó hoạt động cho Plone 4.2 ít nhất. Tuy nhiên, cảm ơn David vì gợi ý.

2

Như David và Victor đã chỉ ra, bạn chỉ có thể ghi đè phương thức bật của lớp hội thoại. Tôi muốn giới thiệu cách sử dụng các phương pháp sau đó là một chút sạch hơn khỉ vá lớp đàm thoại:

https://github.com/plone/plone.app.discussion/blob/master/docs/source/howtos/howto_override_enable_conversation.txt

Tôi cũng đã thêm hỗ trợ cho các loại khéo léo để plone.app.thảo luận thời gian gần đây, vì vậy càng sớm càng có một phiên bản mới, bạn sẽ không cần phải tùy chỉnh các lớp nói chuyện nữa:

https://github.com/plone/plone.app.discussion/commit/0e587a7d8536125acdd3bd385e880b60d6aec28e

Lưu ý rằng phương pháp này hỗ trợ cho ý kiến ​​về đối tượng folderish. Không có hỗ trợ để bật/tắt nhận xét cho các đối tượng INSIDE một đối tượng thư mục nào.

Trong trường hợp bạn muốn để có thể bật/tắt cho ý kiến ​​với một lĩnh vực hành vi/widget:

https://github.com/plone/plone.app.dexterity/commit/0573df4f265a39da9efae44e605e3815729457d7

này hy vọng sẽ làm cho nó vào việc phát hành plone.app.dexterity tiếp theo là tốt.

+0

Giải pháp tốt vì tất cả các thay đổi đều nằm ngoài bất kỳ trứng gói đơn lẻ nào. Các "howto_override_enable_conversation.txt" chủ yếu là làm việc cho tôi. Trước khi "if context.allow_discussion không phải là None", tôi phải kiểm tra xem thuộc tính có tồn tại trong ngữ cảnh hay không (hoặc thêm khối try, catch). –

+0

@RyanAnderson bạn có phiền khi thay đổi howto và thực hiện yêu cầu kéo để tôi có thể cập nhật tài liệu không? – tisto

1

tôi giải quyết trong configure.zcml:

<interface interface="Products.CMFPlone.interfaces.INonStructuralFolder" /> 

<class class="Products.PloneHelpCenter.types.Definition.HelpCenterDefinition"> 
    <implements interface="Products.CMFPlone.interfaces.INonStructuralFolder" /> 
</class> 

UPDATE: đây không phải là một ý tưởng tốt. Tôi gặp sự cố khi thiếu menu Thêm cho từng loại nội dung có bản sửa lỗi này.

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