Grav-plugin-admin: μ‚¬μš©μž μ •μ˜ μΆ”κ°€ νŽ˜μ΄μ§€ μ˜΅μ…˜

에 λ§Œλ“  2017λ…„ 04μ›” 13일  Β·  16μ½”λ©˜νŠΈ  Β·  좜처: getgrav/grav-plugin-admin

getgrav/grav#421μ—μ„œ μ„€λͺ…ν–ˆλ“―이 νŽ˜μ΄μ§€ μΆ”κ°€ λ©”λ‰΄μ—μ„œ 청사진을 기반으둜 μ‚¬μš©μž μ •μ˜ νŽ˜μ΄μ§€ μœ ν˜•μ„ μΆ”κ°€ν•  수 μžˆλŠ” κ°€λŠ₯성이 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ 기본적으둜 λ©”λ‰΄μ—λŠ” λ‹€μŒκ³Ό 같은 선택 사항이 μžˆμŠ΅λ‹ˆλ‹€.

  • νŽ˜μ΄μ§€ μΆ”κ°€
  • 폴더 μΆ”κ°€
  • λͺ¨λ“ˆμ‹ μΆ”κ°€
    λ‹€μŒκ³Ό 같이 씬을 μΆ”κ°€ν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.
    λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό μΆ”κ°€
    가러리 μΆ”κ°€
    기타 특수 νŽ˜μ΄μ§€ μœ ν˜•μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ μ˜΅μ…˜μ€ 예λ₯Ό λ“€μ–΄ λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Ό 등을 λ§Œλ“€κΈ° μœ„ν•΄ "ν•­λͺ©" νŽ˜μ΄μ§€ ν…œν”Œλ¦Ώμ΄ μžˆλŠ” blog/ 디렉토리 내뢀에 νŽ˜μ΄μ§€κ°€ μƒμ„±λ˜λ„λ‘ μžλ™μœΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€.

이것은 특히 νŽ˜μ΄μ§€ ν…œν”Œλ¦Ώκ³Ό 폴더 ꡬ쑰에 λŒ€ν•΄ κ±±μ •ν•  ν•„μš”κ°€ μ—†λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‚¬μ΄νŠΈλ₯Ό λ„˜κ²¨μ€„ λ•Œ 맀우 μœ μš©ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.

enhancement

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이에 λŒ€ν•œ ꡬ성을 ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
λ‚˜λŠ” 이것을 PR둜 λ¦¬νŒ©ν† λ§ν•  수 μžˆλŠ” ꡬ성 ꡬ쑰에 λ™μ˜ν•  수 μžˆλ‹€λ©΄ λ‚΄ 둜컬 버전에 이것을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

기본적으둜 νŽ˜μ΄μ§€ μΆ”κ°€μ—μ„œ μ‚¬μš©ν•˜λŠ” ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

admin.yaml

add_modals:
  post:
    label: Add Post
    blueprint: admin/pages/new_post
    template: custom_template
    link_classes: some_class
    modal_classes: some_modal_class
    with:
      some_data: for the template
    show_in: dropdown
  image:
    label: Add Image
    blueprint: admin/pages/new_image
    show_in: bar

μ˜ˆμ‹œ 청사진. λ‚΄ λΈ”λ‘œκ·Έμ—λŠ” 1λͺ… μ΄μƒμ˜ μž‘μ„±μžκ°€ μžˆμœΌλ―€λ‘œ getNewPostRouteλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžμ— λŒ€ν•œ 경둜λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ "/dave/posts"λ₯Ό μƒμ„±ν•˜λŠ” λ‚΄ 계정에 λŒ€ν•œ 경둜λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

new_post.yaml

form:
  validation: loose
  fields:
    section:
        type: section
        title: Add Post

    title:
      type: text
      label: Post Title
      validate:
        required: true

    folder:
      type: hidden

    route:
      type: hidden
      data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute'

    name:
      type: hidden
      default: 'post'

    visible:
      type: hidden
      default: ''

    blueprint:
      type: blueprint

일뢀 이미지

screenshot from 2017-04-26 11-45-05
screenshot from 2017-04-26 11-45-26

λͺ¨λ“  16 λŒ“κΈ€

λ‚˜λŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•΄ 이것을 곧 ν•„μš”λ‘œ ν•  것이닀
이것을 직접 κ΅¬ν˜„ν•  수 μžˆλŠ” 방법에 λŒ€ν•œ ν‘œμ‹œκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

κ³ κ°μ—κ²Œ νŽ˜μ΄μ§€λ₯Ό μΆ”κ°€ν•˜λΌκ³  말할 λ•Œ 고객이 ν•΄μ•Ό ν•  일은 μ μ ˆν•œ ν…œν”Œλ¦Ώμ„ μ„ νƒν•˜λŠ” κ²ƒλΏμž…λ‹ˆλ‹€. λΈ”λ‘œκ·Έ, 가러리 등을 μ„€μ •ν•˜λ©΄ κ°„λ‹¨ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ •λ§λ‘œ λ²„νŠΌμ„ μΆ”κ°€ν•˜κ³  μ‹Άλ‹€λ©΄ νŽ˜μ΄μ§€ μΆ”κ°€ λ²„νŠΌμ„ λ³΅μ œν•˜κ³  ν•„λ“œ ν…œν”Œλ¦Ώμ„ 미리 μ„ νƒν•˜κ³  μˆ¨κΉλ‹ˆλ‹€(μ›ν•˜λŠ” 경우).

@ricardo118 λ‚˜λŠ” λ‹¨μˆœνžˆ κ·Έλ“€μ—κ²Œ μ˜¬λ°”λ₯Έ ν…œν”Œλ¦Ώκ³Ό μ˜¬λ°”λ₯Έ 폴더λ₯Ό μ„ νƒν•˜λΌκ³  말할 수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. λΆˆν–‰νžˆλ„ ν˜„μž¬ λͺ¨λ‹¬μ΄ μ„€κ³„λœ 방식 λ•Œλ¬Έμ— ν΄λ”μ˜ 선택 μƒμžμ—λŠ” μ‚¬μ΄νŠΈμ˜ λͺ¨λ“  νŽ˜μ΄μ§€κ°€ λ‚˜μ—΄λ©λ‹ˆλ‹€. μ˜¬λ°”λ₯Έ 폴더λ₯Ό 찾으렀면 잠재적으둜 수백 νŽ˜μ΄μ§€λ₯Ό μŠ€ν¬λ‘€ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 미리 μ •μ˜λœ λͺ¨λ‹¬.

λ‹¨μˆœνžˆ λͺ¨λ‹¬μ„ λ³΅μ‚¬ν•˜μ—¬ λΆ™μ—¬λ„£κ³  ν”ŒλŸ¬κ·ΈμΈ νŒŒμΌμ„ 직접 νŽΈμ§‘ν•˜λŠ” 것보닀 이λ₯Ό κ΅¬ν˜„ν•˜λŠ” 더 μš°μ•„ν•œ μ†”λ£¨μ…˜μ„ μ›ν–ˆμŠ΅λ‹ˆλ‹€. (μ—…λ°μ΄νŠΈ λ•Œλ¬Έμ—)
κ·Έλž˜λ„ μ‹œλ„ν–ˆμ§€λ§Œ 선택 μƒμžμ˜ 기본값을 μ§€μ •ν•˜λ €κ³  ν•  λ•Œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. μ΄μƒν•˜κ²Œλ„ 기본적으둜 μ˜¬λ°”λ₯Έ μ˜΅μ…˜μ„ 얻지 λͺ»ν•©λ‹ˆλ‹€.

λ‚΄κ°€ μ›ν•˜λŠ” λŒ€λ‘œ μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  관리 ν”ŒλŸ¬κ·ΈμΈμ„ ν™•μž₯ν•  수 μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

이에 λŒ€ν•œ ꡬ성을 ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
λ‚˜λŠ” 이것을 PR둜 λ¦¬νŒ©ν† λ§ν•  수 μžˆλŠ” ꡬ성 ꡬ쑰에 λ™μ˜ν•  수 μžˆλ‹€λ©΄ λ‚΄ 둜컬 버전에 이것을 가지고 μžˆμŠ΅λ‹ˆλ‹€.

기본적으둜 νŽ˜μ΄μ§€ μΆ”κ°€μ—μ„œ μ‚¬μš©ν•˜λŠ” ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

admin.yaml

add_modals:
  post:
    label: Add Post
    blueprint: admin/pages/new_post
    template: custom_template
    link_classes: some_class
    modal_classes: some_modal_class
    with:
      some_data: for the template
    show_in: dropdown
  image:
    label: Add Image
    blueprint: admin/pages/new_image
    show_in: bar

μ˜ˆμ‹œ 청사진. λ‚΄ λΈ”λ‘œκ·Έμ—λŠ” 1λͺ… μ΄μƒμ˜ μž‘μ„±μžκ°€ μžˆμœΌλ―€λ‘œ getNewPostRouteλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžμ— λŒ€ν•œ 경둜λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ "/dave/posts"λ₯Ό μƒμ„±ν•˜λŠ” λ‚΄ 계정에 λŒ€ν•œ 경둜λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

new_post.yaml

form:
  validation: loose
  fields:
    section:
        type: section
        title: Add Post

    title:
      type: text
      label: Post Title
      validate:
        required: true

    folder:
      type: hidden

    route:
      type: hidden
      data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute'

    name:
      type: hidden
      default: 'post'

    visible:
      type: hidden
      default: ''

    blueprint:
      type: blueprint

일뢀 이미지

screenshot from 2017-04-26 11-45-05
screenshot from 2017-04-26 11-45-26

@david-szabo97 이것이 λ°”λ‘œ μ œκ°€ 염두에 λ‘μ—ˆλ˜ κ²ƒμž…λ‹ˆλ‹€. 잘 ν–ˆμ–΄! 이 ꡬ성은 λ‚˜μ—κ²Œ κ½€ ν•©λ¦¬μ μœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. λ‚˜λŠ” 특히 κ·Έ show_in: bar|dropdown, 깔끔함을 μ’‹μ•„ν•©λ‹ˆλ‹€. 폴더 이름 뢀뢄을 μ–΄λ–»κ²Œ μ²˜λ¦¬ν•©λ‹ˆκΉŒ?

νŒ€μ΄ PR에 λŒ€ν•œ 인상을 μ œκ³΅ν•˜κΈ°λ₯Ό κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ 온라인 μ–΄λ”˜κ°€μ— μ½”λ“œ 버전이 μžˆμŠ΅λ‹ˆκΉŒ?

@fireraccoon μΆ”κ°€ νŽ˜μ΄μ§€μ˜ javascript 뢀뢄을 νŽΈμ§‘ν•˜μ—¬ 제λͺ©μ„ μžλ™μœΌλ‘œ μŠ¬λŸ¬κ·Έν™”ν–ˆμŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€ λ•Œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ. 이 경우 폴더가 숨겨져 있기 λ•Œλ¬Έμ— λ³Ό 수 μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 일반 νŽ˜μ΄μ§€λ₯Ό 생성할 λ•Œλ„ λ§ˆμ°¬κ°€μ§€μΌ κ²ƒμž…λ‹ˆλ‹€. λ‹¨μˆœνžˆ μŠ¬λŸ¬κ·Έν™”λœ 제λͺ©μ„ 폴더 ν…μŠ€νŠΈ μƒμžμ— λ³΅μ‚¬ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

μƒˆ νŽ˜μ΄μ§€(폴더)λ₯Ό κ²½λ‘œμ— μΆ”κ°€ν•˜κΈ° λ•Œλ¬Έμ— data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute 와 λ§ˆμ°¬κ°€μ§€λ‘œ μ‚¬μš©μž 지정 경둜λ₯Ό 지정할 수 있으며 κ²°κ΅­ λ™μΌν•œ 효과λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. ($경둜 . $폴더)

아직 ꡬ할 수 μžˆλŠ” 곳이 μ—†μ§€λ§Œ μ›ν•˜μ‹œλ©΄ μ˜¬λ €λ“œλ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

@david-szabo97 μ•Œκ² μŠ΅λ‹ˆλ‹€! JS λ°©μ‹μœΌλ‘œ ν–ˆλŠ”μ§€ μ•„λ‹ˆλ©΄ μΌμ’…μ˜ 포슀트 폼 ν”„λ‘œμ„Έμ‹± ν›…μœΌλ‘œ ν–ˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. λ„€ μ‹œκ°„λ˜μ‹œλ©΄ κΌ­ λ³΄κ³ μ‹ΆμŠ΅λ‹ˆλ‹€ κ°μ‚¬ν•©λ‹ˆλ‹€!

@fireraccoon 이벀트 ν›…μœΌλ‘œ ν•  수 μžˆμ§€λ§Œ JS 방식이 더 λ‚˜μ€ 것 κ°™μŠ΅λ‹ˆλ‹€.
zip νŒŒμΌμ„ μ²¨λΆ€ν–ˆμŠ΅λ‹ˆλ‹€. ν”ŒλŸ¬κ·ΈμΈ/κ΄€λ¦¬μžλ₯Ό 이 κ΄€λ¦¬μž ν΄λ”λ‘œ λ°”κΎΈμ„Έμš”.
* MessedCode λ₯Ό κ²€μƒ‰ν•˜μ—¬ λ‚΄κ°€ λ³€κ²½ν•œ 사항을 μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ‹€λ₯Έ λ³€κ²½ 사항이 μžˆμœΌλ―€λ‘œ λ‹€λ₯Έ λͺ¨λ“  것을 μ œκ±°ν•˜κ³  잘 μž‘λ™ν•˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

admin.min.jsμ—μ„œ 찾을 수 μžˆλŠ” μ½”λ“œλŠ” add.jsμ—μ„œ λ³΅μ‚¬λ©λ‹ˆλ‹€. 이것은 전체 JS ν”„λ‘œμ νŠΈλ₯Ό λ‹€μ‹œ 포μž₯ν•˜λŠ” 것을 ν”Όν•  수 μžˆλŠ” 방법일 λΏμž…λ‹ˆλ‹€.

제 λΈ”λ‘œκ·Έμ—λŠ” 두 λͺ…μ˜ μ‚¬μš©μžκ°€ μžˆμœΌλ―€λ‘œ λͺ¨λ“  μ‚¬λžŒμ΄ νŽΈμ•ˆν•˜κ²Œ κ²Œμ‹œν•  수 μžˆλ„λ‘ λ§Žμ€ 변경을 ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 μš°λ¦¬μ—κ²Œ μ ˆμ‹€νžˆ ν•„μš”ν•œ λ³€ν™” 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.
admin.zip

@david-szabo97 정말 κ°μ‚¬ν•©λ‹ˆλ‹€! 당신은 λ‚΄ ν•˜λ£¨λ₯Ό μ €μž₯ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것을 μ΅œμ‹  λ²„μ „μœΌλ‘œ μ•„μ£Ό μ‰½κ²Œ μž‘λ™μ‹œν‚¬ 수 μžˆμ—ˆλ‹€. 맀λ ₯처럼 μž‘λ™ν•©λ‹ˆλ‹€. 이것은 맀우 μ€‘μš”ν•œ μ‚¬μš© 사둀라고 μƒκ°ν•˜λ©° 곧 ν”ŒλŸ¬κ·ΈμΈμ— ν†΅ν•©λ˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. κ²Œλ‹€κ°€ λ³€κ²½ 사항은 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€.

PR이 쒋을 κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ JS에 μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ„ ν˜Έν•  κ²ƒμž…λ‹ˆλ‹€.

@rhukster , λͺ¨λ‹¬μ—μ„œ μž„μ˜μ˜ μ „λ©΄ 자료 데이터λ₯Ό μ „λ‹¬ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 이것은 ν˜„μž¬ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ½”λ“œ λ² μ΄μŠ€μ—μ„œ μ–΄λ””λ₯Ό μ‚΄νŽ΄λ΄μ•Ό ν•˜λŠ”μ§€ μ œμ•ˆν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? 이 λͺ¨λ‹¬μ˜ λͺ©μ μ— λŒ€ν•΄ 잘λͺ» μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

form:
  validation: loose
  fields:
    section:
      type: section
      title: Add Fancy Page

    title:
      type: text
      label: Title

    a_custom_attribute:
      type: text
      default: dummy
      label: Won't pre-populate the corresponding field

    header.another_custom_attr:
      type: text
      label: Neither will this
      validate:
        required: true

@k8n
μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμ€ 디렉토리 및 ν…œν”Œλ¦Ώ ν•„λ“œλ§Œ μž‘λ™ν•˜μ§€λ§Œ λͺ¨λ“  μ‚¬μš©μž μ •μ˜ 머리말 속성은 μ±„μ›Œμ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

with ν•„λ“œκ°€ μƒμ„±ν•˜λŠ” μ‹€μ œ νŽ˜μ΄μ§€μ— 데이터λ₯Ό μ–΄λ–»κ²Œ μ „λ‹¬ν•˜λŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μ‚¬μš©μž 지정 λͺ¨λ‹¬μ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ™€ 같이 - 헀더에 ν•„λ“œλ₯Ό μ„€μ •ν•˜λ €κ³  ν•˜μ§€λ§Œ 헀더에 아무 것도 λ‚˜νƒ€λ‚˜μ§€ μ•ŠμœΌλ©° 였λ₯˜λ„ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

```ν˜•μ‹:
검증: λŠμŠ¨ν•œ
ν•„λ“œ:
λΆ€λΆ„:
μœ ν˜•: μ„Ήμ…˜
제λͺ©: λ―Έλ””μ–΄ ν•­λͺ© μΆ”κ°€

title:
  type: text
  label: Media Item Title
  validate:
    required: true

header.article_hyperlink:
  type: text
  label: Article Hyperlink (URL)
  validate:
    required: true
    type: url
header.article_date:
  type: date
  label: Article Date
  validate:
    required: true
header.article_blurb:
  type: textarea
  label: Article Blurb

folder:
  type: hidden
  default: '@slugify-title'

route:
  type: hidden
  default: /media

name:
  type: hidden
  default: 'media-item'

blueprint:
  type: blueprint

```

λͺ¨λ‹¬μ΄ λ‚˜νƒ€λ‚˜κ³  μ½˜ν…μΈ λ₯Ό μƒμ„±ν•˜μ§€λ§Œ ν•„λ“œμ˜ 데이터가 μ „λ‹¬λ˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

@sjclark , μœ„μ˜ λ‚΄ μ˜κ²¬μ—μ„œ λ§ν–ˆλ“―μ΄ ν˜„μž¬ λͺ¨λ‹¬μ—μ„œ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” 것이 κ΅¬ν˜„λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ Grav Dev Team에 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

λ°”λΌκ±΄λŒ€ λˆ„κ΅°κ°€κ°€ 곧 이λ₯Ό μœ„ν•΄ PR을 ν•  κ²ƒμž…λ‹ˆλ‹€!

이것에 +1.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰