PHP'像widget'代码设计

时间:2009-01-13 11:06:17

标签: php widget

我有一个用PHP编写的原型网站。最近我重写了代码,将逻辑与布局和数据库操作分开。所以现在我有类似MVC代码设计的东西。

现在困扰我的是,在MVC中我将拥有许多文件,并且当与其他文件(模型+视图+控制器)结合时,每个文件都会显示。所以我发现创建类似我的MVC部件的小部件会很有用。

例如,当我拥有MVC产品视图时,我创建的PHP文件以这种方式组合MVC部件文件以显示基于GET值的产品,我将传递给这个新的PHP文件。

我将以这种方式实现的是,任何小部件,网站的子部分都可以单独查看,并与其他部分分开使用。所以它会像小部件或类似Firefox浏览器设计。

因此,我可以单独测试网站的每个部分,而不是仅将这些部分组合到当前的实际网站页面设计中。因此,用户测试也会更容易,并且演示文件文件非常简短易懂。

我想知道你怎么看待它。我不想陷入设计中的任何漏洞,我认为这是将来维护网站代码变得容易的重要时刻。

我说错了吗?

2 个答案:

答案 0 :(得分:1)

  

MVC我会有很多文件,当与其他文件(模型+视图+控制器)结合使用时,每个文件都会显示一些文件

这听起来好像没有让MVC模型正确。只有视图具有内容或“显示某些内容”。

基于此,您可以创建仅创建内容小部件的小部件的操作,然后可以将其组合到您的布局中。

我建议您阅读Zend_Layout Quick Start

答案 1 :(得分:1)

您的问题的答案是查看构图

我建议您将整个屏幕分成更小的部分:顶部栏,二级导航栏,产品列表,预览区域等。这些可以由控制器中的单独视图,视图助手或其他方法提供。然后,控制器操作将使用简单的HTML布局组合成单个屏幕。

EG。对于静态的顶栏,这可能是专门的视图。对于动态的产品列表,可以是提供复杂视图的控制器方法getProductsList($categoryId)。产品预览可以通过视图助手提供。请参阅以下示例:

// inside class ProductsController
public function index($categoryId, $productId = null) {

    // specialised view
    $topBar = new TopBarView();
    $topBar->selected = 'products';

    // helper method
    $list = $this->getProductsList($categoryId);

    // helper object
    $previewHelper = new PreviewHelper($productId);
    $preview = $previewHelper->getView();

    // view composition
    $view = new View('path/to/template.tpl');
    $view->add($topBar);
    $view->add($list);
    $view->add($preview);
    return $view;

}

这只是一个说明组合如何运作的例子。

拥有传递窗口小部件(即产品列表)的方法的隐藏好处是可以重用它来支持Ajax。更改类别需要使用新类别ID调用getProductsList方法。