Zend 框架:元属性集成
我正在尝试根据页面内容将一些元(采用以下格式)添加到页面的头部:
<meta property="og:title" content="some content" />
像这样使用 headMeta()->appendName :
$this->view->headMeta()->appendName('og:title', 'some content');
在header:
<meta name="og:title" content="some content" />
有没有办法让 Zend 生成带有 property 字段的 meta ?
谢谢
I'm trying to add some meta (in the following format) to the head of my pages according to the page content:
<meta property="og:title" content="some content" />
Using the headMeta()->appendName like this:
$this->view->headMeta()->appendName('og:title', 'some content');
generates the following in the header:
<meta name="og:title" content="some content" />
Is there a way to make Zend generates meta with the property field?
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
听起来您需要创建自己的视图帮助器,扩展标准 Zend Framework
HeadMeta
视图帮助器,并实现一个名为appendProperty()
的方法,模仿的行为>appendName()
。由于
appendName()
方法似乎是在__call()
方法中处理的,因此看起来您的扩展类可以简单地复制相同的__call() 形成父级,但将
preg_match()
中使用的模式更改为:'/^(?Pset|(pre|ap)pend|offsetSet)(? PName|HttpEquiv)$/'
到
'/^(?Pset|(pre|ap)pend|offsetSet)(?PName|HttpEquiv|Property )$/'
[作为旁注,可能值得向 ZF 跟踪器提出问题,建议从内联代码中提取此正则表达式模式,并将其放置为类的受保护成员。这样,子类(例如您的子类)可以简单地声明一个新模式,而不是“复制”如此多的父代码。但在我向他们提出建议之前,我必须先进行更多的观察和测试。]
无论如何,只是在黑暗中进行尝试......
更新:2010-12-17
我发现了一点需要更多才能使其发挥作用。您需要重写受保护的成员
$_typeKeys
和受保护的方法_normalizeType()
来处理新的“Property”类型。您的扩展类可能如下所示:
正如前面所观察到的,如果在
Zend_View_Helper_HeadMeta::__call()
中检查的preg_match()
模式被分解到一个名为$_callPattern
。那么扩展类就不必重复大部分__call()
方法。它只需重写受保护的成员$_typeKeys
和$_callPattern
并实现受保护的方法_normalizeType()
,如上所示。Sounds like you need to create your own view-helper, extend the standard Zend Framework
HeadMeta
view helper, and implementing a method calledappendProperty()
, mimicking the behavior ofappendName()
.Since the
appendName()
method seems to be handled in the__call()
method, it looks like your extended class could simply copy the same__call()
form the parent, but change the pattern used in thepreg_match()
from:'/^(?P<action>set|(pre|ap)pend|offsetSet)(?P<type>Name|HttpEquiv)$/'
to
'/^(?P<action>set|(pre|ap)pend|offsetSet)(?P<type>Name|HttpEquiv|Property)$/'
[As a side note, it might be worthwhile to file an issue with the ZF tracker, recommending that this regex pattern is pulled out of the inline code and placed instead it as a protected member of the class. This way, a subclass - like yours - could simply declare a new pattern, rather than "duplicating" so much of the parent code. But I'd have to look and test a bit more before I suggest that to them.]
Anyway, just a stab in the dark...
Update: 2010-12-17
I discovered that a bit more is required to make it work. You need to override the protected member
$_typeKeys
and the protected method_normalizeType()
to deal with your new "Property" type.Your extended class could look something like this:
As observed previously, this could be so much shorter if the
preg_match()
pattern checked inZend_View_Helper_HeadMeta::__call()
was factored out into a protected member called something like$_callPattern
. Then the extended class would not have to duplicate the bulk of the__call()
method. It would only have to override the protected members$_typeKeys
and$_callPattern
and implement the protected method_normalizeType()
, as shown above.