使用zf2的模板系统?

时间:2012-10-10 17:56:28

标签: doctrine-orm zend-framework2 php

我们计划用zf2和doctrine orm创建一个CMS。

实际上我们关心的是我们的cms模板 我们希望我们的系统可以使用多个模板,并通过admin

在主题之间轻松切换

并且最终用户开发人员应该可以轻松创建新模板

我们需要建议或建议如何构建模板系统:

有一个核心模块,有很多子模块都有自己的phtml 那么在哪里存储theme1 phtml以及在哪里存储theme2 phtmls ...

请提出任何建议或意见 感谢

3 个答案:

答案 0 :(得分:3)

我鼓励你看一下Twig,它是我迄今为止看到的最好的模板引擎:)它确实需要一些时间来学习Twig语法,但如果你看看你得到的东西它是值得的:)

我还不能写评论,所以我把它写成了一个answare。 希望这可以帮助。相信我,Twig是要走的路。 Joust查看他的文档,了解如何使用它的更具体细节!

编辑:

您尝试解决的问题与模板引擎无关。您可以使用任何模板引擎执行此操作。如果需要,甚至可以使用普通的PHP来完成它。

我构建了一个Web应用程序,用户可以在其中注册,获取自己的子域,并在那里构建他们的网页。更改主题,编辑文本,添加页面。简单的CMS功能。

最简单的方法是使用themes文件夹存储主题,如下所示:

themes/
    - themeBlue
        - css/
        - images/
        - js/
        - html or views/

    - themeRose
        ...

现在,您可以放置​​所有主题,每个主题都有自己的文件夹,包含图片,css,js文件......

然后你会有用户,每个用户都可以选择和更改主题。 该信息将存储在数据库中。您需要存储Jack正在使用themeBlue的用户。你可以随心所欲地做到这一点。您可以将此事件放在user_theme列等用户表中。

现在当有人访问网站时,您首先查询数据库以查看该用户或网络创建者使用的主题。然后从当前主题文件夹加载所有文件。并使用存储在数据库中的数据填充html文件,就像在任何其他CMS中一样。

这是最简单的实现。例如,您可以将css和html文件存储在数据库中:)

希望这能回答你的问题。 祝你好运,我几乎疯狂地构建了我的系统:)我最终编写了自己的PHP MVC框架来完成我想要的工作。

答案 1 :(得分:1)

如果激活application.config.php中具有相同视图和布局(相同文件夹结构和文件名)的另一个模块,则在核心模块之后加载视图脚本和布局时,它们将自动使用。

所以你可以简单地使你的application.config.php动态加载只包含视图文件夹的活动模板模块。这将是一个简单而有效的解决方案,没有任何其他库。

另外,您可以使用资产管理器(如assetic)在您的(模板)模块内部提供图像,CSS等。 (看看zf2-assetic-module,我根据资产来编写自己的assetize-module以满足我的需求......)

答案 2 :(得分:1)

新浪,

我在我的Application-> Module.php onBootstrap

中这样做
    $ss = $serviceManager->get('application_settings_service');
    $settings = $ss->loadSettings();

    $serviceManager->get('translator');
    $templatePathResolver = $serviceManager->get('Zend\View\Resolver\TemplatePathStack'); 
    $templatePathResolver->setPaths(array(__DIR__ . '/view/'.$settings['theme'])); // here is your skin name 

    $viewModel = $application->getMvcEvent()->getViewModel();
    $viewModel->themeurl = 'theme/'.$settings['theme'].'/';

在这种情况下,我在我的视图文件夹

中有这个结构
    view/
       default/
          application/
          error/
          layout/
          zfcuser/
       red/
          application/
          error/
          layout/
          zfcuser/

上面的$ viewmodel将一个变量注入到public_html文件夹/ theme / red /中的themeurl的布局中,所有资产都是红色的

在layout.phtml中访问 - > themeurl;?>在viewcript布局() - > themeurl;?>

我还在研究动态视图。现在我有一个BaseController,所有的ActionControllers都扩展了它。它有一个render()函数,可以构建所需的视图,但不确定它是否可以扩展,希望尝试一些占位符的想法。

application_settings_service是一个设置服务,它获取用于调用系统的任何域的设置,并构建可通过站点的任何服务感知部分访问的数组。这是一个完全不同的帖子,它可能会或可能不会摩擦MVC错误的方式

我知道你的问题已被标记为已回答,我想会分享

埃里克