每个标记、触发器和变量都可以选择定义一个或多个参数。这些参数的API与插件设置.
下面是一个关于如何定义参数的示例,稍后您可以在标记、触发器或变量的JavaScript部分访问该参数。
公共函数getParameters(){返回数组($ this-> makessetting ($name = 'popupText', $default = '这是默认值',FieldConfig::TYPE_STRING,函数(FieldConfig $field) {$field->title = '弹出文本';$field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA;$field->description = '请输入文本';$field->validators[] = new NotEmpty();}));}
您可能会注意到一些事情,比如参数名popupText
在该参数下,稍后将在Javscript中使用parameters.get(“popupText”)
,默认值,将在UI中显示给用户的标题,应该使用哪个UI控件等等。
您可以在不同的UI控件之间进行选择,例如复选框或选择字段。请查看FieldConfig API有关可用控件类型的详细信息。
在标签管理器中,你可以允许用户选择一个变量,而不是只写一个硬编码的值。要做到这一点,只需将模板文件设置为以下值之一:
$field->uiControl = FieldConfig::UI_CONTROL_TEXT;$field->customUiControlTemplateFile = self::FIELD_TEMPLATE_VARIABLE;//一个允许用户选择变量的textarea $field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA;$field->customUiControlTemplateFile = self::FIELD_TEMPLATE_TEXTAREA_VARIABLE;$field->customUiControlTemplateFile = self::FIELD_TEMPLATE_VARIABLE_TYPE;$field->uiControlAttributes = array('variableType' => 'MatomoConfiguration');
在模板中,您可能希望仅当不同参数具有特定值时才显示某些参数。在下面的例子中,用户可以选择“跟踪类型”。当选择的类型是“Goal”时,我们希望显示另一个字段,让用户输入“Goal ID”。要实现这一点,您可以指定条件
财产。在下面的例子中是trackingType == "目标"
.这意味着只有当用户选择了跟踪类型时,参数才会显示目标
.
公共函数getParameters() {$trackingType = $this-> makessetting ('trackingType', 'pageview', FieldConfig::TYPE_STRING,函数(FieldConfig $field) {$field->title = '跟踪类型';$field->uiControl = FieldConfig::UI_CONTROL_SINGLE_SELECT;$field->availableValues =数组('pageview' => 'pageview', 'goal' => 'goal',);});返回array($trackingType, $this-> makessetting ('idGoal', ", FieldConfig::TYPE_INT, function (FieldConfig $field) use ($trackingType) {$field->title = '目标ID';$field->条件= 'trackingType == "目标";if ($trackingType->getValue() === 'goal') {$field->validators[] = new NotEmpty();$field->validators[] = new CharacterLength(1500);}}),);
你有两种方法来验证一个值:
NotEmpty
,CharacterLength
,电子邮件
,NumberRange
:$field->validators[] = new Piwik\ validators \NotEmpty();$field->validators[] = new Piwik\ validators \Email();$field->validators[] = new Piwik\ validators \UrlLike();$field->validators[] = new Piwik\ validators \CharacterLength($min = 1, $max = 500);$field->validators[] = new Piwik\ validators \NumberRange($min = 1, $max = 500);
验证
像这样调用:$field->validate = function ($value, Setting $ Setting) {if ($value > 60) {throw new \Exception('时间限制不允许超过60分钟。');}}
您也可以在一个字段中同时使用这两种方法。任何验证器
是否会执行之前的习俗验证
方法。
在保存值之前,您可能希望转换值以确保值具有预期的格式。例如,你可能想要确保一个URL总是有这样的协议集:
$field->transform = function ($value, Setting $ Setting) {if (strpos($value, 'http') === false) {$value = 'https://'。美元价值;}返回$value;}
当您向标记模板添加新参数时,所有引用此模板的现有标记将在下一个版本发布后显示为更改。他们将继续这样做,直到每个版本都以某种方式手动更新,并发布另一个版本。为了避免这种情况,可以在迁移脚本中使用一个helper类(可用的Matomo 4.12及以上版本)。
public function doUpdate(Updater $ Updater){//执行正常方式定义的任何迁移。更新- > executeMigrations (__FILE__, $ this - > getMigrations(更新)美元);//迁移Matomo类型标签到所有包含新配置的字段。$migrator = new NewTagParameterMigrator(MatomoTag::ID, ' someenewparametername ');移居者- > addField(“anotherNewParameterName”);//这是可选的,只有当你添加了多个参数时才需要。移居者- >迁移();//开始标签迁移的处理。}
MatomoTag
,只需替换正确的类,它应该具有ID
常数。addField
方法,如果添加了多个新参数,则可以根据需要多次调用该方法。如果您只添加了一个,则不需要使用addField
方法。addField
方法,该方法允许您指定要给予新参数的值,而不是将其保留为空。要获得更多信息,请查看FieldConfig API.