1

我们目前正在定制 ojs 3.3.0 仪表板。我们想将我们的自定义字体添加到仪表板(我们添加了我们自己的主题插件以及客户端所需的字体),但不幸的是,我们还没有找到任何解决方案,如何在没有硬编码的情况下将我们的字体导入 ojs。

有什么方法可以在不进行硬编码的情况下将我们的字体导入到 ojs 中?

或者有什么方法可以将我们主题插件中的字体导入ojs?

有没有办法从已安装的主题插件中解决 ojs 中的字体?

4

1 回答 1

1

基于PKP-OJS 文档,是的,您可以添加自定义样式或字体并覆盖它们。每个主题都扩展了核心 ThemePlugin 类。这个类有几个方法可以帮助你加载脚本和样式,修改父样式表等等。主题的设置和配置将在init()方法中进行。此方法仅针对当前活动主题(或当前活动主题的父主题)运行。API 的所有其他方法都应在该init()方法中运行。

<?PHP

import('lib.pkp.classes.plugins.ThemePlugin');
class TutorialThemePlugin extends ThemePlugin {

  /**
  * Load the custom styles for our theme
  * @return null
  */
  public function init() {
      $this->addStyle('my-custom-style', 'styles/index.less');
  }
}

如果要添加新样式或 css 字体,请使用该addStyle()方法。该addStyle()方法接受许多可选参数 hash.Like context, addLess, priority,.... 查看此链接以获取更多信息。

例子 :

在这个例子中,TutorialThemePlugin是我们的自定义主题。假设我们要a Roboto font在客户端(前端)和管理仪表板端(后端)导入。在一切之前,我们需要激活我们的模板。在管理页面上,我们在技术上位于“站点”区域,而不是特定的期刊。所以我们需要确保我们已经为网站激活了我们的自定义主题,而不仅仅是期刊。我们从这条路径激活我们的主题Settings > Website > Appearance

第一步是将字体上传到我们的自定义主题styles/fonts目录,然后在 CSS 文件中处理它们。

TutorialThemePlugin:
     - js
     - libs
     - locale
     - styles
        - fonts
           - roboto.css
           - Roboto-Thin.ttf
           - Roboto-Medium.eot
           - ...
     - template
     - ...

第二步是通过我们的主题调用字体或样式。
TutorialThemePlugin.inc.php:

<?PHP

import('lib.pkp.classes.plugins.ThemePlugin');
class TutorialThemePlugin extends ThemePlugin {

  /**
  * Load the custom styles for our theme
  * @return null
  */
  public function init() {
      $this->addStyle('htmlFont', 'styles/fonts/roboto.css', array('contexts' => 'frontend')); // Client Side
      $this->addStyle('htmlFont', 'styles/fonts/roboto.css', array('contexts' => 'backend')); // OJS Admin Dashboard
  }
}

第三步是在我们的主题中继承 OJS。当我们创建自定义主题时,我们可以选择让它扩展父主题。子主题将自动加载在其父主题中找到的模板和样式。这允许您在预先存在的主题之上构建主题。子主题允许我们覆盖从父主题中选择的模板,同时在没有模板被覆盖时仍然使用它们。
HTML/Smarty指南的部分描述了如何按优先级顺序加载前端模板文件。子主题为检索模板文件添加了一个新的最高优先级位置。

当 OJS 或 OMP 加载模板时,它会按以下顺序进行搜索。

  1. 当前主题template目录。
  2. 如果指定了父主题,则为父主题的模板目录。
  3. OJS 或 OMP 模板目录。
  4. lib/pkp/templates/ directory应用程序内。

要覆盖父主题的模板(OJS 默认模板),将该模板文件复制到子主题(TutorialThemePlugin 主题)中的相同位置。

对于模板文件的更改,您可以转到管理 > 清除模板缓存。

参考 :

https://docs.pkp.sfu.ca/pkp-theming-guide/en/theme-api
https://docs.pkp.sfu.ca/pkp-theming-guide/en/child-themes
https:// forum.pkp.sfu.ca/t/how-can-i-override-backend-templates-ojs-3/33512/27
https://forum.pkp.sfu.ca/t/ojs-3-need-help -with-theme-customization/21210

于 2021-03-08T18:40:31.640 回答