2012-10-10 180 views
1

我们计划用zf2和doctrine orm创建一个CMS。带zf2的模板系统?

实际上我们对我们的CMS模板化 我们希望我们的系统的工作原理与几个模板,并通过管理

和主题之间轻易改变创建一个新的模板应为最终用户开发人员很容易关注

我们想要一个意见或建议如何建立模板系统:

有一个核心模块,并有自己的PHTML 所以在何处存储THEME1 PHTML和那里有很多的子模块存储THEME2 phtmls ...

任何建议或意见,请 感谢

+0

不要创建自己的模板引擎,你迟早会后悔的。如果您想要非常全面的模板,请按照以下建议使用Twig。 – Aknosis

+0

在第一个回答中阅读我的意见 –

回答

1

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

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

此外,您还可以使用像资产这样的资产管理器在您的(模板)模块内部提供图像,CSS等。 (看看ZF2-assetic模块,我写了基于assetic我自己assetize模块适合我的需要...)

+0

好吧...每个模块都有他们的themeblue&themegreen&....文件夹? –

+0

阅读以前的答案,以得到我的意思是关于多个主题 –

+0

没有每个模块会有一个单一的主题,模块可以被命名为像ThemeBlue,ThemeGreen等... –

3

我鼓励你看看Twig,其最好的模板引擎到目前为止,我已经看到了:)这确实需要一些时间来学习语法的枝杈,但其良好值得,如果你看看你得到什么:)

我不能写评论,所以我写这个作为一个answare。 希望这有助于。相信我,枝条是要走的路。仔细看他的文档,了解如何使用它的更多具体细节!

编辑:

你正在试图解决的问题无关,与模板引擎。你可以用任何模板引擎来做到这一点。如果你愿意,即使使用普通的PHP也可以做到。

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

做到这一点,最简单的方法是有主题的文件夹,在这里你将存储的主题,如:

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

    - themeRose 
     ... 

现在,这是你把你所有的主题,每一个主题都有自己的文件夹图像,CSS,JS文件...

然后你会有用户,并且每个用户将能够选择和更改主题。 该信息将被存储在数据库中。您需要存储该用户Jack正在使用themeBlue。你可以做到这一点,只要你想。你可以将事件放在user_theme列的用户表中。

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

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

希望这回答你的问题。 祝你好运,我几乎疯了构建我的系统:)我最终编写了自己的PHP MVC Framework joust来完成我想要的任务。

+0

我看到了树枝..并看到了zf2树枝模块...我想知道如何使树枝现在加载模板文件为theme1或theme2或theme3 ...你明白我的意思了吗? –

+0

不会是一个主题? CSS文件?或者你正在建立一个CMS,用户可以建立他的网站,然后改变主题?每个主题都有不同的HTML/CSS文件? – otporan

+0

正是...不同的HTML/CSS /图像文件的主题...我的问题是关于文件结构和代码结构的主题/ twigfiles/cssfiles/...为cms主题 –

1

新浪,

我在做我的应用 - > 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/ 

上面的$视图模型注入一个变量到布局在themeurl中的public_html文件夹/主题/红/所有资产在layout.phtml红色

访问 - > themeurl;>在viewscript布局() - > themeurl;?>

我还在工作了我的动态视图。现在我有一个BaseController和所有的ActionController扩展它。它有一个render()函数来构建所需的视图,但不确定它的可扩展性,希望尝试一些占位符的想法。

application_settings_service是一个设置服务,它获取用于调用系统的任何域的设置,并构建可通过站点的任何服务感知部分访问的数组。那是一个完全不同的职位,它可能会或可能不会擦MVC偷看走错了路

我知道你的问题被标记答道只是想我要分享

埃里克