0

我正在使用带有ProcessWire (v2.1.6)的Smarty 模板模块,我有两个模板和. 该模板有一个字段(类型为多页),引用教师可以教授的科目。在 Smarty 中访问它们很简单,如模板中所示:TeacherSubjectTeacherTeacher

{foreach from=$page->subjects item=subject}
    <li><a href="{$subject->url}">{$subject->title}</a></li>
{/foreach}

但是,该网站的用户还应该能够查看所有教师Subject

{foreach from=$pages->find('template=Teacher,subjects.title={$page->title}') item=teacher}
    <li><a href="{$teacher->url}">{$teacher->title}</a></li>
{/foreach}

这使用子字段选择器 subjects.title并尝试动态扩展操作数 ( {$page->title})。

首先我认为动态扩展是问题,但是如果我用常量字符串替换它,子字段选择器也不起作用(foreach 不会生成任何东西):

{foreach from=$pages->find('template=Teacher,subjects.title="History"') item=teacher}

有趣的是,非常相似的计数选择器确实有效:

{foreach from=$pages->find('template=Teacher,subjects.count > 1') item=teacher}
4

2 回答 2

1

我对 Smarty 一无所知,但{$page->title}无法扩展,因为它位于单引号字符串中。尝试使用双引号:

    $pages->find("template=Teacher, subjects.title={$page->title}")

有关详细信息,请参阅有关字符串中变量解析的 PHP 手册。

我还建议按subjects.id=$page->idor选择subjects.name=$page->name,因为这些字段将是唯一的并且不使用输出格式。

于 2016-03-02T14:59:27.070 回答
0

这是我使用的解决方法(但我仍然对实际解决方案感兴趣):

{foreach from=$pages->find("template=Teacher") item=teacher}
    {foreach from=$teacher->subjects item=subject}
        {if $subject->title == $page->title}
             <li><a href="{$teacher->url}">{$teacher->title}</a></li>
[...]
于 2016-02-23T20:25:24.690 回答