所以,我正在尝试做一个非常简单的事情:检查一个数字是否等于另一个数字-但由于某种原因,它只是不想工作。
$exhibitions = "20,21,24";
$parent = "[[*parent]]";
$id = "[[*id]]";
if ($id == 5) {
$chunk = "listExhibitions";
}
if (stripos($exhibitions, $parent) == TRUE) {
$chunk = "Exhibitions";
}
return "[[$" . $chunk . "]]";
这是我要开始工作的第一个“ if”。如果我把!在==之前,然后页面显示“ listExhibitions”块-但是,当id等于5时,我需要这样做。我也尝试在数字周围加上''。另外,当我简单地输出$ id时,数字5也会出现。
我在做什么错了?
答案 0 :(得分:5)
您所引用的ID仅应在视图中使用。这似乎是一个控制器。尝试这种方式:
$exhibitions = "20,21,24";
$parent = $modx->resource->get('parent');
$id = $modx->resource->get('id');
if ($id == 5) {
$chunk = "listExhibitions";
}
if (stripos($exhibitions, $parent) == TRUE) {
$chunk = "Exhibitions";
}
return "[[$" . $chunk . "]]";
答案 1 :(得分:2)
您希望在这里发生的事情是使Modx自动处理您的ID和PARENT占位符,并将它们传递到您的代码段中。 Modx不会为您执行此操作,您要么必须将它们显式地传递到$ scriptProperties数组中,要么〜或〜正如Marvin指出的那样,从modResource对象(这些modx将假定为当前资源)获取这些属性
要显式传递它们,请将占位符添加到您的代码段调用中:
[[~MyCustomSnippet? &id=`[[*id]]` &parent=`[[*parent]]`]]
在这种情况下,Modx将在解析页面,模板或块(无论您碰巧调用了代码段的位置)时填充占位符。
如果您正在处理CURRENT资源的ID和PARENT; Marvin的示例将起作用,尽管我确实相信您必须首先获取当前资源对象。
$resource = $modx->getObject('modResource');
您将不得不检查该文档。 (或对其进行测试)
更新
我们三个人通过聊天解决了问题,并提出了以下解决方案:
通过这种方式调用代码段:
[[!MyCustomSnippet? &id=`[[*id]]`]]
代码段的内容:
<?php
$id = isset($scriptProperties['id']) ? $scriptProperties['id'] : FALSE; // get id passed with snippet
$exhibitions = array(20,21,24);
if(!$id){
$id = $modx->resource->get('id'); // get the current resource id if it was not passed
}
$resource = $modx->getObject('modResource', $id); // get the resource object
$parent = $modx->resource->get('parent'); // get the parent id from the resource object
$output = '';
if ($id == 5) {
$chunk = "listExhibitions";
}
if (in_array($parent, $exhibitions)) {
$chunk = "Exhibitions";
}
$output = $modx->getChunk($chunk);
return $output;
这将使用代码段调用中传递的ID,或者如果未传递ID则假定当前资源,并基于此从资源对象获取父ID。