欢迎光临, 访客. 请先 登入註册一个帐号.
十月 18, 2018, 09:09:47 下午
19594 文章 在 3864 主题 由 4580 会员
最新註册会员: aa123aa1
LifeType 中文开发论坛  |  开发  |  核心补强  |  关于MVC在模版调用方法的问题请教 « 上篇主题 下篇主题 »
页: [1]
作者 主题: 关于MVC在模版调用方法的问题请教  (阅读 10722 次)
robin
新手见习
*
文章: 35


检视个人资料
« 于: 七月 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&amp;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">&nbsp;</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里面的值,并能对它们进行布局。

« 最后编辑时间: 七月 27, 2007, 05:07:37 下午 由 robin » 已记录
robin
新手见习
*
文章: 35


检视个人资料
« 回覆文章 #1 于: 七月 30, 2007, 01:31:54 下午 »

这个问题已经解决,呵呵!

现在在研究的问题是:

              怎样对部分ACTION的进行去缓存,包括本机的CACHE,以及服务器的SMARTY的CACHE,有研究过的可以告诉小弟一声吗?
已记录
markwu
系统管理员
超级会员
*****
文章: 3928


Mark Wu


检视个人资料 个人网站
« 回覆文章 #2 于: 七月 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
已记录

robin
新手见习
*
文章: 35


检视个人资料
« 回覆文章 #3 于: 八月 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了,不过这样里面调用的方法体也要更着改了,我会尽快试试效果。

再次谢谢!
已记录
markwu
系统管理员
超级会员
*****
文章: 3928


Mark Wu


检视个人资料 个人网站
« 回覆文章 #4 于: 八月 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
« 最后编辑时间: 八月 01, 2007, 03:38:52 下午 由 markwu » 已记录

页: [1]
LifeType 中文开发论坛  |  开发  |  核心补强  |  关于MVC在模版调用方法的问题请教 « 上篇主题 下篇主题 »
    前往: