Contentstack是一个以API为先的头戴式CMS,将内容置于核心位置。它旨在通过将代码与内容分离来简化发布过程。

v1.2.1 2024-03-06 09:52 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());
...