主題: 关于MVC在模版调用方法的问题请教 作者: robin 於 七月 27, 2007, 04:34:45 下午 我在SUMMARY模块,看如下的模版写法:
{foreach from=$users item=user} {include file="summary/user.template"} {/foreach} {if $user->hasPicture()} {assign var=picture value=$user->getPicture()} <img src="{$picture->getPreviewLink()}" width="60" height="80" class="postgrav" /> {else} <img src="templates/summary/nouser.gif" class="postgrav" width="60" height="80" alt="{$user->getUsername()|strip_tags}" /> {/if} <h3><a href="?op=UserProfile&userId={$user->getId()}">{$user->getUsername()}</a></h3> <div class="subtitle"> <b>{$locale->tr("blogs")}:</b> {assign var=userBlogs value=$user->getBlogs()} {foreach from=$userBlogs item=userBlog name=userBlogsLoop} {assign var=urlGen value=$userBlog->getBlogRequestGenerator()} <a href="{$urlGen->blogLink()}">{$userBlog->getBlog()}</a>{if !$smarty.foreach.userBlogsLoop.last}, {/if} {/foreach} </div> <div class="footer">{$user->getAboutMyself()|strip_tags}</div> <div class="clearleft"> </div> ----------------------------- 问题是:我发现这里调用了$user->getAboutMyself,$user->getBlogs()等等的方法,但是这些是userinfo的方法,可是我在这个模版相关的models,和view里,都没有new这个类,所以这是通过什么样的方法来调用的呢? 我很想了解这是怎么写的,因此,我现在在研究MVC,我发现要用SMARTY模版来显示一个多维数组里的指写信息有些复杂,我不想用先生成一个ID数组,再FOREACH这个ID数组,把用ID来调用方法来重新取得要的值。因为我发现LIFETYPE不是这么做的,但是我又找不出它是怎么做的。 另外不知道用SMARTY来处理是否可行,比如一个多维数组: $fruits = array( array("a"=>"orange","b"=>"banana","c"=>"apple"), array("a"=>"banana","b"=>"orange","c"=>"apple"), array("a"=>"orange","b"=>"banana","c"=>"apple"), ); 怎么样用foreach里面的值,并能对它们进行布局。 主題: Re: 关于MVC在模版调用方法的问题请教 作者: robin 於 七月 30, 2007, 01:31:54 下午 这个问题已经解决,呵呵!
现在在研究的问题是: 怎样对部分ACTION的进行去缓存,包括本机的CACHE,以及服务器的SMARTY的CACHE,有研究过的可以告诉小弟一声吗? 主題: Re: 关于MVC在模版调用方法的问题请教 作者: markwu 於 七月 30, 2007, 01:58:26 下午 1. user 是從 users 來的,而 users 是 userInfo 的 collection/array, 這是從 /class/summary/view/summaryuserlistview.class.php 所 assign 進來的。
2. 基本上 action 不會有 cache,而是 view 才有 cache。你可以看一下 /class/summary/view/summarycachedview.class.php 這個 class,基本上他會依造你所傳進來的參數進行 md5 的運算,產生單一 cache 檔案。當 view 已經被 cache 過,下一次就不會再去產生 cache。 所以你的 view 要改成cache 版本,就要繼承 SummaryCachedView 而非 SummaryView。 Mark 主題: Re: 关于MVC在模版调用方法的问题请教 作者: robin 於 八月 01, 2007, 02:44:55 下午 1. user 是从 users 来的,而 users 是 userInfo 的 collection/array, 这是从 /class/summary/view/summaryuserlistview.class.php 所 assign 进来的。 2. 基本上 action 不会有 cache,而是 view 才有 cache。你可以看一下 /class/summary/view/summarycachedview.class.php 这个 class,基本上他会依造你所传进来的参数进行 md5 的运算,产生单一 cache 档案。当 view 已经被 cache 过,下一次就不会再去产生 cache。 所以你的 view 要改成cache 版本,就要继承 SummaryCachedView 而非 SummaryView。 Mark 谢谢强哥回复偶的提问: [1],偶对这个 collection/array,还是不很了解,这么说,那些方法,只是从每一个数组中取得所要的值,不是再根据ID从数据库取了吧?比如:{$user->getUsername()}。 我现在是这样来解决的:首先DAO里生成一个总数组,然后在ACTION里传到一个变量,再在SMARTY通过以下的跑出来: --------------------- {section name=question loop=$Questions} <li class="item"> 姓名: {$Questions[question].name}<br> 博客: {$Questions[question].blogaddress}<br> 问题: {$Questions[question].message}<br> </li> {/section} ---------------------- [2]对于第二个问题,就也是我要这个OP的VIEW没有CACHE的说,就继承SUMMARYVIEW了,不过这样里面调用的方法体也要更着改了,我会尽快试试效果。 再次谢谢! 主題: Re: 关于MVC在模版调用方法的问题请教 作者: markwu 於 八月 01, 2007, 03:33:41 下午 這就要看你的寫法了。
在 LifeType 中,每一個類別 (post, comment, link, xxx ) 都有一個相對的 model,在這個 model 中會定義如何去存取,更新這些物件。另外每一個類別,也都有類別的定義檔,去定義如何存取物件內的屬性。 所以所以如果從 model 中取出的是一個 userInfo 的 array,我們假設 $users 好了。我們就必須用 $userInfo 的方法 (method) 來取用這些屬性。 所以從你的程式中,我看不出來,你是怎麼把 Questions 取出來的。假設,他只是個資料 array,而非是 obejct 的 array,那麼你這樣寫就對了。 另外 Questions 他在Action/View 中被取出後,必須要 assign 到 view 的變數中,透過 setValue('Questions', $questions); 。 這樣在模版終究可以透過 $Questions 來取用你從 model 中所取出的資料或是 obecjt 的 array. Mark |