【问题标题】:Zend Framework: Meta attributes (keywords/description) from databaseZend Framework:来自数据库的元属性(关键字/描述)
【发布时间】:2011-04-03 22:29:21
【问题描述】:

我正在通过 Zend 框架创建网站,我一直在思考这个问题......

假设您已经创建了最好的文章模块,并且您通常为每篇文章添加 meta_keywords/meta_description 数据库条目,这样当视图呈现时,它会使用在管理后端输入的数据填充相关元字段。

但是,想象一下动态内容较少的情况,到目前为止,您正在使用 HeadMeta() 视图助手向页面添加元关键字/元描述。

我想有一种方法来配置元关键字/元描述或数据库中每页的一些其他元元素。我一直在摸索什么是最好的解决方案,而不会增加过多的开销(因为您需要对网站中发生的每个操作执行查询)

我最初的想法是将元属性保存在数据库中的索引上,以便您可以快速检索每个操作的所有相关数据。我很快意识到通过 GET/POST 传递的参数可能会改变提供的结果,从而使结果集变得无关紧要。

所以也许我们也可以添加参数,但您可能希望同时忽略一些参数(因为不需要考虑 ?page=12 参数...)。也许在索引中添加另一个带有序列化参数的 varchar 列?

或者添加整个 URL 并执行 REGEXP 选择而不是常规选择? (我猜这可能是最慢的解决方案......)

还要注意,mySQL 对 UTF-8 索引的限制约为 varchar(200)(因此无法保存一个巨大的 URL)

有没有人想过解决这个问题的好方法?

【问题讨论】:

  • 你想要每个 url/view 的唯一元数据吗?
  • 我觉得应该是独一无二的。考虑到元数据实际上是在表达实际的 url/view 的事实。你还有别的想法吗?

标签: php mysql zend-framework meta-tags


【解决方案1】:

在我看来数据结构是正确的:元关键字/描述需要每篇文章。

最终,您需要从数据库中获取文章——无论是单篇文章还是一组“最佳”文章。所以在我看来,关键是通过某种服务器端缓存来保持最高性能。

通常我使用一个服务类 (see sample),它配置了 db 连接并缓存它检索到的数据。缓存生命周期可以设置得足够短,这样即使缓存的数据也“足够新鲜”。或者,您可以通过 cron 清除/填充缓存,以便前端请求始终获得缓存命中。或者您可以将缓存生命周期设置为永远,并且仅在管理端更新时清除/填充缓存;这种方法的可行性取决于更新的频率。

获得数据后,它会将值插入 HeadMeta 视图助手中。

【讨论】:

  • 缓存总是一个可以接受的选项。但这里真正的问题是如何将数据保存在数据库中动态较少的页面并有效地检索它们。我一直在考虑扩展 FrontController Action 以在数据库中执行查询并在之后为每个页面缓存它们......但是用 GET 参数保存 uri 的最佳方法是什么(考虑一些并活出一些)跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多