cpsit/typo3-personio-jobs

TYPO3 CMS 扩展,用于集成来自 Personio 招聘 API 的工作

安装: 1,587

依赖项: 0

建议者: 0

安全性: 0

星标: 3

关注者: 6

分支: 1

公开问题: 5

类型:typo3-cms-extension

0.5.11 2024-06-17 09:17 UTC

README

Extension icon

TYPO3 扩展 personio_jobs

Coverage Maintainability CGL Release License
Version Downloads Supported TYPO3 versions Extension stability

📦 Packagist | 🐥 TYPO3 扩展仓库 | 💾 仓库 | 🐛 问题跟踪器

一个TYPO3 CMS 扩展,它将Personio招聘API中的工作集成到TYPO3中。它提供了一个控制台命令来将工作导入到现代类型化的值对象中。此外,还提供了列表和详细视图的插件,并预配置了对Bootstrap v5组件的支持。

🚀 功能

  • 控制台命令,用于从Personio招聘API导入工作
  • 导入过程中使用现代类型化的值对象
  • 列表和详细视图的插件
  • 可选支持使用 EXT:schema 在工作详细页面上使用JSON Schema
  • 兼容TYPO3 11.5 LTS、12.4 LTS 和 13.0

🔥 安装

Composer

composer require cpsit/typo3-personio-jobs

💡 如果您想使用 JSON schema 功能,您还必须要求 schema 扩展

composer require brotkrueml/schema

TER

或者,您也可以通过 TYPO3 扩展仓库 (TER) 下载扩展。

第一步配置

安装后,请确保在您的根模板中包含 EXT:personio_jobs/Configuration/TypoScript 中的TypoScript设置。

⚡ 使用

插件

该扩展提供了两个插件

命令行使用

personio-jobs:import

typo3 personio-jobs:import <storage-pid> [options]

以下命令参数可用

💡 使用 --verbose-v 增加详细程度,以显示所有更改,即使是跳过的未更改工作。

代码使用

Personio工作导入过程也可以直接在PHP中触发。为此,存在两个服务

  • PersonioApiService 提供从Personio API获取工作并作为强类型值对象返回的主功能 Job 模型。请注意,这些工作尚未持久化。相反,它们仅代表当前Personio工作源作为强类型值对象。
  • PersonioImportService 提供实际持久化导入工作的一些附加功能。在底层,前面提到的 PersonioApiService 被调用以获取工作,然后是它们的实际持久化。对于导入过程,有一组导入设置可用
    • int $storagePid:新或更新的工作要持久化的页面ID。
    • bool $updateExistingJobs = true:定义是否更新已导入但在同时期间更改的工作。
    • bool $deleteOrphans = true:定义是否删除在Personio上不再可用的工作。
    • bool $forceImport = false:选择是否重新导入现有未更改的工作。
    • bool $dryRun = false:不执行任何持久化操作,仅获取和验证工作。

从Personio API获取工作

use CPSIT\Typo3PersonioJobs\Service\PersonioApiService;
use TYPO3\CMS\Core\Utility\GeneralUtility;

$apiService = GeneralUtility::makeInstance(PersonioApiService::class);
$jobs = $apiService->getJobs();

foreach ($jobs as $job) {
    echo 'Successfully fetched job: ' . $job->getName() . PHP_EOL;
}

从Personio API导入工作

use CPSIT\Typo3PersonioJobs\Service\PersonioImportService;
use TYPO3\CMS\Core\Utility\GeneralUtility;

$importService = GeneralUtility::makeInstance(PersonioImportService::class);
$result = $importService->import();

foreach ($result->getNewJobs() as $newJob) {
    echo 'Imported new job: ' . $newJob->getName() . PHP_EOL;
}

foreach ($result->getUpdatedJobs() as $updatedJob) {
    echo 'Updated job: ' . $updatedJob->getName() . PHP_EOL;
}

foreach ($result->getRemovedJobs() as $removedJob) {
    echo 'Removed job: ' . $removedJob->getName() . PHP_EOL;
}

foreach ($result->getSkippedJobs() as $skippedJob) {
    echo 'Skipped job: ' . $skippedJob->getName() . PHP_EOL;
}

JSON模式

结合EXT:schema,在单个工作详情页面上包含了一个JSON模式。它以类型JobPosting渲染,并包含一些通用的工作属性。

⚠️ 要使用此功能,必须安装schema扩展。请在上面的安装部分中查看更多信息。

📂 配置

TypoScript

以下TypoScript常量可用

扩展配置

以下扩展配置选项可用

路由配置

在每次导入时,都会生成一个别名。别名可以用于工作详情页面的高级路由配置。

示例

# config/sites/<identifier>/config.yaml

routeEnhancers:
  PersonioJobDetail:
    type: Extbase
    limitToPages:
      # Replace with the actual detail page id
      - 10
    extension: PersonioJobs
    plugin: Show
    routes:
      -
        routePath: '/job/{job_title}'
        _controller: 'Job::show'
        _arguments:
          job_title: job
    defaultController: 'Job::show'
    aspects:
      job_title:
        type: PersistedAliasMapper
        tableName: tx_personiojobs_domain_model_job
        routeFieldName: slug

⏰ 事件

可以使用PSR-14事件来修改工作和工作模式。以下事件可用

🚧 迁移

0.4.x → 0.5.x

解耦导入过程

导入过程已移动到独立的服务类。

  • 所有导入操作现在都由新的PersonioImportService类执行。
  • PersonioService已被重命名为PersonioApiService。请将此类所有用法替换为新类名。
  • 导入结果现在通过新ImportResult类的对象正确显示。
  • AfterJobsImportedEvent中的公共方法已更改,以匹配新的ImportResult类。请使用新的公共方法AfterJobsImportedEvent::getImportResult()代替之前可用的方法。

0.3.x → 0.4.x

最终确定SchemaFactory

SchemaFactory现在是最终的,不能再扩展。

  • 删除从SchemaFactory扩展的类。
  • SchemaFactory的自定义修改替换为EnrichJobPostingSchemaEvent PSR-14事件的监听器。

🧑‍💻 贡献

请参阅CONTRIBUTING.md

💎 致谢

作为所有分发图标的一部分,Personio标志是Personio SE & Co. KG的商标。

⭐ 许可证

本项目根据GNU通用公共许可证2.0(或更新版)许可。