Kontent by Kentico의 대량 업데이트 콘텐츠 유형

모든 CMS의 성숙한 프로젝트에는 많은 콘텐츠 유형이 있습니다. 스크립트를 사용하여 유지 관리하면 해당 모델의 변경이 더 반복 가능하지만 많은 유형을 업데이트해야 하는 경우 압도적일 수 있습니다. Kontent by Kentico의 관리 API를 활용하여 단일 스크립트에서 여러 콘텐츠 유형을 업데이트하여 워크로드를 줄일 수 있습니다.

최근 프로젝트에서 저는 모든 미디어 자산에 대해 Cloudinary를 사용했고 Cloudinary custom element에서 custom element gallery을 사용했습니다. 이것은 나에게 잘 작동했지만 어느 시점에서 전체 프로젝트에서 사용자 정의 요소에 대한 설정을 변경해야 했습니다. 이 프로젝트에서는 사용자 정의 요소가 생성될 때마다 설정을 추가했기 때문에 70개의 콘텐츠 유형으로 내 콘텐츠 모델을 업데이트하려면 약간의 노력이 필요했습니다.

Kontent CLI을 사용하여 콘텐츠 모델 변경 사항을 관리했기 때문에 콘텐츠 모델이 변경될 때마다 새 스크립트가 생성됩니다. 이와 같은 대규모 업데이트에 직면했을 때 각 콘텐츠 유형 변경을 수동으로 스크립트하고 싶지 않았기 때문에 작업을 자동화하기 위해 Kontent Management API를 사용하여 스크립트를 작성했습니다.

이 스크립트를 작성하려면 다음 세 가지 작업을 수행해야 했습니다.
  • 변경해야 하는 콘텐츠 유형 및 요소 식별
  • 적용할 변경 사항을 준비합니다
  • .
  • 콘텐츠 유형 목록을 반복하면서 계속 업데이트합니다
  • .

    우리 프로젝트에서 문제의 변경 사항은 16개의 콘텐츠 유형에 영향을 미쳤습니다. Mind Map diagrams in Miro을 사용하여 콘텐츠 모델을 문서화하는 방법은 문제의 유형과 해당 요소 및 코드명을 쉽게 식별할 수 있음을 의미했습니다. 그래서 우리에게 필요한 것은 콘텐츠 유형 코드명의 단순한 배열이었습니다.

    우리는 이 데이터를 각각 아래와 같이 콘텐츠 유형 및 요소의 코드명을 사용하여 간단한 배열로 캡처했습니다.

    const contentTypes = [ 
      ['comp_homepage_hero', 'image'], 
      ['comp_hero_quote', 'image'], 
      ['menu_item', 'tile_image'], 
      ['comp_image', 'image'], 
      ['comp_hero_slim', 'image'], 
      ['location_facility', 'icon'], 
      ['comp_hero_tile', 'image'], 
      ['restaurant', 'tile_image']];
    


    필요한 경우 변경해야 하는 콘텐츠 유형을 식별하기 위해 추가 스크립트를 작성할 수 있었습니다. 즉, 콘텐츠 모델이 커짐에 따라 스크립트를 다시 실행할 수 있습니다.

    업데이트를 위해 Cloudinary 연결에 대한 세부 정보를 변경했습니다. 즉, 각 콘텐츠 유형에 대해 다음이 필요합니다.

    const updateData = (codename) => { return [ { 
      op: 'replace', 
      path: `/elements/codename:${codename}/json_parameters`, 
      value: "{\"cloudName\":\"NEW_CLOUD_NAME\",\"apiKey\":\"123451234512345\"}" } ] }
    

    ${codename}는 업데이트할 요소의 이름을 결정하기 위해 전달할 수 있는 매개변수입니다.

    그런 다음 다음과 같이 contentTypes 배열을 반복하여 모두 함께 가져와야 합니다.

    await Promise.all(contentTypes.map(async (type) => { await apiClient.modifyContentType().byTypeCodename(type[0]) .withData(updateData(type[1])).toPromise() }));
    


    우리가 이것을 처음 가졌을 때 await Promise.all(...) 를 사용하지 않았기 때문에 잠시 혼란스러웠습니다. 이는 스크립트가 종료되기 전에 모든 변경 사항이 적용되도록 하는 데 중요합니다.

    일단 실행되면 코드명 배열의 모든 콘텐츠 유형을 가져와서 수정합니다. 여기서 루핑의 기본 아이디어는 간단하지만 종종 간과됩니다. 재사용 가능성을 높이기 위해 연결된 항목의 허용 목록에 새 콘텐츠 유형을 추가하는 것과 같은 다른 변경 사항으로 쉽게 다시 실행할 수 있도록 프로젝트의 유틸리티 파일에 이것을 추가했습니다.

    좋은 웹페이지 즐겨찾기