contentstack / utils
Contentstack是一个以API为先的头戴式CMS,将内容置于核心位置。它旨在通过将代码与内容分离来简化发布过程。
Requires
- php: >=7.2
- marc-mabe/php-enum: ^4.7.0
Requires (Dev)
- phpunit/php-code-coverage: ^9.0
- phpunit/phpunit: ^9.3
- squizlabs/php_codesniffer: ^3.0
This package is auto-updated.
Last update: 2024-09-27 05:35:47 UTC
README
Contentstack是一个以API为先的头戴式CMS。它是开发者可以使用以构建强大跨平台应用的语言的CMS。构建你的应用程序前端,Contentstack将负责其他一切。了解更多。
本指南将帮助您开始使用Contentstack PHP Utils SDK构建由Contentstack提供动力的应用。
先决条件
- PHP版本5.5.0或更高版本
SDK安装和设置
要在PHP项目中设置Utils SDK,请通过gem安装
composer require contentstack/utils
如果您正在使用Contentstack PHP SDK,则“contentstack/utils”已导入到您的项目中。
用法
让我们学习如何使用Utils SDK渲染嵌入式项目。
创建渲染选项
要在前端渲染嵌入式项目,请使用renderOptions函数,并定义您希望在网站前端显示的UI元素,如下面的示例代码所示
<?php declare(strict_types=1); namespace Sample\App; use Contentstack\Utils\Resource\EntryEmbedable; use Contentstack\Utils\Resource\RenderableInterface; use Contentstack\Utils\Resource\EmbeddedObject; use Contentstack\Utils\Model\Option; use Contentstack\Utils\Model\Metadata; use Contentstack\Utils\Enum\StyleType; use Contentstack\Utils\Enum\NodeType; use Contentstack\Utils\Enum\MarkType; class CustomOption extends Option { function renderMark(MarkType $markType, string $text): string { switch ($markType) { case MarkType::get(MarkType::BOLD): return "<b>".$text."</b>"; default: return parent::renderMark($markType, $text); } } function renderNode(string $nodeType, object $node, string $innerHtml): string { switch ($nodeType) { case "p": return "<p class='class-id'>".$innerHtml."</p>"; case "h1": return "<h1 class='class-id'>".$innerHtml."</h1>"; default: return parent::renderNode($nodeType, $node, $innerHtml); } } function renderOptions(array $embeddedObject, Metadata $metadata): string { switch ($metadata->getStyleType()) { case StyleType::get(StyleType::BLOCK): if ($metadata->contentTypeUID === 'product') { return "<div> <h2 >".$embeddedObject["title"]."</h2> <img src=".$embeddedObject["product_image"]["url"]. "alt=".$embeddedObject["product_image"]["title"]."/> <p>".$embeddedObject["price"]."</p> </div>" } case StyleType::get(StyleType::INLINE): return "<span><b>".$embeddedObject["title"]."</b> -".$embeddedObject["description"]."</span>"; case StyleType::get(StyleType::LINK): return "<a href=".$metadata->getAttribute("href")->value .">".$metadata->getText()."</a>" case StyleType::get(StyleType::DISPLAY): return "<img src=".$metadata->getAttribute("src")->value." alt='".$metadata->getAttribute("alt")->value." />"; case StyleType::get(StyleType::DOWNLOAD): return "<a href=".$metadata->getAttribute("href")->value .">".$metadata->getText()."</a>" } return parent::renderOptions($embeddedObject, $metadata); } }
基本查询
Contentstack Utils SDK允许您与内容交付API交互,并从条目的RTE字段检索嵌入式项目。
从单个条目获取嵌入式项目
渲染HTML RTE嵌入式对象
要获取单个条目的嵌入式项目,您需要提供堆栈API密钥、环境名称、交付令牌、内容类型UID和条目UID。然后,使用以下所示的Contentstack::renderContent
函数
use Contentstack\Contentstack; use Contentstack\Utils\Model\Option; $stack = Contentstack::Stack('<API_KEY>', '<ENVIRONMENT_SPECIFIC_DELIVERY_TOKEN>', '<ENVIRONMENT>'); $entry = $stack->ContentType('<CONTENT_TYPE_UID>')->Entry('<ENTRY_UID>')->includeEmbeddedItems()->toJSON()->fetch(); $render_rich_text = Contentstack::renderContent($entry['rte_field_uid'], new Option($entry));
如果您想使用CustomOption函数渲染嵌入式项目,可以参考下面的代码
$rendered_rich_text = Contentstack.renderContent($entry['rte_field_uid'], new CustomOption($entry));
渲染超级增强RTE内容
要获取单个条目,您需要提供堆栈API密钥、环境名称、交付令牌、内容类型和条目UID。然后,使用以下所示的Contentstack::jsonToHtml
函数
use Contentstack\Contentstack; use Contentstack\Utils\Model\Option; $stack = Contentstack::Stack('<API_KEY>', '<ENVIRONMENT_SPECIFIC_DELIVERY_TOKEN>', '<ENVIRONMENT>'); $entry = $stack->ContentType('<CONTENT_TYPE_UID>')->Entry('<ENTRY_UID>')->includeEmbeddedItems()->toJSON()->fetch(); $render_rich_text = Contentstack::jsonToHtml($entry['rte_field_uid'], new Option($entry));
如果您想使用CustomOption函数渲染嵌入式项目,可以参考下面的代码
$rendered_rich_text = Contentstack.jsonToHtml($entry['rte_field_uid'], new CustomOption($entry));
从多个条目获取嵌入式项目
渲染HTML RTE嵌入式对象
要从多个条目获取嵌入式项目,您需要提供堆栈API密钥、环境名称、交付令牌和内容类型UID。
use Contentstack\Contentstack; use Contentstack\Utils\Model\Option; $stack = Contentstack::Stack('<API_KEY>', '<ENVIRONMENT_SPECIFIC_DELIVERY_TOKEN>', '<ENVIRONMENT>'); $result = $stack->ContentType('<CONTENT_TYPE_UID>')->Query()->toJSON()->includeEmbeddedItems()->find() for($i = 0; $i < count($result[0]); $i++) { $entry = $result[0][$i]; $render_rich_text = Contentstack::renderContent($entry['rich_text_content'], new Option($entry)); }
渲染超级增强RTE内容
要获取单个条目,您需要提供堆栈API密钥、环境名称、交付令牌和内容类型UID。然后,使用以下所示的Contentstack::jsonToHtml
函数
use Contentstack\Contentstack; use Contentstack\Utils\Model\Option; $stack = Contentstack::Stack('<API_KEY>', '<ENVIRONMENT_SPECIFIC_DELIVERY_TOKEN>', '<ENVIRONMENT>'); $result = $stack->ContentType('<CONTENT_TYPE_UID>')->Query()->toJSON()->includeEmbeddedItems()->find() for($i = 0; $i < count($result[0]); $i++) { $entry = $result[0][$i]; $render_rich_text = Contentstack::jsonToHtml($entry['rich_text_content'], new Option($entry)); }
GQL
要将GQL API中的JSON RTE内容转换为HTML,请使用以下所示的GQL::jsonToHtml
函数
use Contentstack\Utils\GQL; use Contentstack\Utils\Model\Option; // GQL fetch API ... $render_html_text = GQL::jsonToHtml($entry->rich_text_content,, new Option()); ...