2013-05-08 1 views
0

페이지 편집기의 필드에 대한 사용자 지정 단추 집합이 있고이를로드 할 때 조건에 따라 일부를 사용하지 않도록 설정하려고합니다. 이것을 할 수있는 방법이 있습니까? 이 버튼은 해당 필드가 들어있는 템플리트의 해당 필드로 직접 이동할 때 '페이지 편집기'에 대한 mulitlist 옵션을 사용하여 설정되었습니다.특정 조건에 따라 필드의 페이지 편집기 단추 비활성화

답변

2

Page Editor 자체 (리본) 안에있는 버튼의 경우 QueryState 메서드를 재정의 할 수 있습니다. 버튼을 사용하지 않으려면 false를 반환하고 사용하려면 true를 반환합니다. CommandState.Hidden

[편집]
제가 오해를했습니다 수도 사용 -

public override CommandState QueryState(CommandContext context) 
{ 
    var field = (MultilistField)context.Items[0].Fields["Fieldname"]; 
    var selected = field.GetItems(); 
    // Check whether the correct ones are selected. If so, return true - else false 
} 

또한 버튼을 숨길 수 :

방법은 public override CommandState QueryState(CommandContext context)

당신이 좋아하는 뭔가를 할 수

입니다 - 필드 유형에 대한 버튼 인 경우 this article을 추천합니다. 버튼을 숨기는 방법을 보여주지는 않지만 적어도 무시하려면 public override void HandleMessage(Message message) 메소드로 무언가를 할 수 있습니다.

[편집]
다른 편집으로 필드 ID 또는 이름을 확인할 수 있습니다.

getChromeData 파이프 라인을 변경하거나 추가 할 수 있습니다. 예를 들어 GetFieldChromeData 클래스의 Process 메서드를 재정의 할 수 있습니다.
이 클래스는 코어 데이터베이스에 정의 된 버튼을 /sitecore/content/Applications/WebEdit/Common field buttons에 생성합니다. 그들 모두를 추가하는 대신 거기에 조건을 추가 할 수 있습니다.
단추를 얻은 후에 추가하기 전에 필드 ID 또는 필드 이름에 따라 원하지 않는 단추를 제거 할 수 있습니다.

[최종 편집]
위의 편집보다 좀 더 우아한 해결책을 작성했습니다. 당신은 그것을 here 읽을 수 있습니다. 간단히 말해서 Sitecore 코드를 재정의하는 대신 파이프 라인에 프로세서를 추가하고 필드 제목과 동일한 항목의 다른 필드 값을 기반으로 단추를 제거했습니다.

public class RemoveButtons : GetChromeDataProcessor 
{ 
    public override void Process(GetChromeDataArgs args) 
    { 
     Assert.ArgumentNotNull(args, “args”); 
     Assert.IsNotNull(args.ChromeData, “Chrome Data”); 

     if (“field”.Equals(args.ChromeType, StringComparison.OrdinalIgnoreCase)) 
     { 
      Field argument = args.CustomData["field"] asField; 
      Assert.ArgumentNotNull(argument, “CustomData[\"{0}\"]“.FormatWith(new object[] { “field” })); 

      if (argument.Name == “Title” && MainUtil.GetBool(argument.Item["NeedsToBeCheckedToPersonalize"], false)) 
      { 
       args.ChromeData.Commands.RemoveAll(delegate(WebEditButton b) 
           { 
            return b.Header == “Personalize”; 
           }); 
      } 
     } 
    } 
} 
+0

흠 - 문제는 페이지 편집기의 텍스트 필드 (sc : 텍스트)에 대한 문제이며, 세 개의 다른 위치에 동일한 텍스트 필드가 있다는 점입니다. 아마 그들은 모두 동일한 명령이기 때문에 마지막 텍스트 필드의 버튼 만 사용할 수없는 것 같습니다. –

+0

두 번째 편집 확인 - 도움이 될 것임 – Trayek

+0

마지막 편집을 확인하면 해당 유형의 모든 필드에 숨겨진 명령 문제가 해결됩니다. – Trayek