我们计划用zf2和doctrine orm创建一个CMS。
实际上我们关心的是我们的cms模板 我们希望我们的系统可以使用多个模板,并通过admin
在主题之间轻松切换并且最终用户开发人员应该可以轻松创建新模板
我们需要建议或建议如何构建模板系统:
有一个核心模块,有很多子模块都有自己的phtml 那么在哪里存储theme1 phtml以及在哪里存储theme2 phtmls ...
请提出任何建议或意见 感谢
答案 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错误的方式
我知道你的问题已被标记为已回答,我想会分享
埃里克