Posts.category的title属性问题

Hi,

最近遇到一个问题,想找一个优雅的解决方法。

问题是:

在做分类页面的时候,类别是按Posts.category.title来提取的,也就是相对应的文件夹名字。

作为中文站,当然希望分类的名字也是中文,于是我所有的文章都是写在不同的中文文件夹中。

不过其实在渲染的时候可以看到所有的中文文件夹名称,都被转化为对应的拼音作为路径显示在浏览器中,这没问题。

问题出现在,当我在文章中使用相对引用,引用该中文文件夹下的/images目录中的图片时(比如./images/abc.jpg),md的渲染没问题,因为图片路径会依然按照后台路径去找。但如果使用嵌套链接的写法,希望图片可点击放大成原图,即,就会出现超链的路径是拼音非后台,所以会找不到放大的原图。

想问问有什么好的解决方法呢?

demo:https://tomatoegg.tk/post/gong-cheng-shi/2017-11-24-nabula-writesup-level08

里面的第一张图片

多谢,

2017-11-24 17:02 from Liu Zheng
Comments
Write a Comment
  • wellsleep reply

    丢失了嵌套的写法...

    ```

    [](./images/abc.jpg)

    ```

    这样子如果`.`的路径是中文的话,就前台后台的路径不同了。

  • wellsleep reply

    嵌套是这样写的:

    [ ! [](./images/abc.jpg)] (./images/abc.jpg)

    前几发怎么老是有一部分被吃掉...但愿这次发完整了...

  • Hepo reply

    @Liu Zheng, 你好呀。

    URL 和 Filepath 毕竟不一样, 属于外部不可控。 图片可以呈现,是因为 Bitcron 的 Markdown解析引擎会最终将这个 URL 转义为 绝对路径的。

    问题来了,转义的逻辑是针对 img 标签上的 src, 不可能是针对 A 标签下的子标签。 所以,从 Bitcron 系统上来看, 你是无法得到直接的解决方案的。

    但是,自己解决起来的办法很多呀。

    比如,不要使用相对的图片地址的写法…… 或者前端脚本再处理,这样得到的图片地址是直接有效的。

    • wellsleep reply

      @Hepo 你好呀~

      我在想另一个思路,不知道行不行。

      我的需求是:

      1. 分类页面显示中文分类;

      2. 图片链接可嵌套(前后台链接统一)。

      那么能不能用英文名分类文章,但分类显示的时候显示中文就好了。

      笨办法是在分类页面 /categories 一个个hardcode中文标题,用超链指向不同的子分类 /category 。优雅的办法是用迭代器来做,只是目前迭代的是Posts.category.title,而这个属性已经钉死是文件夹名字。有没有别的方法(我没有找到Posts.category的别的可自定义的属性),如果可以用别的属性来迭代就可以实现:“英文文件夹,但分类自动显示中文”啦。

      请原谅非前端工程师的脑回路~

      • Hepo reply

        @wellsleep https://pi.bitcron.com/post/markdown_metadata#toc_0

        不是很明白,但是 category.metadata 也是可以有的, 就是在文件夹下面放置一个 index.md, 然后 index.md 的 metadata 会存储在对应的(父) category 上。 :)

        • wellsleepwellsleep reply

          @Hepo 多谢~我试试看。

        • wellsleep reply

          @Hepo 按照你给的方法我尝试了一下,有点小问题。

          如果在/生活 文件夹下建立index.md,index.md的metadata部分如果我修改title, date,通过posts.category.title/date都可以正常继承(或者说“传送给文件夹的属性”更准确)。但是tag属性,以及自定义属性(比如cat-title),就无法继承给posts.category.tag或posts.category.cat-title(结果为空)。这里是有什么限制吗?我本意是希望能通过自定义index.md的meta来覆盖由文件名定义posts.category.title的内容。

          不知道我说清楚没有。

          非常感谢!

        • wellsleep reply

          @Hepo

          简单来说,就是希望:

          1. 将/生活 文件夹更名为 /life

          2. 由于文件夹更名,所以posts.category.title == life

          3. 但是迭代分类的时候我又想要中文的名字,所以希望posts.category.cat-title == 生活

          这样的话,所有的前后台路径统一为/life/xxx.md, /life/_images/yyy.jpg就不会出现图片直链翻译出错了。

          同时用`for category in posts.categories`迭代时,可以从posts.category.cat-title直接取出中文分类名字。

          但是目前的问题是,无法由/life/index.md的meta

          ```

          cat-title: 生活

          ```

          定义posts.category.cat-title的值,读出来的值是空。

          这下应该说清楚了...

        • wellsleep reply

          @Hepo 原来是我粗心,关键词中间不能用中横杠`-`

          已经用posts.category.metadata.ctitle成功取到index.md的ctitle属性啦~

          非常感谢~