ModX - 输出取决于resousce和父ID的id

时间:2015-10-19 19:38:16

标签: modx modx-revolution

我尝试使用ModX Revo根据资源ID和父ID输出某些元描述。

问题是Modx过滤器只能运行只有一个特殊标签(或id,或父ID,或其他东西),例如。

[[*id:is=`331`:then=`<meta name="description" content="[[*description]] — Page [[+page]]" />`:else=`<meta name="description" content="[[*description]]" />`]] 

在这种情况下,代码是 ID 。在我的情况下,我需要再添加一个声明,它必须像:

  • if [[* id]]是331然后......
  • 如果[[* parent]]为321则为..
  • 否则...

如何在不创建模板或块的情况下执行此操作? 我尝试了一些变种:

这只是不起作用

[[*id:is=`331`:then=`<meta name="description" content="[[*description]] — Page [[+page]]" />`:else=`[[*parent:is=`321`:then=`<meta name="description" content="[[*description]] - News Page" />`:else=`<meta name="description" content="[[*description]]" />`]]]] 

OR

这在331st资源上输出两个描述

[[*id:is=`331`:then=`<meta name="description" content="[[*description]] — Page [[+page]]" />`:else=``]] 
[[*parent:is=`321`:then=`<meta name="description" content="[[*description]] - News Page" />`:else=`<meta name="description" content="[[*description]]" />`]]

2 个答案:

答案 0 :(得分:0)

你最终会找到重复的描述,不适合SEO&amp;可能是更好的方式来达到你想要的地方。但那不是问题。

最好的办法是编写一个快速片段,在其中输出元标记:

[[!getMeta? &resourceid='[[*id]]' ]]
你的getMeta片段中的

<?php

$id = isset($scriptProperties('resourceid')) ? $scriptProperties('resourceid') : FALSE

if(!$id){ return; }

$output = '';

if($modx->getParent($id,1,'id') == 321){

     $output = '...your meta tag for the funny parent';

}else{

     if($id == 331){
          $output = '...your meta tag...';
     }else{
          $output = '...your alternate meta tag...';
     }

}

echo $output;

return;

这些方面的东西。 - 您应该创建块来输出任何HTML,或者您可以将块存储在属性集中。

答案 1 :(得分:0)

我建议查看pdoField或其他pdoTools片段之一。已有内置参数用于执行您似乎需要的过滤和条件。 pdoField DOCS

请务必查看常规pdoTools属性以及特定于pdoField的属性。