dartanian300/xmodule-php

Modo Lab 的 Xmodule 规范的 PHP 实现

v1.2.0 2019-09-18 12:31 UTC

This package is auto-updated.

Last update: 2024-09-20 03:40:48 UTC


README

一个用于实现 Modo Lab 的 XModule 网络服务的 PHP 库。

此库尽可能遵循 XModule v1.0 规范。除非另有说明,否则每个元素都可以通过它们的名称(从规范中)的驼峰式版本进行实例化。为了最简单的使用,在使用此库时请参考规范(同时记住以下“注意事项”)。

安装方法

$ composer require dartanian300/xmodule-php

确保包含 Composer 的自动加载器

require(__DIR__.'/vendor/autoload.php');

使用这些元素一起创建您的 XModule 响应

// Create root response element
$response = new XModuleResponse();

// Create content elements
$container = new ButtonContainer();
$button = new LinkButton();

$button->title->set("Click Me");
$container->add($button);

// Add elements to root response element
$response->add($container);

// Print JSON response
echo json_encode($response);

一些注意事项

  • 所有元素在调用 json_encode() 时将检查所需字段。如果缺少字段,将抛出异常。
  • 使用预定义值的字符串字段通过将值作为函数设置(例如 - 将 actionType 设置为 'constructive':$linkBbutton->actionType->constructive()
  • 通过 set()get() 访问的自定义字符串字段
  • 通过 get()true()false() 访问的布尔字段
  • 通常通过 add()get()delete()(如果多个数组,则附加驼峰式属性名称)访问数组字段
  • elementTypeinputType 字段会自动设置

入门示例

访问/设置预定义字符串字段

$collapsible = new Collapsible();
$collapsible->disclosureIcon->plusminus();
$collapsible->disclosureIcon->get();

访问/设置自定义字符串字段

$collapsible = new Collapsible();
$collapsible->title->set("I'm a collapsible title!");
$collapsible->title->get();

访问/设置布尔字段

$collapsible = new Collapsible();
$collapsible->collapsed->true();
$collapsible->collapsed->get();

访问/设置/删除数组字段

$collapsible = new Collapsible();

$img = new Image();
$img->url->set('http://...');

$collapsible->add($img);
$collapsible->get(0);
$collapsible->delete(0);

访问/设置/删除对象字段

$container = new Container();
$container->margins->responsive();

$detail = new Detail();
$detail->thumbnail->url->set('http://...');
$detail->thumbnail->crop->true();

访问/设置 id 字段

$collapsible = new Collapsible('collapse1');

// OR

$collapsible = new Collapsible();
$collapsible->setId('collapse1');

注意:ids 只能在支持它的元素上设置

访问 elementType 字段

$collapsible = new Collapsible();
$collapsible->getElementType();

更多示例

使用具有多个数组字段的元素

$table = new Table();

$row = new \XModule\Helpers\Row();
$table->addRow($row);
$table->getRow(0);
$table->deleteRow(0);

$columnOption = new \XModule\Helpers\ColumnOption();
$table->addColumnOption($columnOption);
$table->getColumnOption(0);
$table->deleteColumnOption(0);

使用表单

// Create root response element
$response = new XModuleResponse();

// Create root form element
$form = new Form();
$form->relativePath->set('./');

// Create inputs
$nameInput = new TextInput();
$nameInput->name->set("first-name");
$nameInput->label->set("First Name");

$selectState = new SelectMenu();
$selectState->name->set("state");
$selectState->label->set("State");
$optionLabels = ['New York', 'Georgia', 'California'];
$optionValues = ['NY', 'GA', 'CA'];
$selectState->addOptionLabel($optionLabels);
$selectState->addOptionValue($optionValues);

// OR store in associative array

//$optionValues = [
//    //label - value
//    'New York'  => 'NY',
//    'Georgia'   => 'GA',
//    'California'    =>  'CA'
//];
//foreach($optionValues as $label => $value){
//    $selectState->addOptionLabel($label);
//    $selectState->addOptionValue($value);
//}

$comments = new TextArea();
$comments->name->set('comments');
$comments->label->set('Comments');

// Add fields to form
$form->add([$nameInput, $selectState, $comments]);

// Add form to root response element
$response->add($form);

// Print JSON response
echo json_encode($response);

使用 MultiColumn

// Create root response element
$response = new XModuleResponse();

// Create multicolumn element
$columns = new MultiColumn(2);

// Create content
$text = new Detail();
$text->title->set('Welcome');
$text->body->set('<p>See to the right</p>');
$image = new Image();
$image->url->set('https://image.shutterstock.com/image-photo/large-beautiful-drops-transparent-rain-260nw-668593321.jpg');

// Add content to multicolumn
$columns->add(0, $text);
$columns->add(1, $image);

// Add multicolumn to root response element
$response->add($columns);

// Print JSON response
echo json_encode($response);

一些异常

一些字段/元素使用修改后的 add() 方法。请参阅以下签名

  • ProgressiveDisclosureItemsQueryParameters 字段: add($key, $element).
  • MultiColumn 元素: add($columnNum, $element).

更多文档

在运行以下命令后,可以通过在浏览器中导航到 docs 文件夹来找到更多文档

$ composer make-docs

注意:假设 PHPDoc 已安装在项目的 'vendor' 文件夹中,并且您正在基于 Unix 的系统上执行。命令可能需要修改才能在 Windows 系统上工作(位于 composer.json 中)。

元素参考

可用的顶级元素

  • 根元素: XModuleResponse
  • AutoUpdateAccessibility
  • ButtonContainer
  • Carousel
  • Collapsible
  • Container
  • Detail
  • GoogleMap
  • Grid
  • Heading
  • HTML
  • Image
  • Link
  • LinkButton
  • LoadingIndicator
  • MultiColumn
  • Portlet
  • Table
  • Tabs
  • Toolbar
  • ToolbarContent
  • XList(由于在 PHP 中是保留字,因此从规范中的 List 重命名为 XList)

可用的表单元素

  • 根元素: Form
  • Checkbox
  • Email
  • FormButton
  • HiddenField
  • Label
  • Password
  • Phone
  • RadioButtons
  • SelectMenu
  • TextArea
  • TextInput
  • Upload

可用的 GoogleMaps 元素(命名空间:XModule\GoogleMaps)

  • MapPoint
  • MapPolygon
  • MapPolyline
  • Point

(命名空间:XModule\GoogleMaps\MapPoint)

  • Anchor
  • Icon
  • Size

可用的 Toolbar 元素(命名空间:XModule\Toolbar)

  • MenuItem
  • 工具栏按钮
  • 工具栏标签
  • 工具栏菜单

可用辅助元素(命名空间:XModule\Helpers)

Table一起使用

  • 列选项
  • 单元格

Carousel一起使用

  • 轮播项目

Grid一起使用

  • 网格项

XList一起使用

  • 列表项

Tabs一起使用

  • 选项卡

尚未实现的概念

  • GoogleMap中的动态标记字段
  • X组件