daccess1/yii2-tilda-api

为Yii2平台的Tilda API扩展

安装: 73

依赖者: 0

建议者: 0

安全: 0

星星: 0

关注者: 0

分支: 3

类型:yii2-extension

1.2.0 2019-07-05 19:24 UTC

README

其他语言阅读:俄语

为Yii2平台的Tilda API扩展

这是一个基于nariman924/yii2-tilda-api项目的分支,该项目似乎已经废弃了几年。

安装

安装此扩展的首选方式是通过composer

运行

composer require daccess1/yii2-tilda-api

或者在您的composer.json文件的require部分添加

"daccess1/yii2-tilda-api": "^1.0"

扩展安装后,将以下内容添加到您的common/config/main-local.php文件的components部分

    'components' => [
         ...
         'tilda' => [
             'class' => 'daccess1\tilda\TildaApi',
             'publicKey' => '**********',
             'secretKey' => '**********',
             // Change URL if needed. Don't forget to set protocol
             // to https:// when moving to production.
             'assetsUrl' => 'http://'.$_SERVER['HTTP_HOST'].'/tilda',
             // Change 'public_html' to the frontend web directory if needed
             // (default Yii2 directory is 'frontend/web')
            'assetsPath' => dirname(dirname(__DIR__)).'/public_html/tilda',
             //Optional default project ID (integer)
             //'defaultProjectID' => *****
         ],
     ],

应用所需的迁移

php yii migrate --migrationPath=@vendor/daccess1/yii2-tilda-api/migrations

使用

此扩展的两个最常见目标是保存Tilda页面到本地数据库,然后显示给最终用户。以下是一些常见使用模式的指令。所有示例都假设您正在使用Gii生成的CRUD。

保存页面

要渲染Tilda项目的页面列表,您可以使用renderPageSelect方法。它设计为与Gii生成的ActiveForm一起使用,默认情况下无需额外设置。只需用以下代码替换您的表单字段,该字段存储Tilda页面ID即可

<?= Yii::$app->tilda->renderPageSelect($model,'your_field_id'); ?>

此小部件具有与默认ActiveForm输入字段相同的所有值。您还可以将项目ID(整数)作为第三个参数设置。如果没有提供,将使用defaultProjectID设置。结果,HTML选择列表将渲染到您的表单中,其输入将像其他模型字段一样处理。

选择页面后,现在您想将其保存到本地存储。为此,您应该像这样更新您的Controller中的actionCreateactionUpdate函数

if ($model->load(Yii::$app->request->post()) && $model->save()) {
    //insert this line
    Yii::$app->tilda->getPage($model->your_field_id);
    
    return $this->redirect(['view', 'id' => $model->id]);
}

这将保存页面HTML代码和资源到您的本地服务器。

渲染页面

将页面保存到本地存储后,您可以使用扩展的registerAssetsrenderHtml方法来渲染它。这需要两个步骤来实现

在您的控制器操作中注册所需的资源

Yii::$app->tilda->registerAssets($this,$model->tilda_page_id);

第一个参数是当前\yii\web\Controller实例,第二个参数是Tilda页面ID。

然后在您的视图中,您可以像这样渲染HTML

<?= Yii::$app->tilda->renderHtml($model->tilda_page_id) ?>

Webhook

Tilda有一个选项可以通过webhook通知您的应用程序有关项目中的任何已发布的页面。然而,它对此有一些使用限制(更多详情请见Tilda API文档)。实现Webhook的一种方法如下

public function actionWebhook()
    {
        $get = \Yii::$app->request->get();

        // Check request public key
        if (!\Yii::$app->tilda->verifyPublicKey($get['publickey']))
            throw new \yii\web\ForbiddenHttpException("PublicKey dosen't match");
        
        if (!isset($get['save'])) {
            // If this is actual Tilda webhook request,
            // create cURL request client 
            // Set 'baseUrl' to your current webhook Url
            $client = new Client([
                'transport' => 'yii\httpclient\CurlTransport',
                'baseUrl' => 'http://domain.com/index.php?r=tilda/webhook'
            ]);
            try {
                $client->createRequest()
                    ->setMethod('get')
                    ->setData(['save' => 1, 'page' => $get['pageid'], 'publickey' => $get['publickey']])
                    ->setOptions([
                        // Setting timeout and data return transfer
                        // options of request to prevent waiting until
                        // page download completes
                        CURLOPT_CONNECTTIMEOUT => 1,
                        CURLOPT_TIMEOUT => 1,
                        CURLOPT_RETURNTRANSFER => false,
                        CURLOPT_FORBID_REUSE => true,
                        CURLOPT_DNS_CACHE_TIMEOUT => 10,
                        CURLOPT_FRESH_CONNECT => true,
                    ])
                    ->send();
            } catch (\yii\httpclient\Exception $e) {
                // Returning success result to Tilda webhook
                \Yii::$app->response->format = \yii\web\Response::FORMAT_HTML;
                return "ok";
            }
        } else {
            // Else if this is cURL recursive request, perform
            // page download 
            \Yii::$app->tilda->getPage($get['page']);
        }

        \Yii::$app->response->format = \yii\web\Response::FORMAT_HTML;
        return "ok";
    }

方法

在注册组件和应用所需的迁移后,您可以在代码的任何地方访问它的方法。然而,已经在上文描述了最常见的使用案例。

renderPageSelect

返回与ActiveForm兼容的HTML选择输入,列出所选项目中的所有页面。如果没有提供$projectID,则使用defaultProjectID设置。

Yii::$app->tilda->renderPageSelect($model,'your_field_id',$projectID);

getPage

将Tilda页面及其资源保存到本地数据库。注意:Tilda的默认jQuery(1.10.2)未下载(以防止与您的Yii2 jQuery资源冲突)。

Yii::$app->tilda->getPage($pageID)

registerAssets

注册页面的资源(CSS和JS)。第一个参数是当前\yii\web\Controller实例,第二个参数是Tilda页面ID。

Yii::$app->tilda->registerAssets($this,$pageID);

renderHtml

返回所选页面的HTML代码。

Yii::$app->tilda->renderHtml($pageID)

listPages

返回项目中的页面列表,以['id' => 'title']数组的形式。如果没有提供$projectID,则使用defaultProjectID设置。

Yii::$app->tilda->listPages($projectID)

loadPage

返回页面本地副本中的数据数组。

$page = Yii::$app->tilda->loadPage($pageID);

注意事项

您应该考虑到当前Tilda核心CSS设置与Bootstrap(由Yii2默认提供)存在冲突。为了避免冲突,您可以选择不在同一页面上同时使用bootstrap.css和Tilda,或者修复您自己的样式表中元素的box-sizing属性。

许可证

本软件根据MIT许可证授权。有关更多信息,请参阅许可证