Zend Framework:来自数据库的元属性(关键字/描述)

时间:2010-08-25 19:50:46

标签: php mysql zend-framework meta-tags

我正在通过Zend Framework创建网站,我一直想知道这个问题很长一段时间......

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

获得数据后,它会将值限制在HeadMeta视图助手中。