0

在我的页面中,我有一个内容块,我想在其中显示某些附加信息。多个页面的此信息可能相同,但项目也可以显示在一个特定项目上。

我正在考虑不同的方法,但在我看来,我所有的解决方案似乎都过于详尽,或者我无法想象没有更聪明的解决方案。

考虑下表(列名与我的原始数据库不同,我不在不同的表中使用相同的名称)我有内容。

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>

我想要的结果考虑到:

  • 重要性。在特定页面上显示的项目的顺序应该被认为比总是显示的项目的顺序更重要(例如否决)。
  • 几乎总是。也许有些项目应该显示在几乎所有页面上,除了少数。对于将来的更改,在数据库中插入一个带有适当页面链接的新行是不方便的,每个页面应该显示块。

有人对这种情况有什么想法吗?

4

3 回答 3

0

你有页面,你有块。如果您希望一个块显示在多个页面上,您应该创建一个新表来帮助您存储实体之间的 n:m 连接。那就是您将存储特定块在特定页面上的顺序的地方。基本上 - 标准化您的数据。

于 2012-04-11T09:03:26.917 回答
0

像这样更改您的第二个查询语句,

$result = mysql_query("
SELECT content
FROM fe_blocks
WHERE pagelink = '".mysql_real_escape_string($_aGET[0])."' or display = 'always'
ORDER BY order ASC, display ASC ") or die(mysql_error());
于 2012-04-11T09:05:26.053 回答
0

您可以这样订购:

ORDER BY order ASC, display ASC

所以订单号相同,“总是”在前面

或者如果您想更加重视“展示”

ORDER BY display ASC, order ASC
于 2012-04-11T09:01:10.030 回答