針對Sidekick開發

本檔案的目標是說明開發人員如何與Sidekick互動,以及如何在專案層級進行自訂。

事件

sidekick會引發下列事件:

事件名稱
目標元素
總額
描述
sidekick-ready
document
-
sidekick元素具有 已新增至DOM和 已可供使用。
previewed
aem-sidekick
(字串)的路徑 預覽的資源
「預覽」按鈕已 已按一下。
updated
aem-sidekick
(字串) 已更新資源
「重新載入」按鈕已 已按一下。
published
aem-sidekick
(字串) 已發佈資源
「發佈」按鈕已 已按一下。
deleted
aem-sidekick
(字串) 已刪除資源
「刪除」按鈕已 已按一下。
unpublished
aem-sidekick
(字串) 已取消發佈資源
取消發佈按鈕具有 已按一下。
env-switched
aem-sidekick

(物件)具有 下列屬性:

  • (字串) sourceUrl: 來源URL
  • (字串) targetUrl: 目標URL
使用者已切換 環境。
plugin-used
aem-sidekick
(字串)外掛程式ID
外掛程式按鈕已 已點按
logged-in
aem-sidekick
(物件)設定檔物件
使用者已登入。
logged-out
aem-sidekick
(物件)設定檔物件
使用者已登出。
status-fetched
aem-sidekick
(物件)狀態物件
資源的狀態 「 」已從「 」擷取 管理API
custom:<name>
aem-sidekick

(物件)具有 下列屬性:

  • (物件)設定: sidekick設定
  • (物件)位置: 位置物件
  • (物件)狀態: 狀態物件
自訂事件型外掛程式 已按一下按鈕。

可在event.detail屬性中找到事件的裝載。

接聽事件

在您的專案程式碼(例如在/scripts/scripts.js中)中,您可以對Sidekick事件做出如下反應(將foo取代為您要監聽之事件的名稱):

const doFoo = ({ detail: payload }) => {
  console.log('something happened', payload);
  // your custom code goes here
};

const sk = document.querySelector('aem-sidekick');
if (sk) {
  // sidekick already loaded
  sk.addEventListener('foo', doFoo);
} else {
  // wait for sidekick to be loaded
  document.addEventListener('sidekick-ready', () => {
    // sidekick now loaded
    document.querySelector('aem-sidekick')
      .addEventListener('foo', doFoo);
  }, { once: true });
}

自訂Sidekick

您可以自訂專案的Sidekick。 您可以將/tools/sidekick/config.json設定檔新增至專案的GitHub存放庫,或使用設定服務

{
  "project": "My project",
  "host": "www.mydomain.prod",
  "plugins": []
}

如需所有可用的組態選項,請參閱組態結構描述。 以下提供開始使用的一些基本知識:

外掛程式

外掛程式可讓您將自訂功能新增到Sidekick,增強您的使用者體驗。

通用外掛程式屬性

下列屬性適用於所有外掛程式型別:

  • id (字串)是必填專案,且在sidekick設定中必須是唯一的。
  • title (字串)將顯示在外掛程式按鈕上。
  • titleI18n (object&lt;string, string>)定義選擇性翻譯的標題。
  • pinned (布林值)決定外掛程式是釘選到工具列(預設)還是摺疊到……功能表中。
  • environments (string[])會指定外掛程式應該出現的位置(dev、edit、admin、preview、live或prod)。
  • exclude_paths (string[])定義模式,以根據目前索引標籤URL中的路徑排除外掛程式。
  • include_paths (string[])會根據目前索引標籤URL中的路徑定義包含外掛程式的模式。

URL型外掛程式

您可以指定在按一下外掛程式按鈕時,會在新索引標籤中開啟的url

{
  "plugins": [
    {
      "id": "foo",
      "title": "Foo",
      "url": "/tools/sidekick/foo.html"
    }
  ]
}

事件型外掛程式

或者,您可以指定在按一下外掛程式按鈕時要觸發的event名稱。 這可讓您藉由監聽sidekick元素上的事件,在頁面的內容中執行自訂JavaScript程式碼。 自訂事件將有custom:首碼。 為方便起見,傳送的自訂事件包含目前Sidekick狀態的副本。

注意: ​事件型外掛程式只能用於下列環境:開發、預覽、即時和生產。 在「編輯」或「管理」中無法執行自訂程式碼。

{
  "plugins": [
    {
      "id": "foo",
      "title": "Foo",
      "event": "foo"
    }
  ]
}

在您的專案程式碼(例如在/scripts/scripts.js中)中,您可以依照以下方式回應事件:

const doFoo = ({ detail: payload }) => {
  console.log('a custom event happened', payload);
  // your custom code goes here
};

const sk = document.querySelector('aem-sidekick');
if (sk) {
  // sidekick already loaded
    sk.addEventListener('custom:foo', doFoo);
} else {
  // wait for sidekick to be loaded
  document.addEventListener('sidekick-ready', () => {
    // sidekick now loaded
    document.querySelector('aem-sidekick')
      .addEventListener('custom:foo', doFoo);
  }, { once: true });
}

特殊外掛程式型別

浮動視窗外掛程式

調色盤是URL型外掛程式的變體,會載入已設定的URL內嵌,而非開啟新標籤。

  • isPalette (布林值)在浮動視窗中開啟URL型外掛程式的目標,而非新索引標籤。
  • paletteRect (字串)可選擇以DOMRect的格式定義調色盤的大小和位置。

下列範例會建立放置在視窗左下方的標準調色盤:

{
  "plugins": [
    {
      "id": "tools",
      "title": "Tools",
      "url": "/tools/sidekick/foo-palette.html",
      "isPalette": true
    }
  ]
}

如果您想要變更調色盤的大小和位置,請使用paletteRect

{
  "plugins": [
    {
      "id": "tools",
      "title": "Tools",
      "url": "/tools/sidekick/foo-palette.html",
      "isPalette": true,
      "paletteRect": "top:150px;left:7%;height:675px;width:85vw;"
    }
  ]
}

容器外掛程式

容器可讓您將外掛程式分組在一起,並有助於節省工具列中的空間。 按一下容器外掛程式就會切換其下拉式清單,它無法擁有自己的URL或事件動作。

  • isContainer (布林值)會將外掛程式呈現為下拉式清單,而非按鈕。
  • containerId (字串)將外掛程式新增至具有指定ID的容器外掛程式。

下列範例會建立名為「Tools」的容器,並在其中放置外掛程式「Foo」:

{
  "plugins": [
    {
      "id": "tools",
      "title": "Tools",
      "isContainer": true
    },
    {
      "id": "foo",
      "containerId": "tools",
      "title": "Foo",
      "event": "foo"
    }
  ]
}

徽章外掛程式

徽章可讓您在特定條件下,將標籤新增到Sidekick。 它們將會在工具列的右側呈現。 徽章具有美利裝飾目的,無法點選。

  • isBadge (布林值)會將外掛程式呈現為徽章,而非按鈕。
  • badgeVariant (字串)可選擇性地決定徽章的色彩配置(灰色、紅色、橙色、黃色、Chartreuse、芹菜、綠色、海泡糖、青色、藍色、靛藍、紫色、紫紅色或洋紅色)

以下範例將「Stage」徽章新增到預覽環境中的Sidekick:

{
  "plugins": [
    {
      "id": "stage",
      "title": "Stage",
      "isBadge": true,
      "environments" ["preview"]
    }
  ]
}

自訂編輯URL

如果您的專案未使用SharePoint或Google Drive作為內容來源,您可以告訴Sidekick當使用者按一下​ 編輯 ​時,如何連結到您的自訂編輯環境。

下列兩個設定選項可供使用:

  • editUrlLabel (字串)設定使用者可見的標籤
  • editUrlPattern (字串)定義自訂編輯環境的URL模式。 支援{{contentSourceUrl}}{{pathname}}等預留位置。
{
  "editUrlLabel": "Your Editor",
  "editUrlPattern": "{{contentSourceUrl}}{{pathname}}?cmd=open"
}

特殊檢視

您可以指定特殊檢視,讓目前的索引標籤URL符合特定模式時,Sidekick重新導向至。 這可協助您提供跨不同媒體型別的順暢使用者體驗,也可啟用自訂程式碼(事件型外掛程式)的執行。 原始資源URL將在url查詢引數中可用。

屬性pathviewer是必要的。 您可以選擇指定顯示在頂端的title,並且您可以在titleI18n物件中提供當地語系化的標題:

{
  "specialViews": [
    {
      "title": "Custom JSON Viewer",
      "path" : "**.json",
      "viewer": "/tools/sidekick/custom-json-viewer/index.html"
    }
  ]
}

viewer指定的路徑下,將HTML檔案新增至您的GitHub存放庫,例如:

<html>
<head>
  <title>Custom JSON Viewer</title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="./custom-json-viewer.css">
  <!-- add your custom code -->
  <script src="./custom-json-viewer.js"></script>
</head>
  <body>
  </body>
</html>

在同一目錄中新增選用的CSS檔案,以及含有自訂邏輯的JS檔案,例如:

try {
  // get the resource URL from the url query parameter
  const url = new URL(window.location.href).searchParams.get('url');
  if (url) {
    const res = await fetch(url);
    if (res.ok) {
      const text = await res.text();
      const data = JSON.parse(text);
      // do something with the data, e.g.
      document.body.innerHTML = `
        <pre>
          ${JSON.stringify(data, null, 2)}
        </pre>
       `;
    } else {
      throw new Error(`failed to load ${url}: ${res.status}`);
    }
  }
} catch (e) {
  console.error('error rendering custom json view', e);
}

開發工作流程

以下工作流程是專為分離式Sidekick開發而設計,以防止對您生產網站上的作者造成無意的中斷:

使用網站副本

如果您的網站組態儲存在組態服務中,您可以使用暫存的網站復本進行Sidekick開發:

  1. 在組態服務中建立網站🔗的復本。 例如,如果原始網站的名稱為site1,您可以建立site1-dev,重複使用相同的程式碼和內容。
  2. 在瀏覽器中開啟site1-dev的預覽URL: https://main--site1-dev--org.aem.page
  3. site1-dev組態中對sidekick物件進行您想要的變更。
  4. 在每次變更後重新整理瀏覽器標籤以測試您的變更。
  5. 完成後,將sidekick物件site1-dev複製到site1設定,以將您的變更轉出給所有作者。

注意: ​在編輯器環境(Google磁碟機或Microsoft Sharepoint)中使用Sidekick時,預設會從原始網站載入設定。 如果您希望sidekick允許您選擇要載入的設定,請先從預覽或即時URL將新網站🔗新增到您的sidekick。 Sidekick現在將顯示選取器以及所有相符的網站。

使用存放庫分支

如果您的網站組態未儲存在組態服務中,您可以使用GitHub中的分支進行sidekick開發:

  1. 在您網站的GitHub存放庫上,從main建立分支。 在此範例中,我們將使用dev作為分支名稱。
  2. 在瀏覽器中開啟dev分支的預覽URL: https://dev--site1--org.aem.page
  3. 開啟或建立存放庫中的下列檔案: /tools/sidekick/config.json
  4. 對sidekick設定檔案進行所需的變更,並將變更推送到dev分支。
  5. 在每次變更後重新整理瀏覽器標籤以測試您的變更。
  6. 完成時,請建立提取請求,並將變更合併至存放庫的main分支。

警告: ​絕對不要直接認可原始存放庫中的main分支。 在合併至main之前,請一律建立分支,並透過提取請求要求稽核您的變更。

注意: ​在編輯器環境(Google磁碟機或Microsoft Sharepoint)中使用Sidekick時,預設會從原始網站載入設定。 如果您希望sidekick允許您選擇要載入的設定,請先從預覽或即時URL將新網站🔗新增到您的sidekick。 Sidekick現在將顯示選取器以及所有相符的網站。

recommendation-more-help
10a6ce9d-c5c5-48d9-8ce1-9797d2f0f3ec