2013-03-06 1 views
3

내 카탈로그 결과의 특정 개체를 숨기는 방법이 있습니까? 표시하고 싶지 않은 구성 파일이 있습니다. ID로 필터링하고 있지만 너무 추해 보입니다.카탈로그 결과의 특정 개체 숨기기

from Products.CMFCore.utils import getToolByName 
def search(context): 
    catalog = getToolByName(context, 'portal_catalog') 
    items = catalog() 
    for item in items: 
     if item.id != "config_file": 
      'do something' 
+0

검색 결과에 항목이 표시되지 않도록하는 방법에는 여러 가지가 있지만 모두 모두 다른 유스 케이스를 대상으로합니다. 탐색 트리에 표시하지 말고 권한이없는 경우 표시하지 않습니다. 사용 사례는 무엇입니까? –

+0

정말 분명하지 않았습니다. 뉴스를 보여주는 간단한보기를하고 있는데 사용자가 개체를 볼 수있는 권한이 있지만 표시하고 싶지 않습니다. 탐색 트리에 이미 객체를 숨겨 놨습니다. –

답변

3

이미 탐색 트리에서 개체를 숨기고있는 경우 exclude_from_nav에 대한 테스트에 의해 동일한 속성에 필터링 할 수 있습니다

items = catalog() 
for item in items: 
    if item.exclude_from_nav: 
     continue 

    # do something with all objects *not* excluded from navigation. 

하지 일치 a를 수행하는 것이 일을 걸러 어렵다 기준. 위와 같이 두뇌 객체에 대한 테스트를 사용하면 결과 집합에서 작은 하위 집합을 제거하는 완벽한 방법입니다.

더 많은 비율의 '예외'를 ​​처리해야하는 경우 아키텍처를 다시 생각해 볼 필요가 있습니다.

1

Products.AdvancedQuery을 사용하면 고급 쿼리를 만들고 카탈로그 결과를 필터링 할 수 있습니다. 이 내용은 how to을 참조하십시오.

+1

이 제품을 알지 못했습니다. 그것은 좋은 것처럼 보이지만이 경우에는 불필요하다고 생각합니다. 어쨌든 도움 주셔서 감사합니다. –

1

일반적으로 컨텐트 항목의 만료 날짜를 과거 날짜로 설정하면 사용자가 비활성 포털 컨텐츠에 액세스 권한이없는 한 검색 결과에서 해당 항목이 숨겨집니다.

모든 사람에게 표시되어야하는 콘텐츠는 숨기고 검색 결과는 어수선하게 정리하지 않아도됩니다. 홈페이지로 사용되는 문서.

항상이 작은 '해킹'을 사용했을 때 나는 쉽게 알아볼 수 있도록 2001 년 1 월 1 일,을 날짜로 사용합니다.