使用锚点构建一页导航?
Bulding One page nav with anchors?
不幸的是,我无法为我的整页部分小部件构建导航。
我正在为
中的部分本身扩展 apostrophe-pieces
lib/modules/sections/index.js
module.exports = {
extend: 'apostrophe-pieces',
name: 'section',
label: 'Section',
pluralLabel: 'Sections',
contextualOnly: false,
addFields: [
// Main Fields
{ name: 'title', label: 'Section Title', type: 'string', help: 'Select Title' },
{ name: 'color', label: 'Section Color', type: 'color', help: 'Select color' },
// Backgrounds
{
name: '_image',
type: 'joinByOne',
withType: 'apostrophe-image',
label: 'First Section Image',
filters: {
projection: {
attachment: true,
description: true,
title: true
}
}
}
],
// Fields Arrangement
arrangeFields: [
{ name: 'basics', label: 'Basics', fields: [ 'title', 'color' , '_image' ] },
]
};
并使用 apostrophe-pieces-widgets
显示 home.html
上的部分
lib/modules/sections-widgets/index.js
module.exports = {
extend: 'apostrophe-pieces-widgets',
name: 'sections',
label: 'Sections Widget',
};
这是小部件本身:
lib/modules/sections-widgets/views/widget.html
{% for piece in data.widget._pieces %}
<div class="section" id="{{ piece.title | lower }}" style="background-color:{{ piece.color }};
{%- if data.page._image.attachment -%}
background-image: url({{ apos.attachments.url(data.page._image.attachment, { size: data.options.size or 'full' }) }})
{% endif %}
">
<div class="main-content container">
{%- if piece.title -%}
<div class="header"><h3>{{ piece.title }}</h3></div>
{%- endif -%}
{{ apos.area(piece, 'a', {
limit: 2,
widgets: {
'double': {
controls: {
movable: false,
removable: true,
position: 'top-right'
}
}
}
}) }}
</div>
</div>
{% endfor %}
到目前为止一切正常,但我想显示一个导航,它在单独的位置显示每个部分,例如 home.html
{% block beforeMain %}
{% include "sections-widgets:nav.html" %}
{% endblock %}
这是导航 html 文件:
lib/modules/sections-widgets/views/nav.html
<div class="nav">
<nav style="background-color:{{ data.page.nav_color }};">
<div class="nav-wrapper z-depth-2">
<a href="{{ data.page._url }}" class="brand-logo"><h1>{{ data.page.title }}</h1></a>
<a href="#" data-target="mobile" class="sidenav-trigger"><i class="material-icons">menu</i></a>
<ul class="nav-activator right hide-on-med-and-down">
// NOT WORKING PART
{% for piece in data.widget._pieces %}
<li><a href="#{{ data.piece.title | lower }}">{{ data.piece.title }}</a></li>
{% endfor %}
// END OF NOT WORKING PART
<li><a href="#contact">Contact</a></li>
</ul>
</div>
我已经标记了不工作的部分,我很不明白为什么 {% for piece in data.widget._pieces %}
在 widget.html 中工作但在 nav.html 中不工作。我真的被困在那里,我真的不知道我的逻辑错误在哪里。如果能提示如何提取像 title
这样的和平值,我将非常感激
在其他页面中,如主页以及如何构建一个数组,该数组显示所有部分标题以及指向它们的链接。
最好的问候
菲利克斯
困难在于您要使用仅存在于 widget.html
中的 data.widget
。
如果您想构建一个导航小部件并在多个页面上使用该小部件,您应该在 layout.html
中的适当位置写入:
{{ apos.singleton(data.global, 'nav', 'sections', {}) }}
现在您有一个小部件,它是共享 global
文档的一部分,而不是附加到特定页面。并且不需要 include
任何东西,因为您已将代码放入所有页面模板扩展的 layout.html
模板中。
有关详细信息,请参阅 global doc tutorial and using blocks to override parts of the layout。
不幸的是,我无法为我的整页部分小部件构建导航。
我正在为
中的部分本身扩展apostrophe-pieces
lib/modules/sections/index.js
module.exports = {
extend: 'apostrophe-pieces',
name: 'section',
label: 'Section',
pluralLabel: 'Sections',
contextualOnly: false,
addFields: [
// Main Fields
{ name: 'title', label: 'Section Title', type: 'string', help: 'Select Title' },
{ name: 'color', label: 'Section Color', type: 'color', help: 'Select color' },
// Backgrounds
{
name: '_image',
type: 'joinByOne',
withType: 'apostrophe-image',
label: 'First Section Image',
filters: {
projection: {
attachment: true,
description: true,
title: true
}
}
}
],
// Fields Arrangement
arrangeFields: [
{ name: 'basics', label: 'Basics', fields: [ 'title', 'color' , '_image' ] },
]
};
并使用 apostrophe-pieces-widgets
显示 home.html
lib/modules/sections-widgets/index.js
module.exports = {
extend: 'apostrophe-pieces-widgets',
name: 'sections',
label: 'Sections Widget',
};
这是小部件本身:
lib/modules/sections-widgets/views/widget.html
{% for piece in data.widget._pieces %}
<div class="section" id="{{ piece.title | lower }}" style="background-color:{{ piece.color }};
{%- if data.page._image.attachment -%}
background-image: url({{ apos.attachments.url(data.page._image.attachment, { size: data.options.size or 'full' }) }})
{% endif %}
">
<div class="main-content container">
{%- if piece.title -%}
<div class="header"><h3>{{ piece.title }}</h3></div>
{%- endif -%}
{{ apos.area(piece, 'a', {
limit: 2,
widgets: {
'double': {
controls: {
movable: false,
removable: true,
position: 'top-right'
}
}
}
}) }}
</div>
</div>
{% endfor %}
到目前为止一切正常,但我想显示一个导航,它在单独的位置显示每个部分,例如 home.html
{% block beforeMain %}
{% include "sections-widgets:nav.html" %}
{% endblock %}
这是导航 html 文件:
lib/modules/sections-widgets/views/nav.html
<div class="nav">
<nav style="background-color:{{ data.page.nav_color }};">
<div class="nav-wrapper z-depth-2">
<a href="{{ data.page._url }}" class="brand-logo"><h1>{{ data.page.title }}</h1></a>
<a href="#" data-target="mobile" class="sidenav-trigger"><i class="material-icons">menu</i></a>
<ul class="nav-activator right hide-on-med-and-down">
// NOT WORKING PART
{% for piece in data.widget._pieces %}
<li><a href="#{{ data.piece.title | lower }}">{{ data.piece.title }}</a></li>
{% endfor %}
// END OF NOT WORKING PART
<li><a href="#contact">Contact</a></li>
</ul>
</div>
我已经标记了不工作的部分,我很不明白为什么 {% for piece in data.widget._pieces %}
在 widget.html 中工作但在 nav.html 中不工作。我真的被困在那里,我真的不知道我的逻辑错误在哪里。如果能提示如何提取像 title
这样的和平值,我将非常感激
在其他页面中,如主页以及如何构建一个数组,该数组显示所有部分标题以及指向它们的链接。
最好的问候 菲利克斯
困难在于您要使用仅存在于 widget.html
中的 data.widget
。
如果您想构建一个导航小部件并在多个页面上使用该小部件,您应该在 layout.html
中的适当位置写入:
{{ apos.singleton(data.global, 'nav', 'sections', {}) }}
现在您有一个小部件,它是共享 global
文档的一部分,而不是附加到特定页面。并且不需要 include
任何东西,因为您已将代码放入所有页面模板扩展的 layout.html
模板中。
有关详细信息,请参阅 global doc tutorial and using blocks to override parts of the layout。