在我的页面中,我有一个内容块,我想在其中显示某些附加信息。多个页面的此信息可能相同,但项目也可以显示在一个特定项目上。
我正在考虑不同的方法,但在我看来,我所有的解决方案似乎都过于详尽,或者我无法想象没有更聪明的解决方案。
考虑下表(列名与我的原始数据库不同,我不在不同的表中使用相同的名称)我有内容。
fe_content:
+----+--------+----------+-------------------+
| id | page | pagelink | content |
+----+--------+----------+-------------------+
| 1 | page 1 | page_1 | Content of page 1 |
| 2 | page 2 | page_2 | Content of page 2 |
| 3 | page 3 | page_3 | Content of page 3 |
| 4 | page 4 | page_4 | Content of page 4 |
| 5 | page 5 | page_5 | Content of page 5 |
+----+--------+----------+-------------------+
我对附加数据的方法是这样的:
fe_blocks:
+----+---------+-------+---------+----------+--------------------+
| id | block | order | display | pagelink | content |
+----+---------+-------+---------+----------+--------------------+
| 1 | block 1 | 1 | always | | Content of block 1 |
| 2 | block 2 | 2 | always | | Content of block 2 |
| 3 | block 3 | 1 | single | page_1 | Content of block 3 |
| 4 | block 4 | 3 | always | | Content of block 4 |
| 5 | block 5 | 4 | single | page_3 | Content of block 5 |
+----+---------+-------+---------+----------+--------------------+
所以现在,当我想显示页面时,我使用:
$result = mysql_query("
SELECT content
FROM fe_content
WHERE pagelink = '"._mysql_real_escape_string($_aGET[0])."'
") or die(mysql_error());
$show = mysql_fetch_assoc($result);
echo("<div> ".$show['content']." </div>\n\n<aside>\n");
$result = mysql_query("
SELECT content
FROM fe_blocks
WHERE pagelink = '".mysql_real_escape_string($_aGET[0])."' or display = 'always'
ORDER BY order ASC
") or die(mysql_error());
while($show = mysql_fetch_assoc($result)){
echo("<p>".$show['content']."</p>\n");
}
echo("</aside>");
这给了我想要的块,但有一些障碍..
假设我请求page_1
,我的输出将是
<div> Content of page 1 </div>
<aside>
<p>Content of block 1</p>
<p>Content of block 2</p>
<p>Content of block 3</p>
<p>Content of block 4</p>
</aside>
虽然我想得到这个:
<div> Content of page 1 </div>
<aside>
<p>Content of block 3</p>
<p>Content of block 1</p>
<p>Content of block 2</p>
<p>Content of block 4</p>
</aside>
我想要的结果考虑到:
- 重要性。在特定页面上显示的项目的顺序应该被认为比总是显示的项目的顺序更重要(例如否决)。
- 几乎总是。也许有些项目应该显示在几乎所有页面上,除了少数。对于将来的更改,在数据库中插入一个带有适当页面链接的新行是不方便的,每个页面应该显示块。
有人对这种情况有什么想法吗?