找回密码
 快速注册
搜索
查看: 97|回复: 35

手动更改“相关帖子”

[复制链接]

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-9-10 14:44 |阅读模式
目前,“相关帖子(related post)”字段是根据帖子标签自动生成的,并在每次更新标签后更新。
有时自动生成的相关帖子并不像我们想要的那样(因为有些标签过于宽泛或具有多重含义)。
建议允许用户手动将相关帖子字段更改为他们想要的。可以将其添加到编辑器“标签”输入栏下的新输入栏中。😀
我们测试过,因为它仅由数据库中的 related post 字段决定,更新数据库中的这个字段不会影响其他内容。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-9-10 15:42
嗯,目前相关帖子的功能确实还不太智能。

“我们测试过,因为它仅由数据库中的 related post 字段决定”
这个“我们”是你和哪位?

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-9-10 15:49
hbghlyj 发表于 2024-9-10 15:48
您。很久以前我记得我有一个帖子显示多个相同的标签,您回复了那个帖子。您还记得吗?我没有找到那篇旧帖 ...

噢,我还以为你和别人又搞了个新论坛来测试呢。😄

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-10 15:51
kuing 发表于 2024-9-10 07:49
噢,我还以为你和别人又搞了个新论坛来测试呢。😄


有一个帖子显示多个相同的标签,我记得这是由一些奇怪的编辑引起的,我没有编辑数据库,只是做了一些编辑,但这很令人困惑。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-9-10 15:52
我现在没心思研究这些东西了。
我记得之前论坛有一份备份在你的网站里放着,现在还在吗?如果还在,你也可以在那里搞测试呀。

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-10 16:21
可以先fork一下 github.com/codersclub/DiscuzX 仓库,这仓库将是原仓库的副本,然后上传修改过的DiscuzX代码,GitHub上就会显示出修改后的差异,很方便。而且我们可以把关于DiscuzX软件本身的讨论都转移到与论坛分开的GitHub Issues上,这样论坛就可以专注于数学了。

Github issues 对于诸如错误报告和功能请求等主题非常有用。例如,您可以将粘贴到 repo 中代码的链接,然后 Github 会将其转换为代码片段,并带有指向 repo 原始位置的链接。

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-10 16:27
hbghlyj 发表于 2024-9-10 08:05
因为它被重新上传了,脚本也重写了


我已将我的新个人网站的代码移至 GitHub:github.com/hbghlyj/hbghlyj,所以我再也不用担心代码丢失了,只要我将每个版本的新代码 push 到我的 GitHub repo(但页面仍然托管在我的 vps 上,而不是由 GitHub pages托管)

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-10 16:41
hbghlyj 发表于 2024-9-10 08:21
把关于DiscuzX软件本身的讨论都转移到与论坛分开的GitHub Issues上


除了 GitHub Issues,您还可以使用 GitHub Discussions(新功能):github.blog/2020-05-06-new-from-satellite-2020-github-codespaces ... nd-more/#discussions

例如 CTeX 社区 github.com/CTeX-org/forum/issues
Screenshot 2024-09-10 164231.png

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-10 16:55

本文插入GitHub广告

hbghlyj 发表于 2024-9-10 08:21
然后 Github 会将其转换为代码片段,并带有指向 repo 原始位置的链接。


要在 GitHub Issues 中插入代码片段并链接到文件中的原始位置,请按照以下步骤操作:

1. 导航到代码
- 转到存储库并找到包含要链接到的代码的文件。

2. 选择代码
- 单击行号以突出显示单行,或单击并拖动以选择多行。

3. 复制永久链接
- 选择行后,单击行号旁边出现的三个点(kebab 菜单)。
- 从下拉菜单中选择“复制永久链接”。

4. 插入 GitHub Issues
- 转到要插入代码片段的 GitHub issues
- 将永久链接粘贴到问题评论中。链接看起来会像这样:
  1. https://github.com/<organization>/<repository>/blob/<branch>/<file>#L<line-number>
复制代码


示例

如果您想要链接到 main 分支中名为 example.py 的文件的第 10-12 行,永久链接可能如下所示:
  1. https://github.com/your-organization/your-repo/blob/main/example.py#L10-L12
复制代码


当您将此链接粘贴到 GitHub issues 中时,它将创建一个可点击的链接,可直接将您带到文件中的指定行。

此方法可确保查看问题的任何人都可以快速导航到存储库中代码的确切位置😀

Introducing embedded code snippets - The GitHub Blog.
29093044-6477ba12-7c56-11e7-9bd2-e6db926d70be[1].gif

Creating a permanent link to a code snippet - GitHub Docs.

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-10 17:05
hbghlyj 发表于 2024-9-10 08:55
此方法可确保查看问题的任何人都可以快速导航到存储库中代码的确切位置


这类似于论坛上的引用功能,但它是跨文件的

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-9-10 18:12
hbghlyj 发表于 2024-9-10 16:05
前段时间机器拒绝登录,我试了所有办法,重启机器,最后只能初始化机器才能登录😵,所以原来的内容都丢失 ...

好可怜
不过,不是可以联系客服吗?客服也搞不定?

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-9-10 22:50
hbghlyj 发表于 2024-9-10 19:31
他说机器坏了,需要重置😵

所以我重置了

噢噢,不过我一点也看不懂(包括 8#~12#)

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-9-23 02:16
目前,“相关帖子(related post)”字段是根据帖子标签自动生成的,并在每次更新标签后更新。

请问生成“相关帖子”的代码都在哪?

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-23 02:33
kuing 发表于 2024-9-22 18:16
请问生成“相关帖子”的代码都在哪?


/template/default/forum/viewthread_node.htm “相关帖子”的代码
  1. <!--{if !empty($post['relateitem'])}-->
  2.         <div class="mtw mbw">
  3.                 <h3 class="pbm mbm bbda">{lang related_thread}</h3>
  4.                 <ul class="xl xl2 cl">
  5.                         <!--{loop $post['relateitem'] $var}-->
  6.                         <li>&#8226; <a href="forum.php?mod=viewthread&tid=$var[tid]" title="$var[subject]" target="_blank">$var[subject]</a></li>
  7.                         <!--{/loop}-->
  8.                 </ul>
  9.         </div>
  10. <!--{/if}-->
复制代码

需要找出生成 $post['relateitem'] 的位置

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-23 02:36
hbghlyj 发表于 2024-9-22 18:33
需要找出生成 $post['relateitem'] 的位置

在/source/module/forum/forum_viewthread.php 可以看到$post['relateitem']被定义
  1. if($post['first']) {
  2.         if($ordertype == 1 && $page != 1) {
  3.                 continue;
  4.         }
  5.         $_G['forum_firstpid'] = $post['pid'];
  6.         if($_G['forum_thread']['price']) {
  7.                 $summary = str_replace(array("\r", "\n"), '', messagecutstr(strip_tags($thread['freemessage']), 160));
  8.         } else {
  9.                 $summary = str_replace(array("\r", "\n"), '', messagecutstr(strip_tags($post['message']), 160));
  10.         }
  11.         $tagarray_all = $posttag_array = array();
  12.         $tagarray_all = explode("\t", $post['tags']);
  13.         if($tagarray_all) {
  14.                 foreach($tagarray_all as $var) {
  15.                         if($var) {
  16.                                 $tag = explode(',', $var);
  17.                                 $posttag_array[] = $tag;
  18.                                 $tagnames[] = $tag[1];
  19.                         }
  20.                 }
  21.         }
  22.         $post['tags'] = $posttag_array;
  23.         if($post['tags']) {
  24.                 $post['relateitem'] = getrelateitem($post['tags'], $post['tid'], $_G['setting']['relatenum'], $_G['setting']['relatetime']);
  25.         }
复制代码
其中使用函数 getrelateitem,该函数定义在同一文件中
  1. function getrelateitem($tagarray, $tid, $relatenum, $relatetime, $relatecache = '', $type = 'tid') {
  2.         $tagidarray = $relatearray = $relateitem = array();
  3.         $updatecache = 0;
  4.         $limit = $relatenum;
  5.         if(!$limit) {
  6.                 return '';
  7.         }
  8.         foreach($tagarray as $var) {
  9.                 $tagidarray[] = $var['0'];
  10.         }
  11.         if(!$tagidarray) {
  12.                 return '';
  13.         }
  14.         if(empty($relatecache)) {
  15.                 $thread = C::t('forum_thread')->fetch_thread($tid);
  16.                 $relatecache = $thread['relatebytag'];
  17.         }
  18.         if($relatecache) {
  19.                 $relatecache = explode("\t", $relatecache);
  20.                 if(TIMESTAMP > $relatecache[0] + $relatetime * 60) {
  21.                         $updatecache = 1;
  22.                 } else {
  23.                         if(!empty($relatecache[1])) {
  24.                                 $relatearray = explode(',', $relatecache[1]);
  25.                         }
  26.                 }
  27.         } else {
  28.                 $updatecache = 1;
  29.         }
  30.         if($updatecache) {
  31.                 $query = C::t('common_tagitem')->select($tagidarray, $tid, $type, 'itemid', 'DESC', $limit, 0, '<>');
  32.                 foreach($query as $result) {
  33.                         if($result['itemid']) {
  34.                                 $relatearray[] = $result['itemid'];
  35.                         }
  36.                 }
  37.                 if($relatearray) {
  38.                         $relatebytag = implode(',', $relatearray);
  39.                 }
  40.                 C::t('forum_thread')->update($tid, array('relatebytag'=>TIMESTAMP."\t".$relatebytag));
  41.         }
  42.         if(!empty($relatearray)) {
  43.                 rsort($relatearray);
  44.                 foreach(C::t('forum_thread')->fetch_all_by_tid($relatearray) as $result) {
  45.                         if($result['displayorder'] >= 0) {
  46.                                 $relateitem[] = $result;
  47.                         }
  48.                 }
  49.         }
  50.         return $relateitem;
  51. }
复制代码
可以看到它被缓存在 $relatecache 变量中。

点评

有点儿困了🥱明天再看😪  发表于 2024-9-23 02:59

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-9-24 18:59
hbghlyj 发表于 2024-9-23 02:36
在/source/module/forum/forum_viewthread.php 可以看到$post['relateitem']被定义
其中使用函数 getrelat ...

实在难以看懂……

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-9-24 23:48
16# 第二段代码的 31 行的
  1. $query = C::t('common_tagitem')->select($tagidarray, $tid, $type, 'itemid', 'DESC', $limit, 0, '<>');
复制代码

能解释一下这句的含意嘛?

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-25 00:31

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2024-9-25 00:49
本帖最后由 kuing 于 2024-9-25 01:02 编辑 我想先解决相关帖子的排序问题。
正常来说应该是按相关度排序,即相同标签越多的相关帖子越靠前,但目前好像不是,现在的排序规律是什么呢?

前面提到那句的参数里有 'itemid', 'DESC' ,而看 common_tagitem 这个表里 itemid 好就是帖子的 tid,那就是按它降序?

但后面还有一个 rsort($relatearray); 这个又排什么序呢?

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-9-25 00:56
pre_common_tag 标签表
字段名数据类型默认值允许非空自动递增备注
tagidmediumint(8) unsigned  NO 标签id
tagnamechar(20)  NO  标签名
statustinyint(1) 0 NO  显示状态 (0:正常 1:关闭 2:推荐 3:用户标签)
pre_common_tagitem 标签内容表
字段名数据类型默认值允许非空自动递增备注
tagidmediumint(8) unsigned 0 NO  标签id
itemidmediumint(8) unsigned 0 NO  itemid
idtypechar(10)  NO  内容类型

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 12:38

Powered by Discuz!

× 快速回复 返回顶部 返回列表