我正在使用Smarty Templating模块ProcessWire(v2.1.6),我有两个模板Teacher
和Subject
。 Teacher
模板有一个字段(类型是多个页面),引用教师可以教授的主题。在Teacher
模板中可以看到,访问Smarty中的内容非常简单:
{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}
这会使用subfield selector subjects.title
并尝试动态扩展操作数({$page->title}
)。
首先我认为动态扩展是问题,但是如果我用常量字符串替换它,子字段选择器也不起作用(foreach不生成任何东西):
{foreach from=$pages->find('template=Teacher,subjects.title="History"') item=teacher}
有趣的是,非常相似的count selector确实有效:
{foreach from=$pages->find('template=Teacher,subjects.count > 1') item=teacher}
答案 0 :(得分:1)
我对Smarty一无所知,但{$page->title}
无法扩展,因为它位于单引号字符串中。尝试使用双引号:
$pages->find("template=Teacher, subjects.title={$page->title}")
有关详细信息,请参阅字符串中的PHP manual on variable parsing。
我还建议您选择subjects.id=$page->id
或subjects.name=$page->name
,因为这些字段是唯一的,不使用输出格式。
答案 1 :(得分: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>
[...]