2015-07-20 107 views
0

从数据库设计的角度来看,我有一个复杂的项目。页面大约有10-15种不同的布局,其中一些与图像是静态的,一些是着陆页面,一些需要在顶部有不同动作的封面图像等等。每个布局都是.php文件,它处理每种布局的逻辑。页面模块具有不同的结构和布局?

贝娄是几页

Home Page 
    > Top cover 
    > Text for banner 1 
    > Features 
    > feature 1 
    > feature 2 
    > How it works 
    > step 1 
    > step 2 
    > Call to action 
Special Product Page 
    > Top cover 
    > text for top cover 
    > Features 
    > feature 1 
    > feature 2 
    > feature 3 
    > How it works 
    > step 1 
    > step 2 
    > step 3 
Exercise 
    > Category 1 
    > Sub Category 
     > exercise 1 
     > exercise 2 
    etc ... 

我可以很容易地添加HTML的每一个页面在页面的身体,摆脱一些子页面的结构,但我的客户没有任何HTML知识和我恐怕当他编辑或创建新页面时,他会打破设计,特别是那些具有功能和如何工作的页面。我想让他尽可能简单地使用wysiwyg编辑器创建/编辑页面。更糟糕的是,它要求用户可以搜索所有页面,我通过index_page字段暂时修复了这些页面。因此,包含功能和步骤的网页无法获得索引。

我有一个数据库表pages与以下字段parent_id, layout, title, slug, body, index_page。我使用laravel和mysql数据库。

另一个问题是,如果您访问home-page/top-cover/text-for-banner1的url,它将显示该页面的内容,而不应显示该页面的内容。

对于我该如何设计数据库或采取什么方法,您有什么建议吗?

+0

有太多可能的答案,或者对于这种格式,好的答案太长。请添加详细信息以缩小答案集或隔离几个段落中可以回答的问题。 – Epodax

+0

@Epodax你能举一个例子吗? – lesandru

回答

0

我想说你想要一个页面表格/模型,它定义了页面标题以及它在网站层次结构中的位置。然后,页面可以有许多“节点”,其中节点可以是文本区域,轮播,功能列表等。然后,您的CMS应根据页面被选择进行编辑时页面所具有的节点来确定要显示哪些输入。

在搜索方面,我会添加一个getContentAsPlainText()方法,该方法只是简单地获取所有页面节点的纯文本表示形式,这是您将用于索引的内容。所以当你执行搜索时,它会搜索那些文本的斑点。您可以在页面模型的saving事件上放置侦听器,以便在保存时将纯文本版本编入索引。

+0

请您详细介绍一下节点部分?我会创建一个关系表pages_nodes?并将节点与它所属的页面相关联? – lesandru

+0

一个页面会有很多节点。 –

+0

谢谢,我会看到我得到的,一旦它证明是一个好的解决方案,我会接受答案;) – lesandru