daccess1/yii2-tilda-api
为Yii2平台的Tilda API扩展
Requires
- yiisoft/yii2: *
- yiisoft/yii2-httpclient: ~2.0.0
This package is auto-updated.
Last update: 2024-09-07 00:02:12 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中的actionCreate和actionUpdate函数
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代码和资源到您的本地服务器。
渲染页面
将页面保存到本地存储后,您可以使用扩展的registerAssets和renderHtml方法来渲染它。这需要两个步骤来实现
在您的控制器操作中注册所需的资源
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许可证授权。有关更多信息,请参阅许可证。