因此,我正在尝试做一个非常简单的事情:检查一个数字是否等于另一个数字-但由于某种原因,它只是不想工作。

$exhibitions = "20,21,24";
$parent = "[[*parent]]";
$id = "[[*id]]";

if ($id == 5) {
    $chunk = "listExhibitions";
}
if (stripos($exhibitions, $parent) == TRUE) {
    $chunk = "Exhibitions";
}
return "[[$" . $chunk . "]]";


这是我要开始工作的第一个“如果”。如果我把!在==之前,然后页面显示“ listExhibitions”块-但是,当id等于5时,我需要这样做。我也尝试在数字周围加上''。另外,当我简单地输出$ id时,数字5也会出现。

我究竟做错了什么?

最佳答案

您期望在这里发生的事情是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。

关于php - 为什么我简单的“如果”不起作用?的PHP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51768262/

10-11 03:26
查看更多