2009-12-09 37 views
0

我正在将我的网站从一些旧的意大利面条代码升级到一些漂亮,干净的自定义MVC结构(并在此过程中获得乐趣)。MVC功能 - 在视图中可以吗?

在我的页面上显示博客列表,我有一个函数可以帮助我为一个链接动态创建HREF - 通过$ _GET跟踪应用过滤器...很难解释......但这里是:

/* APPLY BROWSE CONTROLS/FILTERS 
| this function reads current $_GET values for controlling the feed filters, 
| and replaces the $value with the desired new $value 
*/ 
function browse_controls($key,$value=null,$ret='url') { 

    // find current control settings 
    $browse_controls = array(); 
    if(array_key_exists('browse',$_GET)) { $browse_controls['browse'] = $_GET['browse']; } 
    if(array_key_exists('display',$_GET)) { $browse_controls['display'] = $_GET['display']; } 
    if(array_key_exists('q',$_GET)) { $browse_controls['q'] = $_GET['q']; } 

    // replace desired setting 
    if($value) { 
     $browse_controls[$key] = $value; 
    }else{ 
     unset($browse_controls[$key]); 
    } 

    // build url 
    $url = ABS_DOMAIN . 'sale/'; 
    if(!empty($_GET['cat'])) { $url .= $_GET['cat'] . '/';} 
    if(!empty($_GET['sub'])) { $url .= $_GET['sub'] . '/';} 
    $url .= '?' . http_build_query($browse_controls); 
    return $url; 
} 

我可以简单地调用此查询:

<a href='<?php echo browse_controls('browse',$prev_page); ?>' class="crumb">Previous Page</a> 

我怎样才能做到这一点同样与MVC结构,呈现和逻辑的完全分离。我的模板中是否允许使用函数?

帮助!

回答

1

我不确定你的特定框架,但是在Ruby on Rails和ASP.NET MVC中,这种东西是帮助类。他们是UI的关注点。所以现在逻辑在这里。只需格式化,转换,构建HTML。你可以把它们放在模板附近,或者给它们单独的目录。

我可以推荐的是检查与您的框架绑定的示例。他们通常对框架有很好的了解。

+0

嗯,这很酷,我还没有听说过助手类之前...演示文稿课叫他们?什么叫他们? – johnnietheblack 2009-12-09 01:31:44

+0

他们被称为模板 – 2009-12-09 01:37:40

2

我用下面的测试:是代码我很想在“展示空间”决定什么呈现,或如何呈现它来写?如果答案是什么,那么感觉更像业务逻辑,可能属于模板之外。如果它是如何来呈现它,那么它属于模板(或相关的支持函数)。

例如,假设您为某些用户提供10%的折扣。计算折扣前后的具体价格显然是业务逻辑。测试是否有折扣,然后以红色显示它是表示逻辑。

当然,规则总是有例外,但这些应该被认可,您应该在注释中专门说明为什么您是例外。

+0

那里甜蜜的好逻辑......你认为哪个应用于动态构建href的html?它不知何故似乎,但什么和如何对我..哈哈 – johnnietheblack 2009-12-09 01:32:33

+0

我所有的对象都有一个url()方法,返回该对象的规范URL。我从模板中调用它没有问题。但它只返回* URL,而不是完全格式化的A标签。 – 2009-12-09 16:36:38

相关问题