我在w3c验证器的产品视图页面中出错
我的产品是可下载的产品。我有该产品的自定义选项
当我在w3c验证器中验证测试产品页面时,它会显示如下错误
没有属性“价格”
...“id =”options_21_2“value =”27“price =”0“/>
错误行:
<ul id="options-21-list" class="options-list"><li><input type="checkbox" class="checkbox product-custom-option" onclick="opConfig.reloadPrice()" name="options[21][]" id="options_21_2" value="27" price="0" /><span class="label"><label for="options_21_2">Test Product</label></span></li></ul>
帮助解决此问题。
答案 0 :(得分:1)
问题在于,price
是自定义属性。尽管几乎所有浏览器都可以按照您发布的方式使用它,但不有效的(X)HTML属性,例如id
或name
。
W3C验证程序根据文档<!DOCTYPE .. >
declaration中的DTD(文档类型定义)验证您的源代码。
Magento CE / EE 1.x版本默认使用XHTML 1.0 Strict DTD。
DTD声明文档必须遵循哪些规则才能对给定的文档类型有效。它定义了允许哪些元素类型,特定元素可以具有哪些属性,可以使用哪些实体等等。
如果您检查上面的链接DTD,您会发现文件中的任何位置都没有定义price
属性。
这就是为什么W3C验证器正确地抱怨.. there is no attribute "price"
。
主要关于如何处理这种情况,我想到以下三件事:
您可以简单地忽略此(并且仅限于此)特定类型的W3C验证错误。
我猜这是大多数开发人员所做的“..没有属性attr_name”验证错误,当他们已经双重检查时,它是一个真正使用的自定义属性,只有W3C验证失败(使用HTML5之前的DTD),但是否则完全正常。
您可以扩展XHTML 1.0 Strict DTD,为特定元素添加自定义属性。
有关如何使用内部子集为price
元素添加自定义input
属性的示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[
<!ATTLIST input price CDATA #IMPLIED>
]
>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Test</title>
</head>
<body>
<p>
<input type="checkbox" class="checkbox product-custom-option" onclick="opConfig.reloadPrice()"
name="options[21][]" id="options_21_2" value="27" price="0" />
</p>
</body>
</html>
包含此内部子集,W3C验证程序将无错误地进行验证。
但,当内部子集发挥作用时,大多数主要浏览器都会渲染丑陋的]>
。
也许吧,因为他们不支持嵌套标签(根本没有,或者说是正确的),或者他们一旦在<!DOCTYPE .. >
找到正式的DTD就切换到他们的硬连线DTD,我无法分辨准确。
要避免使用]>
,您可以使用原始DTD作为基础构建自定义DTD ,使用自定义属性对其进行扩展,并更改!<DOCTYPE .. >
以使用该属性自定义DTD。
使用自定义DTD的关键是,即使技术上正确和,浏览器也不再渲染丑陋的]>
,您也不能再使用W3C验证器了。它不支持自定义DTD。
因此,如果必须遵守W3C,您唯一的选择就是保持内部子集。但是你仍然需要以某种方式摆脱丑陋的]>
。要实现这一点,您可以使用一些CSS,例如与此类似:
html {
color: transparent;
}
请注意,扩展DTD可能会导致大量工作。您需要扩展自定义属性可能出现的所有元素类型。当然,您需要为每个自定义属性执行此操作。
data-*
属性您可以重写Magento模板以使用HTML5及其data-*
attributes,这样您只需使用data-
为自定义属性名称添加前缀,即可使其完全有效。
但是,由于将Magento 1.x从XHTML 1.0严格转移到HTML5会导致大量复杂的工作,我不认为这是一个选项。
Afaik,即使是Magento 2.x也会不切换到HTML5,但继续使用XHTML 1.0 Strict。
也许出于同样的原因^^