2010-07-17 53 views
4

第一次使用在这里创建这些对象的临时数组,我希望我解释不够好......PHP/Smarty的 - 如何检查与特定的值对象的数组,并

PHP/Smarty的,我m正在页面的一部分上显示与常规页面或该页面上的各个位置相关的注释的项目符号列表。有些地方没有笔记。喜欢的东西:

一般

  • 注1

纽约

  • 注2:
  • 注3

波士顿

  • 注4

我有一个分配给我的工作的.tpl和由UI类填充两个数组:$场所和$笔记

$地方包含地方的对象,每一个独特的由place_id

$笔记包含唯一标识的音符对象,每个对象的可能会或可能不会有place_id的属性

这里的一个就是我想:

{if (**ANY NOTES EXIST IN $notes WITH NO place_id**)} 
    <ul id="list-general"> 
     <h4>General</h4> 
     {foreach from=**[NOTES WITH NO place_id]** item=note} 
      <li id="note-{$note->get_id()}">$note->get_text()</li> 
    {/foreach} 
    </ul> 
{else} 
    <ul id="list-general" class="hide"> 
     <h4>General</h4> 
    </ul> 
{/if} 

{foreach from=$places item=place} 
    {assign var=curr_place_id value=$place->get_id()} 
    {if (**ANY NOTES EXIST IN $notes WHERE place_id == $curr_place_id**)} 
    <ul id="list-{$curr_place_id}"> 
      <h4>{$place->get_name()}</h4> 
      {foreach from=**[NOTES WHERE place_id == $curr_place_id]** item=note} 
       <li id="note-{$note->get_id()}">$note->get_text()</li> 
     {/foreach} 
     </ul> 
    {else} 
     <ul id="list-{$curr_place_id}" class="hide"> 
      <h4>{$place->get_name()}</h4> 
     </ul> 
    {/if} 
{/foreach} 

我是很新,所有这一切,我很难与CAPS ...所以,我的问题是:什么是评估两个不同数组中的对象的属性,并可能建立临时阵列只包含我需要的笔记。

(如果你想知道,我创建隐藏节点,所以我可以通过JavaScript访问他们,不必担心顺序)

回答

2

虽然我猜这是可以做到的在Smarty中,这看起来似乎是在混合您的业务逻辑和表示逻辑。就个人而言,我会考虑在调用此模板的PHP中将数组拼接成两部分(常规和地方)。

$placesNotes = array(); 
$generalNotes = array(); 

array_filter($notes, function($note) { 
    global $placesNotes, $generalNotes; 
    if($note->get_place_id() == null) { 
     $generalNotes[] = $note; 
    } else { 
     $placesNotes[$note->get_place_id()][] = $note; 
    } 
}); 

(注:它使用了一个匿名函数,所以> 5.3唯一的 - 如果你想这在旧版本上运行,以它自己的移动功能命名的功能和使用回叫类型)

你然后用两个数组轻松循环,使用Places-loop中的isset($ notes_places。$ curr_place_id)来查找该地点是否有任何音符。

此外,您忘记了get_text()调用周围的{}。

我刮起了快速出样,在被发现:http://gist.github.com/479392 - 希望帮助?

BTW:你提的问题是非常明确的,并解释你想要做什么,甚至后面详细说明你在做什么决定时,当时并不明显 - 因此对于一个第一次:很好的问题!

+0

感谢kander,有道理。今天早上我会试一试。 – byron 2010-07-17 16:41:34

+0

工程就像一个魅力。仅供参考,我使用了PHP中的foreach而不是arrayfilter ..只是无法使arrayfilter工作。非常感谢你的帮助。 – byron 2010-07-17 18:23:46

+0

不客气:) – kander 2010-07-17 22:36:02

相关问题