Directus Cheat Sheet




Extract and Apply CLI 

//template structure (schema, permissions, content, files, flows, relations.json

npx directus-template-cli@latest extract -p `

  --directusUrl="$env:SOURCE_DIRECTUS_URL" `

  --directusToken="$env:SOURCE_DIRECTUS_TOKEN" `

  --templateLocation="./prj-template" `

  --templateName="prj-dev-$(Get-Date -Format yyyyMMdd-HHmm)"


  npx directus-template-cli@latest apply -p `

  --directusUrl="$env:TARGET_DIRECTUS_URL" `

  --directusToken="$env:TARGET_DIRECTUS_TOKEN" `

  --templateLocation="./prj-template" `

  --templateType="local" `

  --partial `

  --files `

  --permissions `

  --content `

  --users `

  --flows `

  --settings `

  --dashboards `

  --extensions


Apply CLI Command


npx directus-template-cli@latest apply -p `

  --directusUrl="$env:TARGET_DIRECTUS_URL" `

  --directusToken="$env:TARGET_DIRECTUS_TOKEN" `

  --templateLocation="./prj-template" `

  --templateType="local" `

  --schema `

  --content `

  --flows `

  --settings `

  --users `

  --files `

  --permissions



Upload File in CMS


  curl -X POST "https://cmsuat.prj.sgjourney.gov.sg/files" \

  -H "Authorization: Bearer Ca1WntygNscU_zJXRF1IJxkfzmjWz-UE" \

  -F "file=@C:\Users\2314638\Downloads\Log to console.jpg" \

  -F "title=User avatar" \

  -F "folder=e6308546-92fb-4b10-b586-eefaf1d97f7f" \

  -F "private=false"


Apply CLI working:


//apply working:

npx directus-template-cli@latest apply -p --directusUrl "$env:TARGET_DIRECTUS_URL" --directusToken "$env:TARGET_DIRECTUS_TOKEN" --templateLocation "./prj-template" --templateName "prj-<YYYYMMDD-HHMM_FROM_EXTRACT>" --schema --content --flows --settings --users --files --permissions --disableTelemetry


Apply CLI


npx directus-template-cli@latest apply -p `

  --directusUrl="$env:TARGET_DIRECTUS_URL" `

  --directusToken="$env:TARGET_DIRECTUS_TOKEN" `

  --templateLocation="./prj-template" `

  --templateType="local" `

  --partial --files `

  --permissions `

  --no-schema --no-content --no-dashboards --no-extensions --no-flows --no-settings --no-users


Download all from UAT-working:



//Downlaod all from UAT-working:


  npx directus-template-cli@latest extract -p --directusUrl "$env:TARGET_DIRECTUS_URL" --directusToken "$env:TARGET_DIRECTUS_TOKEN" --templateLocation "./prj-uat-template" --templateName "prj-uat-$(Get-Date -Format yyyyMMdd-HHmm)" --disableTelemetry


    npx directus-template-cli@latest extract -p --directusUrl "$env:SOURCE_DIRECTUS_URL" --directusToken "$env:SOURCE_DIRECTUS_TOKEN" --templateLocation "./prj-template" --templateName "prj-$(Get-Date -Format yyyyMMdd-HHmm)" --disableTelemetry



OPTICAL CMS CLI


--OPTICAL CMS CLI--


$env:SOURCE_DIRECTUS_URL = "https://cmsdev.prj.sgjourney.gov.sg"

$env:SOURCE_DIRECTUS_TOKEN = "oy9VceiWJsp6LxjhhYsJvAj7d_avMeYZ"

$env:TARGET_DIRECTUS_URL = "https://cmsuat.prj.sgjourney.gov.sg"

$env:TARGET_DIRECTUS_TOKEN = "Ca1WntygNscU_zJXRF1IJxkfzmjWz-UE"


$env:NODE_TLS_REJECT_UNAUTHORIZED="0"


npx directus-template-cli@latest extract -p `

  --directusUrl="$env:SOURCE_DIRECTUS_URL" `

  --directusToken="$env:SOURCE_DIRECTUS_TOKEN" `

  --templateLocation="./prj-template" `

  --templateName="prj-dev-$(Get-Date -Format yyyyMMdd-HHmm)"

  --schema \

  --content \

  --flows \

  --settings \

  --users \

  --files \

  --permissions \

  --relations


Hide Cube icon in CSO view


/* A) Only CSO Search View present — DON'T hide if a folder icon exists in the nav */

#directus

:not(:has(aside#navigation i[data-icon="folder"]))

:has(.module-nav-content .v-list .v-list-group)

:has(.module-nav-content a.v-list-item[href="/admin/content/cso_search_view"])

:not(:has(.module-nav-content a.v-list-item.link:not([href="/admin/content/cso_search_view"])))

  .modules > div.v-button:first-of-type {

  display: none !important;

}


/* B) Only Search present — DON'T hide if a folder icon exists in the nav */

#directus

:not(:has(aside#navigation i[data-icon="folder"]))

:has(.module-nav-content a.v-list-item[href="/admin/global-search"])

:not(:has(.module-nav-content a.v-list-item.link:not([href="/admin/global-search"])))

  .modules > div.v-button:first-of-type {

  display: none !important;

}





Comments