覆盖DITA XSLT将相关链接移至左侧栏的技术咨询
解决DITA-OT 1.8.5中移动「相关链接/主题」到左侧栏的Bootstrap双栏布局问题
我之前处理过类似的DITA-OT自定义布局需求,针对你提到的DITA-OT 1.8.5版本,把底部的「相关链接/主题」移到左侧Bootstrap双栏布局里,我可以给你一步步的解决方案:
1. 先理清相关链接的生成逻辑
你在dita2htmlImpl.xsl约4085行找到的相关链接引入,大概率是调用了一个名为related-links的模板(或者类似命名的模板)。这个模板通常是把所有相关链接内容打包成一个整体输出的,所以我们需要先找到这个模板的定义:
- 打开
dita2htmlImpl.xsl,搜索<xsl:template name="related-links">,或者在配套的related-links.xsl文件里找这个模板(DITA-OT 1.8.5的相关链接逻辑可能拆分在这个文件里)。 - 查看这个模板的输出结构,它应该是用一个容器(比如
<div class="related-links">)包裹了所有相关链接内容,这就是为什么你觉得它是“整体引入”的原因。
2. 调整页面主布局为Bootstrap双栏
我们需要修改生成页面主体的模板,把原来的单栏结构改成Bootstrap的栅格布局:
- 在
dita2htmlImpl.xsl里找到生成页面主内容容器的部分(通常是包裹<xsl:apply-templates select="topicbody"/>的那个容器)。 - 把它替换成Bootstrap的栅格结构:
<div class="container"> <div class="row"> <!-- 左侧栏:放置相关链接 --> <div class="col-md-3"> <div class="sidebar-related-links"> <xsl:call-template name="related-links"/> </div> </div> <!-- 右侧主内容区域 --> <div class="col-md-9"> <!-- 原来的主题内容 --> <xsl:apply-templates select="topicbody"/> </div> </div> </div>
3. 移除底部的相关链接调用
回到你找到的dita2htmlImpl.xsl约4085行的位置,把那里调用related-links模板的代码(比如<xsl:call-template name="related-links"/>)注释掉或者直接删除,避免相关链接在底部重复显示。
4. 引入Bootstrap CSS样式
需要在页面的<head>部分添加Bootstrap的样式引用,确保布局生效:
- 在
dita2htmlImpl.xsl或者common.xsl里找到生成<head>标签的模板,添加Bootstrap的CSS链接:
(如果你的环境不能访问CDN,可以下载Bootstrap 3.4.1的CSS文件到本地,然后用相对路径引用)<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap.min.css"/>
5. 处理样式冲突(可选)
DITA-OT自带的默认样式可能和Bootstrap有冲突,比如相关链接的列表样式、容器间距等。你可以添加自定义CSS来调整:
.sidebar-related-links { margin-top: 20px; padding: 15px; background-color: #f8f9fa; border-radius: 4px; } .sidebar-related-links ul { list-style-type: none; padding-left: 0; }
把这段CSS放到自定义的样式文件里,然后在页面<head>里引入即可。
注意事项
- DITA-OT 1.8.5是比较老的版本,模板结构可能和后续版本不同,如果你找不到对应的模板,可以搜索关键词
related-links或者topicbody来定位。 - 修改XSLT文件前,建议先备份原文件,避免修改出错导致整个编译流程崩溃。
内容的提问来源于stack exchange,提问作者ham on wry
相关产品推荐
相关产品推荐

