2011-04-21 6 views
4

다른 객체 대신 객체의 뷰를 렌더링하고 원래 경로를 원래대로 유지하여 빵 부스러기 및 객체 탭 등의 캐 노니 컬 경로를 그대로 유지하고 싶습니다.Plone에서 Canonical Object 덮어 쓰기

표준 객체 대신 다른 객체를 렌더링하는 방법을 알고 있지만 "plone_context_state"브라우저보기에서 "canonical_object"메서드를 무시한 경우가 아니면 표준 객체에 사용 된 객체를 재정의하는 것이 거의 불가능한 것처럼 보입니다. 여기

내가 내보기 전화 다른 객체 렌더링 방법이 코드입니다 : 이제

item = aq_base(default_item).__of__(self.context) 
layout = item.getLayout() or item.getDefaultLayout() 
try: 
    return aq_acquire(item, layout)(*args, **kwargs) 
except AttributeError: 
    try: 
     return getMultiAdapter((item, self.request), name=layout)(*args, **kwargs) 
    except: pass 

return super(DefaultItemEnabledView, self).__call__(*args, **kwargs) 

을 가능 플론 (Plone)에 의해 사용되는 표준 개체를 만드는 것입니다은 원래 하나 때문에 빵 부스러기, 오브젝트를 통과 탭 등이 적절하게 적용됩니까?

+0

절을 제외한 빈은 ZODB 충돌 오류의 경우에 문제를 일으킬 수 ; 그들은 삼켜지고 많은 별난 일이 일어날 것입니다. –

+0

hhmm, 글쎄, 정말 아무것도 발생하지 않도록 뷰를 렌더링 할 때 데이터베이스에 쓸 내용이 없어야합니다. 아니면 내가 틀렸어? – vangheem

+0

모든 코드가 작동하고 쓰기를 발생시키지 않는다고 가정 할 수는 없습니다. ;-) 결론 : Zope의 담요는 거의 항상 당신을 물지 않을 것입니다. –

답변

3

내가 원하는 것은 불가능한 작업입니다. 당신은 새로운 컨텍스트를 위해 전체 크롬을 렌더링하고 있으며 따라서 모든 컨텍스트를 사용하여 렌더링 할 것입니다. 모든 것을 다시해야합니다. 이동 경로, 작업, 포틀릿, 기타 상황에 맞는 뷰렛 등이 있습니다.

임의의 개체의 가능한 모든 레이아웃을 지원해야한다는 것이 어떤 것인지 잘 모르겠습니다. 여기에서 옵션을 다시 생각해보아야 할 수도 있습니다.

모든 가능한 레이아웃이 작동해야하는 유스 케이스가없는 경우 다른 객체의 내용을 다시 렌더링하는 표준 객체에 대한 사용자 정의보기를 만들면됩니다. 콘텐츠에 대한 많은 뷰에는 이미 다시 사용할 수있는 매크로가 포함되어 있습니다. 템플릿의 폴더에 항목을 렌더링하는 데 이러한 매크로를 다시 사용하는 예제 템플릿은 skins/plone_content/folder_full_view_item.pt을 참조하십시오.

+0

이것은 확실히 좋은 방법입니다. 조언 해 주셔서 감사합니다. – vangheem

1

bda.contentproxy이 할 제품 이었지만, 인식 수 ... 매우 복잡한 작업, 모퉁이 뒤에 문제의 가득