管理面板定制 Admin Customization

Strapi 的管理面板可以根据您的需要进行定制,因此可以反映您的身份。

管理面板是一个基于 React 的单页应用程序。它封装了 Strapi 应用程序的所有已安装插件。它的某些方面可以 自定义,插件也可以 扩展 它。

要在开发过程中使用热重载启动您的 strapi 实例,请运行以下命令:

bash
cd my-app # cd 进入 Strapi 应用程序项目的根目录
strapi evolve --watch-admin

自定义选项

自定义管理面板有助于更好地反映您的品牌标识或修改某些默认的 Strapi 行为:

访问 URL

默认情况下,管理面板通过 http://localhost:1337/admin 公开。出于安全原因,可以更新此路径。

示例:

要使管理面板可从 http://localhost:1337/dashboard 访问,请在 服务器配置 文件中使用它:

js
Javascript
js
// ./config/server.js
module.exports = ({ env }) => ({
  host: env('HOST', '0.0.0.0'),
  port: env.int('PORT', 1337),
})

// ./config/admin.js
module.exports = ({ env }) => ({
  url: '/dashboard',
})
高级设置

有关更多高级设置,请参阅管理面板配置文档。

主机和端口

从 4.15.1 开始,此功能已弃用。strapi 服务器现在支持在开发模式下实时更新管理面板。

默认情况下,前端开发服务器在 localhost:8000 上运行,但可以修改:

js
JavaScript
js
// ./config/server.js
module.exports = ({ env }) => ({
  host: env('HOST', '0.0.0.0'),
  port: env.int('PORT', 1337),
})

// ./config/admin.js
module.exports = ({ env }) => ({
  host: 'my-host', // 仅与 `strapi evolve --watch-admin` 命令一起使用
  port: 3000, // 仅与 `strapi evolve --watch-admin` 命令一起使用
})

Configuration options

在配置任何管理面板自定义选项之前,请确保:

  • 将默认的 app.example.js 文件重命名为 app.js
  • 并在 ./src/admin/ 中创建一个新的 extensions 文件夹。Strapi 项目默认已在 ./src/ 中包含另一个 extensions 文件夹,但它仅适用于插件扩展(请参阅 插件扩展)。

./src/admin/app.js 中找到的 config 对象存储管理面板配置。

config 对象使用的任何文件(例如自定义徽标)都应放置在 ./src/admin/extensions/ 文件夹中并导入到 ./src/admin/app.js 中。

config 对象接受以下参数:

参数类型描述
auth对象接受 logo 键以替换登录屏幕上的默认 Strapi logo
head对象接受 favicon 键以替换默认 Strapi favicon
locales字符串数组定义可用的语言环境,参见更新语言环境
translations对象扩展翻译
menu对象接受 logo 键以更改主导航中的logo
theme.lighttheme.dark对象覆盖主题属性 以适应明暗模式
tutorials布尔值切换显示视频教程
notifications对象接受 releases 键(布尔值)来切换显示有关新版本的通知

管理面板自定义配置的示例

jsx
./my-app/src/admin/app.js
jsx
import AuthLogo from './extensions/my-logo.png'
import MenuLogo from './extensions/logo.png'
import favicon from './extensions/favicon.png'

export default {
  config: {
    // 替换 auth(登录)视图中的 Strapi 徽标
    auth: {
      logo: AuthLogo,
    },
    // 替换网站图标
    head: {
      favicon,
    },
    // 添加除“en”之外的新语言环境
    locales: ['fr', 'de'],
    // 替换主导航中的 Strapi 徽标
    menu: {
      logo: MenuLogo,
    },
    // 覆盖或扩展主题
    theme: {
      // 覆盖浅色主题属性
      light: {
        colors: {
          primary100: '#f6ecfc',
          primary200: '#e0c1f4',
          primary500: '#ac73e6',
          primary600: '#9736e8',
          primary700: '#8312d1',
          danger700: '#b72b1a',
        },
      },

      // 覆盖深色主题属性
      dark: {
        // ...
      },
    },
    // 扩展翻译
    translations: {
      fr: {
        'Auth.form.email.label': 'test',
        'Users': 'Utilisateurs',
        'City': 'CITY (FRENCH)',
        // 自定义内容管理器表的标签。
        'Id': 'ID french',
      },
    },
    // 禁用视频教程
    tutorials: false,
    // 禁用有关新 Strapi 版本的通知
    notifications: { releases: false },
  },
  bootstrap() {},
}

Locales

要更新管理面板中可用语言环境列表,请使用 config.locales 数组:

jsx
./my-app/src/admin/app.js
jsx
export default {
  config: {
    locales: ['ru', 'zh'],
  },
  bootstrap() {},
}
  • 无法从构建中删除 en 语言环境,因为它既是后备语言环境(即,如果在语言环境中找不到翻译,则将使用 en),又是默认语言环境(即,当用户首次打开管理面板时使用)。
  • 可在 Strapi 的 Github repo 上访问可用语言环境的完整列表。
扩展翻译

翻译键/值对在 @strapi/admin/admin/src/translations/[language-name].json 文件中声明。这些键可以通过 config.translations 键进行扩展:

js
./my-app/src/admin/app.js
js
export default {
  config: {
    locales: ['fr'],
    translations: {
      fr: {
        'Auth.form.email.label': 'test',
        'Users': 'Utilisateurs',
        'City': 'CITY (FRENCH)',
        // Customize the label of the Content Manager table.
        'Id': 'ID french',
      },
    },
  },
  bootstrap() {},
}

插件的键/值对在插件文件的 ./admin/src/translations/[language-name].json 中独立声明。这些键/值对可以在 config.translations 键中类似地扩展,方法是在键前加上插件的名称(即 [plugin name].[key]: 'value'),如下例所示:

js
./my-app/src/admin/app.js
js
export default {
  config: {
    locales: ['fr'],
    translations: {
      fr: {
        'Auth.form.email.label': 'test',
        // 通过添加插件名称作为前缀来翻译插件的键/值对
        // 在本例中,我们翻译插件“content-type-builder”的“plugin.name”键
        'content-type-builder.plugin.name': 'Constructeur de Type-Contenu',
      },
    },
  },
  bootstrap() {},
}

如果需要添加更多翻译文件,请将它们放在 ./src/admin/extensions/translations 文件夹中。

徽标

Strapi 管理面板在 2 个不同位置显示徽标,由 管理面板配置 中的 2 个不同键表示:

UI 中的位置要更新的配置键
在登录页面上config.auth.logo
在主导航中config.menu.logo

管理面板中的徽标位置: 简化的 Strapi 后端图,突出显示控制器config.auth.logo徽标处理的徽标仅显示在登录屏幕上。

菜单徽标的位置config.menu.logo 徽标处理的徽标位于管理面板左上角的主导航中。

要更新徽标,将图像文件放入 ./src/admin/extensions 文件夹并更新相应的键。通过配置文件设置的图像文件没有大小限制。

两个徽标也可以直接通过管理面板自定义(参见 用户指南)。 通过管理面板上传的徽标将取代通过配置文件设置的任何徽标。

网站图标

要替换网站图标,请使用以下步骤:

1.(可选)如果文件夹尚不存在,则创建一个 ./src/admin/extensions/ 文件夹。 2. 将您的网站图标上传到 ./src/admin/extensions/。 3. 用自定义 favicon.png|ico 文件替换 Strapi 应用程序根目录中现有的 favicon.png|ico 文件。 4. 使用以下内容更新 ./src/admin/app.js

./src/admin/app.js
js
import favicon from './extensions/favicon.png'

export default {
  config: {
    // 使用自定义图标替换 favicon
    head: {
      favicon,
    },
  },
}
  1. 通过在终端中运行 yarn build && yarn evolve 来重建、启动并重新访问您的 Strapi 应用程序。

此相同过程可用于替换登录徽标(即 AuthLogo)和菜单徽标(即 MenuLogo)(参见 徽标自定义文档)。

确保已清除缓存的 favicon。它可以缓存在您的网络浏览器中,也可以缓存在您的域管理工具中,例如 Cloudflare 的 CDN。

教程视频

要禁用包含教程视频的信息框,请将 config.tutorials 键设置为 false

发布通知

要禁用有关新 Strapi 版本的通知,请将 config.notifications.releases 键设置为 false

主题扩展

Strapi 应用程序可以以浅色或深色模式显示(请参阅用户指南中的管理员配置文件设置),并且两者都可以通过自定义主题设置进行扩展。

要扩展主题,请使用以下任一方法:

  • config.theme.light 键用于浅色模式
  • config.theme.dark 键用于深色模式
Strapi 设计系统

默认的 Strapi 主题 定义了各种主题相关键(阴影、颜色……),可通过 ./admin/src/app.js 中的 config.theme.lightconfig.theme.dark 键进行更新。Strapi 设计系统 完全可定制,并具有专用的 StoryBook 文档。

不带“light”或“dark”键的“config.theme”的旧语法已弃用,并将在下一个主要版本中删除。我们鼓励您更新自定义主题以使用支持亮模式和暗模式的新语法。

WYSIWYG 编辑器

要更改当前的 WYSIWYG,您可以安装 第三方插件,创建自己的插件(请参阅 在管理面板中创建新字段)或利用 bootstrap 生命周期扩展 系统:

js
./src/admin/app.js
js
import MyNewWYSIGWYG from './extensions/components/MyNewWYSIGWYG' // 此文件包含您新的所见即所得的逻辑

export default {
  bootstrap(app) {
    app.addFields({ type: 'wysiwyg', Component: MyNewWYSIGWYG })
  },
}

电子邮件模板

应通过管理面板编辑电子邮件模板,使用 用户和权限插件设置

捆绑器(实验性)

Strapi 应用程序可以使用 2 个不同的捆绑器,webpackvite

Webpack

在 v4 中,这是 Strapi 用于构建管理面板的事实上的捆绑器。

在自定义 webpack 之前,请确保将默认的 webpack.config.example.js 文件重命名为 webpack.config.[js|ts]

为了扩展 webpack v5 的使用,请在 ./my-app/src/admin/webpack.config.[js|ts] 中定义一个扩展其配置的函数:

js
./my-app/src/admin/webpack.config.js
js
module.exports = (config, webpack) => {
// 注意:我们在上面提供了 webpack,因此您不应该 `require` 它

  // 对 webpack 配置执行自定义
  config.plugins.push(new webpack.IgnorePlugin(/\/__tests__\//))

  // 重要提示:返回修改后的配置
  return config
}

Vite

这被视为实验性的。请报告您遇到的任何问题。

要使用 vite 作为捆绑器,您需要将其作为选项传递给 strapi evolve 命令:

bash
strapi evolve --watch-admin --bundler=vite

要扩展 vite 的使用,请在 ./my-app/src/admin/vite.config.[js|ts] 中定义一个扩展其配置的函数:

js
./my-app/src/admin/vite.config.js
js
const { mergeConfig } = require('vite')

module.exports = (config) => {
  // 重要提示:始终返回修改后的配置
  return mergeConfig(config, {
    resolve: {
      alias: {
        '@': '/src',
      },
    },
  })
}