Orchard: module 개발 기초 기술 지식

17832 단어 직장레저OrchardB/S
Orchard: Hello World 모듈을 어떻게 생성하는지, Orchard: VS2010을 사용하여 지도 Content Part, Orchard를 생성하는지: Content Part를 생성하는지에서 Orchard의 모듈을 어떻게 생성하는지 소개합니다. 이 편은 Orchard의 표현 절차와 이전에 소개한 handler, drvier와 같은 대상을 간략하게 소개합니다.

Orchard rendering work


콘텐츠 파트를 만드는 데 필요한 대상들

  • A content part itself
  • A content part record
  • A handler
  • A driver
  • Display shapes (.cshtml Razor view files)
  • Data migration

  • A content part


    이것은 ContentPart 또는 ContentPart (T는 대응하는 record 형식을 나타낸다) 를 계승하는 일반 클래스입니다.데이터베이스를 유지할 필요가 없는 경우 ContentPart를 사용하고, 데이터베이스에 데이터를 저장하려면 ContentPart를 사용합니다.
        
        
        
        
    public class MapPart : ContentPart < MapRecord >
    {
    [Required]
    public double Latitude
    {
    get { return Record.Latitude; }
    set { Record.Latitude = value; }
    }

    [Required]
    public double Longitude
    {
    get { return Record.Longitude; }
    set { Record.Longitude = value; }
    }
    }

     

    A content part record


    이것은 간단한 POCO 실체 대상입니다. 이 대상은 파트의 데이터를 대표합니다.Orchard는 베이스 데이터베이스에서 데이터를 가져오고 업데이트하는 것을 책임지기 때문에 리코더를 정의하는 것 외에 다른 일을 할 필요가 없습니다.
     
        
        
        
        
    public class MapRecord : ContentPartRecord
    {
    public virtual double Latitude { get ; set ; }
    public virtual double Longitude { get ; set ; }
    }

     
     

    A handler


    Handler는 Content Handler에서 계승하여 Orchard가 당신의 파트를 어떻게 처리하는지 알려줍니다.
  • 데이터베이스 지속화
  • 콘텐츠 item의 생명주기 이벤트 처리
  • 당신의 파트에 존재하는 콘텐츠 items를 추가할 것을 정의합니다
  •     
        
        
        
    public class MapHandler : ContentHandler
    {
    public MapHandler(IRepository < MapRecord > repository)
    {
    Filters.Add(StorageFilter.For(repository));
    }
    }

    A driver


    드라이브를 하나의 콘텐츠 파트의 컨트롤러로 간주할 수 있다.그것은 당신의 파트를 표시하고 편집하는 것을 책임진다.Drivers는 Content Part Driver에서 계승해야 합니다. T는 당신의 콘텐츠 part 유형입니다.다시 로드할 수 있는 방법은 Display와 Editor 두 개입니다.
  • Display method is called whenever your part is rendered in frontend.
  • Editor 메서드: 하나는 편집 창(GET), 하나는 저장 창(POST)을 보여줍니다.콘텐츠 item (예를 들어 새 페이지) 을 만들기 시작할 때 첫 번째 방법을 사용하고, "Save"를 눌렀을 때 두 번째 방법을 터치합니다.

  • MVC의 controller actions와 유사합니다. 이 방법은 shape 대상을 되돌려줍니다.Shapes는 매개 변수의 동적 대상 방법을 통해 찾을 수 있습니다.cshtml, 예를 들어/Views/Parts 디렉터리에 MyModule이 존재한다면.MyPart.cshtml 파일은 동적 방법shapeHelper를 통해Parts_MyModule_My Part(...)에서 액세스
     
        
        
        
        
    public class MapDriver : ContentPartDriver < MapPart >
    {
    protected override DriverResult Display(
    MapPart part,
    string displayType, dynamic shapeHelper)
    {

    return ContentShape( " Parts_Map " , () => shapeHelper.Parts_Map(
    Longitude: part.Longitude,
    Latitude: part.Latitude));
    }

    // GET
    protected override DriverResult Editor(
    MapPart part, dynamic shapeHelper)
    {

    return ContentShape( " Parts_Map_Edit " ,
    ()
    => shapeHelper.EditorTemplate(
    TemplateName:
    " Parts/Map " ,
    Model: part,
    Prefix: Prefix));
    }
    // POST
    protected override DriverResult Editor(
    MapPart part, IUpdateModel updater, dynamic shapeHelper)
    {

    updater.TryUpdateModel(part, Prefix,
    null , null );
    return Editor(part, shapeHelper);
    }
    }

     
     

    Display shapes


    여기가 바로 Razor 보기입니다.cshtml 파일, 명명약정에 따라 표시된 템플릿은/Views/Parts 디렉터리에 존재하고, Editor driver 방법을 되돌릴 때의 템플릿은/Views/EditorTemplates/Parts 디렉터리에 존재합니다.
     
        
        
        
        
    < img alt = " Location " border = " 1 " src = " http://maps.google.com/maps/api/staticmap?
    & zoom = 12
    & size = 50 0x500
    & maptype = roadmap
    & markers = color:blue | @Model.Latitude,@Model.Longitude
    & sensor = false " />

     
     

    Data migration


    이것은 데이터베이스를 정의하는 곳이다.일반적으로 Orchard 명령줄에 codegen datamigration을 입력하여 디렉토리를 생성합니다.여기에는 일부 설정 등도 변경할 수 있다.
        
        
        
        
    public class Migrations : DataMigrationImpl
    {

    public int Create()
    {
    // Creating table MapRecord
    SchemaBuilder.CreateTable( " MapRecord " , table => table
    .ContentPartRecord()
    .Column(
    " Latitude " , DbType.Double)
    .Column(
    " Longitude " , DbType.Double)
    );

    ContentDefinitionManager.AlterPartDefinition(
    typeof (MapPart).Name, cfg => cfg.Attachable());

    return 1 ;
    }
    }

    추천: 필요할 수 있는 온라인 전자책
    나의 시나닷컴 목도리:http://t.sina.com.cn/openexpressapp
    전재를 환영합니다. 전재는 주금근에서 전재합니다[http://zhoujg.cnblogs.com/]

    좋은 웹페이지 즐겨찾기