我想在我的Jekyll网站上使用Netlify CMS,我有这个布局:
{% for skills in page.skills %}
<div class="guide-skill">
<div class="guide-skill-fill">
{% for i in (1..15) %}
<div class="{% if skills.levels contains i %}fill{% endif %} skill-check"><p>{{ i }}</p></div>
{% endfor %}
</div>
</div>
{% endfor %}
以及我在使用此布局的文本编辑器中编写的页面的前端内容:
skills:
- levels:
- 1
代码工作正常,fill
类正确添加。
但是当我将Netlify CMS与列表小部件一起使用时,它会将字符串而不是数字返回到levels
列表,如下所示:
skills:
- levels:
- '1'
所以代码不起作用,如何让它返回数字?
i
,但它给了我一个错误valueType : "int"
,无效- label: "Hero Skills"
name: "skills"
widget: "list"
required: false
fields:
- {label: "Skill Number", name: "number", widget: "number"}
- {label: "Levels", name: "levels", widget: "list"}
答案 0 :(得分:6)
内置小部件都不能输出数字列表(不是字符串),但是当内置小部件不起作用时,您总是可以使用自定义小部件。自定义小部件是React组件,我们为那些不使用模块系统的人发布全局挂钩(createClass
,h
)。更多文档:https://www.netlifycms.org/docs/custom-widgets/#registerwidget
对于您的特定情况,您可以从文档示例中修改“类别”窗口小部件,以仅处理数字并输出它们。在Netlify CMS的index.html
文件的正文标记的末尾添加此内容:
<script>
var NumberListControl = createClass({
handleChange: function(e) {
var value = e.target.value.replace(/[^0-9, ]/, '');
this.props.onChange(value.split(',').map(function(val) {
var trimmed = val.trim();
return trimmed ? parseInt(trimmed, 10) : trimmed;
}));
},
render: function() {
var value = this.props.value;
return h('input', {
type: 'text',
value: value ? value.join(', ') : '',
onChange: this.handleChange,
className: this.props.classNameWrapper,
});
}
});
var NumberListPreview = createClass({
render: function() {
return h('ul', {},
this.props.value.map(function(val, index) {
return h('li', {key: index}, val);
})
);
}
});
CMS.registerWidget('number_list', NumberListControl, NumberListPreview);
</script>
答案 1 :(得分:3)
使用NetlifyCMS 'Number' widget允许将数字写为字符串或数字值。
如果您的前端问题是字符串值,则应使用valueType
:
- label: "Hero Skills"
name: "skills"
widget: "list"
required: false
fields:
- {label: "Skill Number", name: "number", widget: "number", valueType: "int", default: 1}
- {label: "Levels", name: "levels", widget: "list"}
答案 2 :(得分:0)
难道你不能只使用数学过滤器强制将此字符串转换为数字吗?
{{ yourstring | divided_by:1 }}
来源:https://help.shopify.com/themes/liquid/filters/math-filters#divided_by
<强>更新强>
由于之前的解决方案不易实现,我选择了另一个角度来解决问题。以下代码不假定级别是数字:
{% for skills in page.skills %}
<div class="guide-skill">
<div class="guide-skill-fill">
{% assign all_levels = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15" | split: ',' %}
{% for level in all_levels %}
<div class="{% if skills.levels contains level %}fill{% endif %} skill-check"><p>{{ level }}</p></div>
{% endfor %}
</div>
</div>
{% endfor %}