clickrain / stratus
Stratus集成Craft CMS
1.0.3
2023-08-07 19:28 UTC
Requires
- php: ^8.0.2
- craftcms/cms: ^4.0.0
Requires (Dev)
- phpstan/phpstan: ^1.9
This package is auto-updated.
Last update: 2024-09-07 21:48:33 UTC
README
A plugin for syncing and displaying Stratus reviews and listing data on your Craft website
先决条件
Stratus账户
You will need an account on Stratus to use this plugin. Please visit the Stratus help center to get started.
安装
在Craft项目中安装插件
Craft插件商店
- 导航到Craft CMS控制面板并点击插件商店标签。
- 搜索Stratus并点击插件。
- 点击试用按钮安装插件。
Composer
-
导航到项目根目录并运行以下命令。
composer require clickrain/stratus
-
使用Craft CLI安装插件。
./craft plugin/install stratus
生成API密钥和webhook密钥
-
在Craft CMS下,点击生成密钥按钮。一个模态窗口将出现,您可以可选地提供webhook目标URL。
-
点击生成按钮。API密钥和webhook密钥(如果您提供了webhook目标URL)将被生成并显示。在关闭模态窗口之前,请确保将这两个值复制到安全的地方。关闭模态窗口后,您将无法检索API密钥。
配置插件
您可以通过两种方式之一配置插件。第一种是使用Craft控制面板。第二种是使用环境变量。后一种在生产环境中更推荐。
- 将以下环境变量添加到项目根目录中的
.env
文件中。STRATUS_API_KEY=<API Key> STRATUS_WEBHOOK_SECRET=whsec_<Webhook Secret>
如果您在生成API密钥时未提供webhook URL,您需要配置Craft项目以自动运行作业队列。您可能需要在config/general.php
中将runQueueAutomatically
设置为false
以禁用它。
- 配置Craft项目以自动运行作业队列。您可能需要在
config/general.php
中将runQueueAutomatically
设置为false
以禁用它。 - 添加cron作业或计划任务以运行
craft stratus/default/import
使用方法
全局访问条目或评论
{# accessing a listing by its Stratus UUID #} craft.stratus .listings({uuid: 'e529a4a3ee1f3a0a47292f391cdbebe74fa72ff2'}) .one() {# accessing a review by its Stratus UUID #} craft.stratus .reviews({uuid: 'aec1873c02ecad673af91f2af0f4daaa66fa1887'}) .one()
根据父列表UUID访问评论
{# by parent Stratus UUID #}
craft.stratus
.reviews({listing: 'e529a4a3ee1f3a0a47292f391cdbebe74fa72ff2'})
.all()
通过自定义字段访问与条目关联的评论
{# asuming the field is named reviews #} entry.reviews .all() {# access reviews for the first connected listing to the provided entry #} entry.listings .one() .reviews .all()
预加载
{# listings eager loading their reviews #} craft.stratus .listings().with('reviews').all() {# reviews eager loading their parent listings #} craft.stratus .reviews().with('listing').all()
过滤评论
{# Get the reviews for the first listing and eager load reviews. Also filter the reviews to only ones that are greater than 3 stars or recommended (facebook). #} set reviews = entry.listings .with([ ['reviews', { rating: [4,5], recommends: [true], content: ['not :empty:'], }] ]).one()
{# Filter reviews by platform. supported platforms include the following google facebook healthgrades google_play_store apple_app_store yelp tripadvisor bbb indeed glassdoor yellow_pages zocdoc vitals realself ratemds webmd zillow #} craft.stratus .reviews({platform: 'google'}) .all()
显示评论信息
{% set listing = entry.listings.one() %} {% for review in listing.reviews %} <dl class="card p-3"> <dt>Platform Published Date</dt> <dd>{{ review.platformPublishedDate|date }}</dd> <dt>Author</dt> <dd>{{ review.author }}</dd> <dt>Rating</dt> <dd>{{ review.icons.rating|raw (review.rating|default('null')) }}</dd> <dt>Recommends</dt> <dd>{{ (review.recommends|default('null')) }}</dd> <dt>Review Content</dt> <dd>{{ review.content }}</dd> <dt>Platform</dt> <dd> <ul> <li>{{review.icons.platform|raw}}</li> <li>{{review.platformName}}</li> <li>{{ review.platform }}</li> </ul> </dd> <dt>Reviewable</dt> <dd>{{ review.reviewableName }} ({{ review.reviewableType }})</dd> <dt>UUIDs</dt> <dd> <ul> <li>{{ review.stratusUuid }} (review)</li> <li>{{ review.stratusParentUuid }} (parent listing)</li> </ul> </dd> <dt>Parent Listing</dt> <dd>{{ review.listing }}</dd> </dl> {% endfor %}
显示列表信息
{% set listing = entry.listings.one() %} <dl class="card p-3"> <dt>Name</dt> <dd>{{ listing.name }}</dd> <dt>Address</dt> <dd>{{ listing.fullAddress|raw }}</dd> <dt>Address Parts</dt> <dd> <ul> <li>{{ listing.address }}</li> <li>{{ listing.address2 }}</li> <li>{{ listing.city }}</li> <li>{{ listing.state }}</li> <li>{{ listing.zip }}</li> </ul> </dd> <dt>Timezone</dt> <dd>{{ listing.timezone }}</dd> <dt>Phone Number</dt> <dd>{{ listing.phone }}</dd> <dt>Type</dt> <dd>{{ listing.type }}</dd> <dt>UUIDs</dt> <dd> <ul> <li>{{ listing.stratusUuid }} (listing)</li> </ul> </dd> <dt>Associated Reviews</dt> <dd> <ul> {% for review in listing.reviews %} <li>{{review.content}} — {{ review.author }}</li> {% endfor %} </ul> </dd> <dt>Max Rating Overall</dt> <dd>{{ listing.maxRating }}</dd> <dt>Average Rating Overall</dt> <dd>{{ listing.avgRating }}</dd> <dt>Ratings by Platform</dt> <dd> {% for rating in listing.getRatings %} <dl class="p-2"> <dt>Platform Name</dt> <dd>{{ rating.name }}</dd> <dt>Average for Platform</dt> <dd>{{ rating.avg }}</dd> <dt>Maximum for Platform</dt> <dd>{{ rating.max }}</dd> <dt>Individual Connection Ratings</dt> <dd>{{ rating.ratings|json_encode }}</dd> </dl> {% endfor %} </dd> <dt>Hours</dt> <dd> {% for dayOfTheWeek, hoursDetails in listing.hours %} <strong>{{ dayOfTheWeek }}:</strong> {% if hoursDetails.closed %} Closed {% endif %} {% if hoursDetails['24hr'] %} Open 24 hours {% endif %} {% for period in hoursDetails.periods %} {{ period.open }} {{ period.close }} {% endfor %} <br> {% endfor %} </dd> <dt>Holiday Hours</dt> <dd> {% for holidayHours in listing.holidayHours %} <strong>{{ holidayHours.name }} ({{holidayHours.date}}):</strong> {% if holidayHours.closed %} Closed {% endif %} {% if holidayHours['24hr'] %} Open 24 hours {% endif %} {% for period in holidayHours.periods %} {{ period.open }} {{ period.close }} {% endfor %} <br> {% endfor %} </dd> </dl>
GraphQL
query { stratusListings { name type address address2 city state zip phone timezone stratusUuid maxRating avgRating ratings reviews hours holidayHours } } query { stratusListing(uuid: "3cab7a2b49654df583d315b3274b646d3ccdda03") { name type address address2 city state zip phone timezone stratusUuid maxRating avgRating ratings reviews hours holidayHours } } query { stratusReviews { content platform platformName rating recommends author platformPublishedDate reviewableType reviewableName stratusUuid stratusParentUuid listing } } query { stratusReviews(platform: "facebook") { platformName author content } } query { stratusReviews(listing: "3cab7a2b49654df583d315b3274b646d3ccdda03") { platformName author content } } query { stratusReviews(listing: "3cab7a2b49654df583d315b3274b646d3ccdda03") { platformName author content } } query { stratusReview(uuid: "023d9f6a23685b85ad22f62c01f25c82b9d81800") { platformName author content } }