pppl/contao-content-api-bundle

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

安装: 26

依赖关系: 0

建议者: 0

安全: 0

星标: 0

关注者: 0

分支: 9

类型:contao-bundle

2.6.13 2021-07-01 14:44 UTC

README

这是一个分支。它包含了一些更改,以便使nuxt-contao桥接工作。

原始

原始: Die Schittigs 喜爱 Contao,但网络正在前进,静态HTML模板已经不再适用。因此,我们提供了一个易于理解的JSON-API,通过JavaScript(或任何可以处理JSON的其他内容)访问Contao内容。

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

需求

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

安装

如果您还没有安装,请安装 composer,然后在您的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
…

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

/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之上构建任何内容,可能是一个很好的起点。

请在此处查看文档

贡献

欢迎提交bug报告和pull request :)

© Die Schittigs GmbH 2019