acdh-oeaw/aksearch-ext

VuFind/AkSearch 的一个示例扩展模块

2.4.8 2024-03-18 09:53 UTC

README

为ACDH部署的AkSearch的VuFind/AkSearch扩展。

也可以作为使用Composer加载自己的模块来扩展VuFind的示例(见下文说明)。

此模块添加了哪些内容

  • SolrMarc类的调整版本(aksearchExt\SolrMarc
  • ILS驱动类(aksearchExt\Alma)的调整版本
  • 额外的记录视图标签(aksearchExt\RecordTab\Exemplarspezifika
  • VuFindSearch\Backend\Solr\LuceneSyntaxHelper类的调整版本,解决带有斜杠的搜索问题。
    • 由于无法通过新代码轻松覆盖,它被复制到{FuVindDir}/module/VuFindSearch/src/VuFindSearch/Backend/Solr/LuceneSyntaxHelper.php,由Dockerfile创建部署Docker镜像(这确实很丑,但避免了覆盖整个VuFind/AkSearch Solr搜索后端类堆栈)。

特定功能的详细描述包含在docs文件夹中。

它是如何工作的?

备注 - 下面的说明适用于当前基于VuFind 6的AkSearch。一些东西将在Vufind >= 7时发生变化,它已从Zend2迁移到Laminas。

使代码可由Zend2加载

VuFind/AkSearch使用Zend2框架编写,扩展/调整它们涉及到实现你自己的Zend2模块(s)。

要使你的代码被Zend2识别并正确加载,你必须

  • 选择你的模块名称(这里为aksearchExt)。
  • 实现一个{my module name}\Module类,实现getAutoloaderConfig()getConfig()方法。
    • getAutoloaderConfig()应仅返回一个空数组(因为Composer将为我们处理自动加载,我们不需要Zend2为此)。
    • getConfig()类应返回一个Zend2/VuFind模块配置(一个空的一个是初学者的完美选择)。
    • aksearchExt模块的最小实现(使其可由Zend2加载,但仅限于此)如下所示
      class aksearchExt\Module {
          public function getAutoloaderConfig() {
              return [];
          }
          public function getConfig() {
              return [];
          }
      }
  • 为你的模块创建一个composer.json,这样你就可以将其作为composer包发布。不要忘记正确定义自动加载。如果你需要一个示例,只需查看此存储库根目录中的composer.json(它将此模块作为acdh-oeaw/aksearch-ext composer包发布)。
  • 将你的代码作为composer包发布(将其放入公开可访问的git仓库,然后在https://packagist.org.cn/上发布)。

设置VuFind/AkSearch以实际加载你的代码

这是通过调整AkSearchWeb仓库内容来完成的。

  • 如果你还没有这样做,请克隆该仓库。
  • 通过在仓库的根目录中运行composer require your-organization/your-composer-package-name或将你的包名称添加到composer.json中的require部分,将你的composer包添加到composer依赖项列表中。
  • 将你的Zend2模块名称包含在VuFind/AkSearch加载的模块列表中。
    • 将你的模块名称(命名空间)追加到在仓库根目录的Dockerfile最后一行定义的VUFIND_LOCAL_MODULES环境变量末尾。
    • 请将模块的名称(命名空间)添加到仓库根目录下docker-compose.yaml文件中的环境变量VUFIND_LOCAL_MODULES的末尾(这样仅使用docker-compose up进行部署的人也会有它)。
  • 尝试在仓库根目录下运行docker build -t acdhch/aksearch-web .来本地构建镜像,然后尝试使用docker-composer up进行部署。最后,通过在浏览器中打开http://127.0.0.1/vufind来检查一切是否正常工作。
  • 如果一切正常,提交更改并将仓库推送到GitHub。

恭喜!现在您的模块已与AkSearchWeb一同部署,它将根据VUFIND_LOCAL_MODULES运行时环境变量的值(确切地说,如果其名称包含在环境变量值中)被使用(或不会被使用)。

覆盖实际的VuFind/AkSearch代码

最棘手的部分是找到放置您自己的调整的正确位置。

好事是这一切都是通过调整您模块的Module::getConfig()方法返回的内容来完成的(以下表示为$cfg)。

困难的部分是您可以将代码插入数百个地方。例如,查看VuFind的主模块配置中提供的所有类映射或由AkSearch的AkSearch模块配置定义的覆盖。请注意,尽管提供了类别名,您可能还需要为您的类定义工厂和/或委托者 - 请参阅上述示例以及此存储库中的src/aksearchExt/Module.php文件。

实时开发

为了能够实时测试您的模块

  • 按照上述如何工作?部分所述将其包含到AkSearchWeb部署中。
  • 使用以下命令运行aksearch-web容器
    • 您的模块代码挂载在/usr/local/vufind/vendor/{你的组织}/{你的composer包名}下。
    • APPLICATION_ENV设置为development(这将关闭Zend2类映射缓存,并为您节省很多麻烦)。