faisel/contao-api

通过易于使用的 JSON-API 访问 Contao 内容

安装: 23

依赖项: 0

建议者: 0

安全: 0

星星: 0

关注者: 1

分支: 1

开放问题: 1

类型:contao-bundle

1.0.1 2021-12-17 21:19 UTC

This package is auto-updated.

Last update: 2024-09-18 03:27:33 UTC


README

我们所在的 Die Schittigs 团队热爱 Die Schittigs,但也热爱 Contao,因为网页正在不断发展,静态 HTML 模板已经不再适用。因此,我们想出了一个易于理解的 JSON-API,通过 JavaScript(或其他可以处理 JSON 的任何东西)来访问 Contao 内容。

使用 Contao 内容 API,您可以用 React.jsAngularvue 或任何其他 JS 框架编写整个网站的 Frontend,同时仍然使用出色的 Contao 后端。

要求

您需要一个正在运行的 Contao 4.4.x 安装。请注意,API 与 Contao 3.x 不兼容

安装

如果您还没有安装,请在 Contao 安装的主目录中输入以下命令

composer require dieschittigs/contao-content-api

Contao 内容 API 现已安装并准备好使用。

使用方法

安装后,以下路由可用

/api/sitemap

获取包括根页面的站点地图。

示例

/api/sitemap/flat

获取所有页面作为键值对,其中键是 URL。

示例

/api/urls[?file=sitemap]

获取从生成的站点地图 XML(s) 中获取的所有 URL。如果定义了 file,则只解析该 XML。

示例

/api/page?url=/about/team.html

获取页面,包括 url 上的所有文章和内容。

示例

/api/newsreader?url=/news/detail/new-website.html

url 获取新闻阅读器内容

示例

/api/?url=/page/or/newsarticle.html

尝试获取 url 上的页面,以及任何阅读器的内容

示例

/api/user

如果可用,获取登录的前端用户。

示例

/api/module?id=5

通过 ID 获取模块的内容

示例

/api/text?file=tl_news,modules

通过文件名(s)获取语言文件的内容

示例

/api/file?path=files/uploads&depth=2

获取 path 上的文件或目录及其子目录,限制为 depth

示例

所有路由还接受额外的 lang 参数(例如 ?lang=de)。如果您需要覆盖语言。

配置

禁用 API

编辑您的 parameters.yml

parameters:
…
content_api_enabled:
    false
…

API 路由现在全部已禁用。这可能有助于您仅想使用捆绑中包含的类。

响应头

编辑您的 parameters.yml

parameters:
…
content_api_headers:
    'Access-Control-Allow-Origin': 'https://mysite.org'
…

这些头将添加到 API 的所有响应中。

自定义阅读器

Contao 有阅读器模块的概念(例如新闻阅读器)。这些可以在文章内部任何位置插入,以读取 URL 并显示其内容。如果您想添加额外的阅读器模块,可以通过在 parameters.yml 中添加它们来实现。

parameters:
…
    content_api_readers:
        newsreader: NewsModel
        blogreader: BlogModel
…

请注意,第二个参数是 模型 类,而不是 模块 类。新的阅读器现在可在以下位置使用

/api/blogreader?url=/blog/detail/on-the-topic.html

或者,如果您想包括整个页面,在以下位置

/api?url=/blog/detail/on-the-topic.html

API 内部会尝试使用在 URL 中找到的别名实例化模型。它还尝试添加所有可以找到的 ContentModels

钩子

我们提供了一些基本的钩子

class Hooks{

    // $GLOBALS['TL_HOOKS']['apiBeforeInit']
    public static apiBeforeInit(Request $request){
        return $request
    }

    // $GLOBALS['TL_HOOKS']['apiAfterInit']
    public static apiAfterInit(Request $request){
        return $request
    }

    // $GLOBALS['TL_HOOKS']['apiContaoJson']
    public static apiContaoJson(ContaoJson $contaoJson, mixed $data){
        if($data instanceof ContentModel){
            $contaoJson->data = null;
            // End of the line
            return false;
        }
        // Do your thing, ContaoJson
        return true;

    }

    // $GLOBALS['TL_HOOKS']['apiResponse']
    public static apiResponse(mixed $data){
        $data->tamperedWith = true;
        return $data;

    }

    // $GLOBALS['TL_HOOKS']['apiModuleGenerated']
    public static function apiModuleGenerated(ApiModule $module, string $moduleClass)
    {
        // Override the way certain modules are handled
        if ($moduleClass != 'Contao\ModuleBlogList') {
            return;
        }
        $_module = new ModuleBlogList($module->model, null);
        $module->items = $_module->fetchItems(
            $module->category
        );
    }
}

文档

为API编写的类可以作为构建Contao之上任何内容的好起点。

在此处查看文档

贡献

欢迎提交错误报告和拉取请求 :)

© Die Schittigs GmbH 2019