You can automatically link together topics belonging to the same series. This helps users know the context within a particular process.
Using series for pages
You create a series by looking for all pages within a tag namespace that contain certain frontmatter. Here’s a [demo][mydoc_seriesdemo1]</a>.
First create an include that contains your series button:
<div class="seriesContext">
<div class="btn-group">
<button type="button" data-toggle="dropdown" class="btn btn-primary dropdown-toggle">Series Demo <span class="caret"></span></button>
<ol class="dropdown-menu">
{% assign pages = site.pages | sort:"weight" %}
{% for p in pages %}
{% if p.series == "ACME series" %}
{% if p.url == page.url %}
<li class="active"> → {{p.weight}}. {{p.title}}</li>
{% else %}
<li>
<a href="{{p.url | remove: "/"}}">{{p.weight}}. {{p.title}}</a>
</li>
{% endif %}
{% endif %}
{% endfor %}
</ol>
</div>
</div>
Change “ACME series” to the name of your series.
Save this in your _includes/custom folder as something like series_acme.html.
Warning: With pages, there isn’t a universal namespace created from tags or categories like there is with Jekyll posts. As a result, you have to loop through all pages. If you have a lot of pages in your site (e.g., 1,000+), then this looping will create a slow build time. If this is the case, you will need to rethink the approach to looping here.
2. Create the “next” include
Now create another include for the Next button at the bottom of the page. Copy the following code, changing the series name to your series’name:
<p>{% assign series_pages = site.tags.series_acme %}
{% for p in pages %}
{% if p.series == "ACME series" %}
{% assign nextTopic = page.weight | plus: "1" %}
{% if p.weight == nextTopic %}
<a href="{{p.url}}"><button type="button" class="btn btn-primary">Next: {{p.weight}} {{p.title}}</button></a>
{% endif %}
{% endif %}
{% endfor %}
</p>
Change “acme” to the name of your series.
Save this in your _includes/custom/mydoc folder as series_acme_next.html.
3. Add the correct frontmatter to each of your series pages
Now add the following frontmatter to each page in the series:
series: "ACME series"
weight: 1.0
With weights, Jekyll will treat 10 as coming after 1. If you have more than 10 items, consider changing plus: "1.0"
to plus: "0.1"
.
Additionally, if your page names are prefaced with numbers, such as “1. Download the code,” then the {{p.weight}}
will create a duplicate number. In that case, just remove the {{p.weight}}
from both code samples here.
4. Add links to the series button and next button on each page.
On each series page, add a link to the series button at the top and a link to the next button at the bottom.
<!-- your frontmatter goes here -->
{% include custom/series_acme.html %}
<!-- your page content goes here ... -->
{% include custom/series_acme_next.html %}
Changing the series drop-down color
The Bootstrap menu uses the primary
class for styling. If you change this class in your theme, the Bootstrap menu should automatically change color as well. You can also just use another Bootstrap class in your button code. Instead of btn-primary
, use btn-info
or btn-warning
. See [Labels][mydoc_labels] for more Bootstrap button classes.
Using a collection with your series
Instead of copying and pasting the button includes on each of your series, you could also create a collection and define a layout for the collection that has the include code. For more information on creating collections, see [Collections][mydoc_collections] for more details.
orzh-introduction
X-WAF-README
nginx-lua-module-zh-wiki
orange_about
pra_flame_how
orzh-introduction
X-WAF-README
nginx-lua-module-zh-wiki
orange_about
titlepage
tocpage
p1_landing_page
p1_sample1
p1_sample2
p1_sample3
p1_sample4
p1_sample5
p1_sample6
p1_sample7
titlepage
tocpage
p2_landing_page
p2_sample1
p2_sample2
p2_sample3
p2_sample4
p2_sample5
p2_sample6
p2_sample7
p2_sample8
p2_sample9
p2_sample10
p2_sample11
p2_sample12
p2_sample13
p2_sample14
titlepage
tocpage
p1_landing_page
p1_sample1
p1_sample2
p1_sample3
p1_sample4
p1_sample5
p1_sample6
p1_sample7
titlepage
tocpage
X-WAF-README
xwaf_installation
xwaf_depoly
xwaf_README
xwaf_advanced_readme
xwaf_getting_started
xwaf_faqs_readme
xwaf_roadmap
titlepage
tocpage
nginx-lua-module-zh-wiki
titlepage
tocpage
orange_api_server
orange_build_plugin
orange_dashboard_usage
orange_README
orange_basic_auth
orange_basic_info
orange_divide
orange_key_auth
orange_monitor
orange_rate_limiting
orange_redirect
orange_rewrite
orange_stat
orange_waf
orange_condition
orange_expression
orange_extraction
orange_extractor
orange_handle
orange_judge
orange_rule
orange_about
orange_contributing
orange_issues
orange_usages
titlepage
tocpage
add_new_lua_api
cosocket
get_req_body
get_url_param
helloworld
how_request_http
inline_var
install
install_on_centos
install_on_ubuntu
install_on_windows
install_osx
log_response
outtest
response
safe_sql
share_var
simple_api
sub_request
work_with_location
array_size
break
brief
build_env
call_user_func_array
capture
class
control_structrues
dot_diff
dummy_var
FFI
file
for
function_before_use
function_define
function_descrip
function_parameter
function_result
if_else
local
main
math_library
metatable
module_is_evil
module
not_nill
not_use_lib
not_use_module
object_oriented
operator
re
repeat
string_library
table_library
time_date_function
what_jit
while
pra_flame_how
pra_flame_install
pra_flame_what
pra_flame_when
pra_ngx_lua_allow_deny
pra_ngx_lua_block_io
pra_ngx_lua_cache
pra_ngx_lua_capture
pra_ngx_lua_continue_after_eof
pra_ngx_lua_debug
pra_ngx_lua_ffi
pra_ngx_lua_hot_load
pra_ngx_lua_how_one_instance_time
pra_ngx_lua_how_use_third_lib
pra_ngx_lua_keepalive
pra_ngx_lua_log
pra_ngx_lua_lua-limit
pra_ngx_lua_lua_opt
pra_ngx_lua_lua-variable-scope
pra_ngx_lua_on_abort
pra_ngx_lua_phase
pra_ngx_lua_resolve_the_domain_name
pra_ngx_lua_shared_get_keys
pra_ngx_lua_sleep
pra_ngx_lua_timer
pra_ngx_lua_use_case
pra_ngx_lua_whats_cosocket
pra_redis_auth_connect
pra_redis_dynamic_redis_module_method
pra_redis_out_package
pra_redis_pipeline
pra_redis_pub_sub_package
pra_redis_script
pra_redis_select-keeplive
pra_postgres_health_check
pra_postgres_how_to_use
pra_postgres_not_support_transaction
pra_postgres_sql_inject
pra_postgres_timeout
pra_nginx_balancer
pra_nginx_co-work_of_location
pra_nginx_if_is_evil
pra_nginx_match_uri
pra_nginx_nginx_brief
pra_nginx_nginx_local_pcre
pra_nginx_nginx_log
pra_nginx_nginx
pra_nginx_pitfalls_and_common_mistakes
pra_nginx_reverse_proxy
pra_nginx_static_file
titlepage
tocpage
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_scan_port
candylab_common_sites_log_system
candylab_graylog_clickhouse
candylab_clickhouse_basic
candylab_logs_and_gateway
candylab_sec_system_arch
candylab_logs_dsl_waf
candylab_opensock_list
candylab_opensock_practice
candylab_opensock_email
candylab_base_on_openresty_waf
candylab_dsl_waf
candylab_honeypot_system
candylab_monitor_redis
candylab_threat_replay
candylab_pcap_monitor
candylab_monitor_website
candylab_openrestyplus_waf
candylab_windows_bigdata
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
candylab_clickhouse_basic
mydoc_hyperlinks.html#automatedlinks
mydoc_hyperlinks.html#bookmarklinks
mydoc_pages.html#someIdTag
news
nginx-lua-module-zh-wiki
nginx-development-guide-zh
orange_about
X-WAF-README
pra_flame_how