HP ProLiant ML330 G6 Server 健康红灯闪烁无限重启

故障现象描述:

外部健康红色指示灯闪烁,随后启动变为黄色,然后又重启,这样无限循环重启,如下图

这台服务器就此问题折腾了很长时间,更换了很多配件,还是没有解决此问题。

已经更换过的配件如下:

主板、内存、电源、硅脂

可以说,等于所有核心的主要配件都已经更换过了,这个问题还是没有得到解决。可以看出,就此问题,在之前不是我接手维修的时候也是更换过包括:电源、主板、内存,依旧没有解决此问题。

面对此问题,我已经毫无思路了,除了CPU没有更换的,所有都已经替换过了。DVD-ROM拔掉,硬盘拔掉,硬盘阵列连接的电源以及数据线都拔掉,问题依旧。

登录查看完整内容

OpenWrt/LEDE关于MWAN接口配置疑问

MWAN就是为了多拨,不然也不需要这个功能吧。反正我用来双拨,单线双拨,光猫千兆接口+IPTV百兆接口(自己更改IPTV这个端口的协议为PPPOE

 

MWAN部分配置文件如下图

 

参数解释(参考官方资料)

Tracking IP // 追踪 IP。填上国内稳定的公共DNS主机的IP,给MWAN追踪是否可以ping通。追踪DNS主机IP,测试接口是否处于活动状态。如果此值未填,则认为该接口一直处于上线的。

Tracking reliability // 追踪主机的可靠性。必须有答复的DNS主机数,测试才认为成功。确保已填写的DNS主机数,否则将认定为接口已掉线。

Ping count // ping 的次数。每次ping测试发送到DNS主机的ping次数。

Ping timeout // ping的超时时间。在ping请求之后等待ping回复的秒数。

Ping interval // ping的间隔时间。每次ping测试间隔的秒数。

Interface down // 接口掉线。将接口视为掉线的失败测试数。

Interface up // 接口上线。将接口视为上线的成功测试数。

 

按照解释,我理解上图配置参数为:

每间隔60秒,ping一次DNS主机其中的一个IP。

如果ping请求发送到DNS主机IP之后2秒内没有回应,则认为ping测试失败,如果ping测试失败次数达到3次,则认为该接口已掉线。

如果ping请求发送到DNS主机IP之后2秒内有回应,则认为ping测试成功,如果ping测试成功次数达到8次,则认为该接口已上线。

实际上我还是有些迷糊,到底这样理解配置是否正确。

之前Ping interval这个参数这里我填的是5s,也就是每隔5秒ping一次DNS主机IP,这样是否过于频繁了?然后导致经常会出现Loss ping的日志,导致接口被认为已掉线。然而实际上接口并没有掉线,只是ping间隔时间太短5秒,过于频繁的ping导致DNS主机不回应?或是网络堵塞等原因导致无法ping通?最终MWAN认为接口已掉线,然后Offline。

最后我还是把Ping interval这个参数修改为60s,也就是1分钟。每隔1分钟,ping一次DNS主机IP,然后用了很多天都非常的稳定,MWAN不再Offline了。然后MWAN日志也不会再出现Loss ping记录日志了。

使用rEFInd实现OpenWRT / LEDE支持UEFI GPT启动

实际上我使用的Hyper-v第一代虚拟机运行LEDE17真的非常的稳定,网速各方面都非常满意了。最近可能没事找事的把Windows Server2012 R2 Hyper-v第一代虚拟机里面也是运行的非常稳定的CentOS7,重新安装到Hyper-v第二代虚拟机里。据说第二代Hyper-v性能更好更稳定,实际上使用了感觉好像并没有什么区别,可能心理作用感觉是快了点。感觉最明显的是WordPress运行速度快了,特别是NextCloud16运行速度更明显的快了。也许是之前WordPress由于测试安装了许多插件然后又删除,NextCloud之前版本13的时候速度很快的,后来版本一直更新到了16之后,卡到不想用,日志里的错误一堆堆的,所以干脆推到了重新来。其实在第二代Hyper-v虚拟机里运行CentOS7速度感受不明显,WordPress与NextCloud16也许是重新部署的原因,速度快了很多,特别是NextCloud16将各种的警告与错误都一个个的配置与排除了。

那么剩下Hyper-v第一代的LEDE17是不是也应该搬到第二代上面来,并且现在LEDE又跟OpenWRT合并了,最新的版本是OpenWRT18.06.4。好吧,下载最新版本的OpenWrt18.06.4测试一下看看能否运行在二代虚拟机上吧。

经过测试,OpenWrt18.06.4无法在第二代Hyper-v上启动,最根本的原因就是Hyper-v第二代虚拟机固件是UEFI的,与第一代的BIOS根本的不同。详细的区别我也不懂,反正就是不兼容BIOS的MBR启动方式。

折腾了2天,中间试过很多种方法,失败了无数次之后终于搞好了。

GRUB2,但是无论怎么搞都失败告终,实际上还是不懂这个东西怎么配置。

配置这个GRUB2从来就没有成功的启动过,因为我使用CentOS7来配置的。只是安装GRUB2这个家伙到EFI启动分区,这个步骤都出错失败了很多次,最后安装了grub2-efi-x64-modules才顺利完成。然后我CentOS都被他搞得无法启动了,最后放弃了…

rEFInd,其实也不懂怎么配置,因为这些说明文档都是英文的,看得头晕眼花就是没搞懂什么意思,百度机器翻译的中文也是理解不了。

最开始使用rEFInd弄过可以识别OpenWrt的启动文件vmlinuz,可以启动但无限重启,不能正常启动工作,一直无限启动又重启反复循环。其中我也截屏看了启动过程记录,大概是启动过程需要加载参数,无法加载正确的参数导致启动失败,然后就重启的。

时间花了不少,最后不但没有成功,还把人都给累坏了,累并失望中决定了放弃折腾 … …

第三天,回想起前两天付出的代价,真的不甘心就此罢休,继续翻阅rEFInd的英文文档,终于发现了其中的一些玄机!其实非常的简单就能实现UEFI启动,只是配置文件这里没有配置好而已。太多的细节与失败的过程就不说了,下面就记录整理正确的配置步骤。

一、磁盘分区

在Hyper-v第二代虚拟机新建一个动态扩展的10GB磁盘,然后使用Gparted分区软件分区。我下载了一个Gparted-live-1.0.0-3-amd64.iso启动盘来为此硬盘分区,启动盘启动之后,一路按照默认选项进入。

首先空硬盘先要建立GPT分区表(我已经建好的,这里是演示步骤)

建立GPT分区表后,建立一个128MB的分区,格式化为FAT16,然后标记为boot、esp

好了,剩下的就可以分作一个分区并格式化为ext4即可。(剩下的空间,我这里分了2个分区,之前是测试,实际上剩余的空间就一个分区即可)

二、拷贝文件并配置refind.conf

磁盘分区完成之后,将该磁盘挂载到CentOS7系统里,拷贝必要的启动文件与OpenWrt系统文件以及进行修改refind.conf配置文件。

下载好refind-cd-0.11.4.iso启动光盘,CentOS挂载光盘,打开并将里面的EFI文件夹包括里面的所有文件,复制到OpenWRT虚拟磁盘的128MB引导分区。

修改配置文件refind.conf,该文件所在目录 /EFI/boot/refind.conf

配置文件内容如下:

# refind.conf
# Configuration file for the rEFInd boot menu

timeout -1

scan_all_linux_kernels false

menuentry OpenWRT {
    icon EFI/boot/icons/os_linux.png
    loader EFI/boot/vmlinuz
    options "root=PARTUUID=be80fc44-fff5-42ef-81d1-ce29d3e0f41a rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd"
}

配置文件里需要特别注意的是 options "root=PARTUUID=be80fc44-fff5-42ef-81d1-ce29d3e0f41a rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd" 这个参数

之前的所有失败,我想都是应该在这里出问题。

下面这参数内容来自OpenWrt引导分区的grub.cfg配置文件

root=PARTUUID=be80fc44-fff5-42ef-81d1-ce29d3e0f41a rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd

其中 PARTUUID=be80fc44-fff5-42ef-81d1-ce29d3e0f41a 这个我们需要通过终端命令 blkid ,获取OpenWrt虚拟磁盘的PARTUUID,或者在使用Gparted分区的时候做好记录,然后正确填好这个值。

貌似重新调整磁盘分区就会改变PARTUUID的值,重新格式化好像也会改变吧?我忘记了,反正这个值是需要特别注意不能出错

OpenWrt引导分区的grub.cfg配置文件完整内容如下:

serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 --rtscts=off
terminal_input console serial; terminal_output console serial

set default="0"
set timeout="5"
set root='(hd0,msdos1)'

menuentry "LEDE" {
	linux /boot/vmlinuz root=PARTUUID=24ed3806-02 rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd
}
menuentry "LEDE (failsafe)" {
	linux /boot/vmlinuz failsafe=true root=PARTUUID=24ed3806-02 rootfstype=ext4 rootwait console=tty0 console=ttyS0,115200n8 noinitrd
}

OpenWRT官网下载最新稳定版的OpenWrt18.06.4,只需下载generic-rootfs.tar.gz与vmlinuz这两个文件即可。

vmlinuz这个文件直接复制到128MB引导分区 /EFI/boot/ 里面即可

generic-rootfs.tar.gz这个直接用CentOS7里面的 归档管理器 打开,里面只有个一点.的文件夹直接右键提取到OpenWRT虚拟磁盘的ext4分区即可。

所有工作都已经完成了,在CentOS7系统移除OpenWRT虚拟磁盘,将虚拟盘挂载到新建的Hyper-v第二代虚拟机开机即可顺利完美启动运行了!!

需要注意的是第二代虚拟机固件这里,不要勾选 启用安全启动

完了。

还有很多细节,但不知怎么描述。

OpenWrt18.06.4我觉得有点问题,或者说可能在我的虚拟机里运行有点问题。进入软件包,刷新列表所有都签名通过Signature check passed.唯独 /luci/Packages.gz 这里出现Signature check failed. Remove wrong Signature file。然后,就不能搜索下载到官方的与luci相关的软件包,最基本的中文语言界面都无法搜索安装,这个Bug不能忍,搞不懂什么原因!还有并没发现OpenWrt18.06.4有什么出众的功能,就连主界面总览的CSS框架都没有优化好。不能尝鲜,还是用回LEDE17.01.7吧!还是喜欢LEDE多一点,原本的OpenWrt并不支持Hyper-v虚拟机运行的,是OpenWrt内部发生矛盾,一部分成员离开后创建了LEDE才支持Hyper-v虚拟机,我是还记得很清楚的。现在LEDE又与OpenWrt合并了,发布的新版本OpenWrt18,之后就再没有LEDE的版本发布了。所以LEDE17我觉得是最值得收藏的一个版本,没有之一了。

关于OpenWRT下载哪个压缩包合适我使用,这里是有点纠结。

combined-ext4.img.gz 这个是img镜像文件,别用dd if=/xx/xx.img of=/dev/sdb 这会造成我们建立的分区出问题,千万别使用这个命令。

generic-rootfs.tar.gz 所以我使用这个压缩包文件,不带引导分区的。

网上很多这些第三方固件都支持UEFI启动,为什么要那么累的自己折腾!

第三方的都靠得住?母猪都会上树!!

OpenWRT / LEDE搭建KMS激活服务器

我这里使用的是运行在Hyper-v第二代虚拟机里的LEDE17.01.7软路由,在LEDE上使用vlmcsd搭建KMS激活服务器。

首先下载vlmcsd for OpenWRT,下面链接是需要编译后才能使用的。

https://github.com/cokebar/openwrt-vlmcsd

我不懂怎么编译,所以直接下载已经编译好的ipk

https://github.com/cokebar/openwrt-vlmcsd/tree/gh-pages

这里包括很多编译好的ipk包,我使用vlmcsd_svn1112-1_x86_64.ipk

使用WinSCP登录上传至LEDE的目录 /tmp/

用PuTTy连接登录LEDE,安装vlmcsd_svn1112-1_x86_64.ipk

root@LEDE:~# opkg update
root@LEDE:~# cd /tmp
root@LEDE:/tmp# opkg install vlmcsd_svn1112-1_x86_64.ipk
### 安装成功 ###
Installing vlmcsd (svn1112-1) to root...
Configuring vlmcsd.
KMS Server has started.

修改配置文件

下面是原文教程

1、Add the following line at the end of /etc/dnsmasq.conf:

srv-host=_vlmcs._tcp.lan,hostname.lan,1688,0,100

(replace “hostname.lan” with your actual host name, eg: openwrt.lan, or just replace it with your IP of LAN)

2、Restart dnsmasq:

/etc/init.d/dnsmasq restart

You can check if the dnsmasq setting works with the following cammand in Windows:

nslookup -type=srv _vlmcs._tcp.lan

The response should be your router’s IP.

3、/etc/init.d/vlmcsd enable && /etc/init.d/vlmcsd start && /etc/init.d/dnsmasq restart

我是在LEDE路由管理页面重启 dnsmasq 与 vlmcsd

打开电脑命令行CMD,输入命令 nslookup -type=srv _vlmcs._tcp.lan

配置成功。

那么我们就可以使用KMS命令激活Windows和Office了。已经测试了最新的Windows LTSC 2019 成功激活!

技嘉双BIOS有什么卵用?

遇到一台主机正常开机,但是无法进入操作系统,也无法用任何启动介质启动该电脑!这就是神奇的技嘉双BIOS主板 GA-M68MT-S2P (rev. 3.0) 如下图

无论使用任何启动介质,都会进过这一步

Loading Operating System …

Begin to update Backup Bios to latest version …

Writing BIOS Image …………………..

然后1分钟左右电脑就重启,继续到这一步又重启这样循环重启,无法进入任何操作系统。

判断BIOS出问题咯

尝试刷新清空BIOS设置,拆主板电池,都无效。

尝试刷新BIOS程序,到技嘉简体中文官网居然搜索不到这个型号的BIOS,坑!最后百度搜索,这个主板居然在繁体中文技嘉官网找到了,下载来刷新成功,但问题还是涛声依旧!!!刷这个主板BIOS还折腾了我不少的时间,因为任何一个USB接口都无法使用,NTFS硬盘分区无法识别,最后用FAT32分区的硬盘才设别,并且成功刷新了主板BIOS程序,但你居然还是一样没有解决问题。

主板上面有两个BIOS芯片,分别是M-BIOS与B-BIOS,我决定将B-BIOS吹下来,看你还 Backup BIOS to latest version .. 不!

拆掉B-BIOS之后,哈哈!!!正常启动硬盘系统啦!!!果然双BIOS真没什么卵用。系统正常启动之后,发现主板所有的USB接口都无法使用,大概是这个问题导致这套双BIOS出问题的?不管,反正其他不是双BIOS的主板即使所有USB损坏也不会卡在Begin to update Backup Bios to latest version … 这里并死循环的重启!!!

最后加一块PCI-E转USB接口的小板子,解决主板USB故障,任务完成。

Chrome谷歌浏览器 Software Reporter Tool 占用CPU解决方法

最近发现一些配置比较低的机器打开谷歌浏览器Chrome非常不舒畅,打开任务管理器发现打开谷歌浏览器就会有一个software_reporter_tool的进程,一直在占用CPU资源居高不下!这是什么情况?除了 Chrome 你叫我用什么浏览器?QQ,360,。。。这些一堆广告流氓的浏览器?即使没有浏览器可用也都不会用!!!

所以必须找个方法干掉Chrome的software_reporter_tool进程!

首先找到software_reporter_tool.exe

路径参考 C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\SwReporter\43.210.200\software_reporter_tool.exe

或者任务管理器找到software_reporter_tool.exe进程,点击右键,打开文件位置。

找到software_reporter_tool.exe之后,如下图步骤操作

1、右键点击software_reporter_tool.exe → 属性

2、点选 → 安全 → 高级

3、更改权限

4、去掉 ✓ 包含从该对象的父项继承的权限 去掉方框内的勾选!最后点击确定

也就是 删除所有继承的权限

删除所有继承的权限之后,再右键点击 software_reporter_tool.exe → 属性,如下图

这样就没有任何用户有权限可以访问software reporter tool.exe了,问题就解决了!!

实际上我一直使用Chrome都没有发现这个问题哟,然后我再次在我使用的电脑找这个software_reporter_tool.exe进程,但是没有找到!难道是我用的Windows10 LTSC 2019 使用Chrome不会有这个进程?或者是我这个Chrome浏览器是在谷歌官方下载的,所以没有这个进程吗?

因为之前那台旧电脑用的是Windows7 64位 旗舰版,Chrome 是在 PC.QQ.COM上面下载的64位版本。

再留意一下我这台WIN10的电脑进程,或许software_reporter_tool.exe这个进程不是一直都在,只是偶尔出现?反正我装过系统为Win7 X64的已经注意到这个进程占用CPU很高50%到60%左右,但是不会一直持续高CPU占用,有时候会低一些。之前一直没有去处理,觉得可能是刚刚装好浏览器所以占用CPU会高一点。后来发现不太对路,因为最近装Win7系统使用Chrome浏览器的都有这个 software_reporter_tool.exe 进程持续高CPU占用导致卡顿!

不管 Software Reporter Tool 是什么东西,反正他太耗CPU资源导致系统卡顿,所以不得不把他给干掉!!我只是需要浏览器而已,不需要太多其他什么的功能在耗资源。

今天再次安装了另一个笔记本I5 第三代,Win7 X64 并没有发现software_reporter_tool.exe 进程,诡异的事情。

解决MFC-7470D内部卡纸,拿出硒鼓单元并取出卡纸

好久没有记录过一些东西了,有点忙,有点乱,不知记录些什么,并且玩游戏有点上瘾…。不知道从什么时候不玩游戏已经好久了,但又不知道从什么时候又玩起了游戏,不是电脑的游戏,是手机版的游戏。

自从爱上玩游戏之后,一玩不知不觉的就半年过去,感觉游戏真的浪费了我们不少的时间与精力。所以,能少玩游戏就少玩,能不玩就别玩。游戏上瘾了,别说青少年难戒掉,我觉得有时候自己都会陷入其中,无法自拔。网络游戏,是新型的电子毒品,我觉得不无道理。

但我决定了,在忙碌的时间里,放弃任何无意义的、浪费时间的个人娱乐节目。我需要将时间花在比较有意义的事情上面,即使没有什么收获,但起码不会纯浪费。就如现在写一些东西,记录一些事情,也比纯浪费的那种感觉好很多。我觉得再下去就已经完全跑题了,我本来是记录解决打印机卡纸问题的方法的。

MFC-7470D一体打印机屏幕提示:内部卡纸,打开前盖,拿出硒鼓单元并取出卡纸。

兄弟MFC-7470D这家伙开机如果没有任何复印与打印的任务,它是一台正常的机器。如果你复印或打印,它风扇开始工作,内部硒鼓组件转动一会儿,纸盒还没有进纸动作的时候就提示:内部卡纸 …

我打开前盖,拿出硒鼓单元,没有发现任何卡纸,并且打开后盖也都没有找到卡纸!明明是你这台机器想罢工,乱报错。肯定是传感器的问题,但是这个机器的进、出纸通道的传感器有不少呀!到底哪个部位,这就有点难度了。按照机器屏幕提示来分析,应该是进纸部分的3个传感器有问题。

拿下纸盒,纸盒上纸处有一个传感器。

这个传感器就容易拆卸,电路板在一个塑料盖子里面。在安装硒鼓单元的位置,有两个卡扣可以拆卸该传感器的塑料盖子,即可拿下这个传感器的电路板子更换光电传感器。拿下电路板测量光电传感器,C、E电极确实漏电严重了,已经更换。通电测试,故障依旧!这就头痛了,在安装硒鼓单元位置的两个传感器还有问题!难拆!!!

硒鼓单元位置的两个传感器该如何拆卸?拿下纸盒,我们可以看见上面就是安装这两个传感器的塑料盖子。其中有一颗螺丝,把它拧下,然后撬开卡扣。发现无论如何都无法拿下这个塑料盖子。这设计也太反人类了吧,难道换这两个传感器,得整台机器解体?

拆卸硒鼓单元位置的两个传感器

解体了半台机器,才能拆下这两个传感器。

拆开电源板与高压板,才能拆下这一边的主框架螺丝。拆下主框架螺丝之后,才能将上纸齿轮总成移开一侧,才能将这两个传感器组件取下来,才能将这两个传感器的光电传感器更换好,最后问题终于解决了。

无论是拆卸,还是安装,都非常累人。这兄弟的机器,用上个几年,在潮湿环境,传感器必出问题。

AMD HD6300M Win10开机黑屏2分钟左右才进入桌面

机器型号:联想笔记本电脑G470 I5-2450M AMD-HD6300M

问题描述:

该笔记本电脑升级240G固态硬盘,升级为4G内存,安装Windows10 LTSC 2019系统。然后发现安装好WIN10,显卡没有安装驱动的时候,开机很快的进入到桌面各种操作都很流畅。但是当安装好显卡驱动之后(该笔记本是双显卡),开机Windows10启动logo过后,黑屏2分钟左右,才能进入桌面。进入桌面之后,各种操作都很流畅。

继续阅读“AMD HD6300M Win10开机黑屏2分钟左右才进入桌面”

为WordPress博客文章列表的标题增加缩略图

现在已经是9102年了,整个网页一张图都没有实在是太斋了,没有任何看的欲望,虽然没有什么人看,自己看着也觉得有点枯燥。但是又得修改主题模板,CSS样式表等又要折腾不少的时间 … 每个人都有自己感兴趣的事情,比如玩一下手游,总会挤一点时间出来,花在感兴趣的事情上面。下面记录折腾过程

实现文章标题+缩略图大概思路

这是针对我自己使用的 WordPress 主题 twentyseventeen 来修改,因为没钱买更美丽的主题了。

一、文章页(blog)与目录页(category)必需按照标题+摘要的方式显示。

二、特色图片+抓取文章第一张图片+默认缩略图,输出标题缩略图。

三、完善CSS样式表。

确定了大概思路,开始修改主题的模板文件以及主题函数。

一、文章页与目录页按照标题+摘要方式显示

主题默认是显示整篇文章的,除非自己手动添加【更多(more)】布局元素。为了整体统一,修改为摘要显示方式。

修改相关的模板实现摘要显示

1、文章页(blog)使用的是index.php

2、分类目录页(category),使用的是archive.php

分别打开这两个文件,模板默结构是完整文章输出,我们修改为只输出显示摘要。

	/* Start the Loop */
	while ( have_posts() ) :
		the_post();

		/*
		 * Include the Post-Format-specific template for the content.
		 * If you want to override this in a child theme, then include a file
		 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
		 */
		/* 修改这里默认的get_post_format() 修改为'excerpt' */
		get_template_part( 'template-parts/post/content', 'excerpt' );

	endwhile;

是调用输出摘要的模板content-excerpt.php

二、特色图片+抓取文章第一张图片+默认缩略图,输出标题缩略图

twentyseventeen主题的特色图片这个功能一直都没有使用。因为该主题的特色图片的默认尺寸是2000×1200,对于网站宽带压力不小了,如果每一篇博客文章都加入特色图片的话,加载图片会特别慢了。

那么就将这个特色图片的功能用作文章标题的缩略图,将默认尺寸更改为200×200,并且将主题的 thumbnail-avatar 也设置为200×200,就不会造成生成太多种尺寸的缩略图。

1、修改主题函数 functions.php ,更改特色图片尺寸

	add_image_size( 'twentyseventeen-featured-image', 200, 200, true );

	add_image_size( 'twentyseventeen-thumbnail-avatar', 200, 200, true );

2、添加抓取文章第一张图片函数到 functions.php

//抓取文章第一张图片
function catch_that_image() {
	global $post, $posts;
	$first_img = '';
	ob_start();
	ob_end_clean();
	$output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches);
	//$first_img = $matches [1] [0];
	
	if( empty( $matches [1] [0] ) ){ //Defines a default image
		$first_img = get_theme_file_uri( '/assets/images/fz-default-thumbnail.png' );
	} else {
		$first_img = $matches [1] [0];
	}
	
	return $first_img;
}

这个抓取图片函数,如果文章没有图片,会调取默认设置好的一张图片输出。

抓取文章第一张图片函数,是网上找的代码,自己当然不懂代码,只是复制来的。但参考了一些资料,稍微做了细微的修改不知道是否合理,反正正常工作咯。

即使原本的代码也是正常工作的,但据说可能会不太合理的代码,会影响PHP性能。抓取文章第一张图片的原代码如下:

function catch_that_image() {
	global $post, $posts;
	$first_img = '';
	ob_start();
	ob_end_clean();
	$output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches);
	$first_img = $matches [1] [0];
	
	if(empty($first_img)){ //Defines a default image
		$first_img = "/default.jpg";
	}
	
	return $first_img;
}

3、输出标题缩略图

因为上面我们使用了标题+摘要的方式,因此我们需要在摘要模板 content-excerpt.php 这里添加缩略图输出。

content-excerpt.php模板源码如下:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

	<header class="entry-header">
		<?php if ( 'post' === get_post_type() ) : ?>
			<div class="entry-meta">
				<?php
				echo twentyseventeen_time_link();
				twentyseventeen_edit_link();
				?>
			</div><!-- .entry-meta -->
		<?php elseif ( 'page' === get_post_type() && get_edit_post_link() ) : ?>
			<div class="entry-meta">
				<?php twentyseventeen_edit_link(); ?>
			</div><!-- .entry-meta -->
		<?php endif; ?>

		<?php
		if ( is_front_page() && ! is_home() ) {

			// The excerpt is being displayed within a front page section, so it's a lower hierarchy than h2.
			the_title( sprintf( '<h3 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h3>' );
		} else {
			the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' );
		}
		?>
	</header><!-- .entry-header -->

	<div class="entry-summary">
		<?php the_excerpt(); ?>
	</div><!-- .entry-summary -->

</article><!-- #post-## -->

我之前加入了文章统计阅读次数的功能,但是在使用摘要显示方式之后,文章列表无法统计阅读次数了。

所以摘要模板修改为如下:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

	<?php if ( '' !== get_the_post_thumbnail() && ! is_single() ) : ?>
		<div class="post-thumbnail">
			<a href="<?php the_permalink(); ?>">
				<?php the_post_thumbnail( 'twentyseventeen-featured-image' ); ?>
			</a>
		</div><!-- .post-thumbnail -->
		
	<?php else : ?>
	
		<div class="post-thumbnail">
			<a href="<?php the_permalink(); ?>">
				<?php echo '<img src="'; echo catch_that_image(); echo '" />'; ?>
			</a>
		</div><!-- .post-thumbnail -->
		
	<?php endif; ?>

	<header class="entry-header">
		<?php		
		if ( is_single() ) {
			the_title( '<h1 class="entry-title">', '</h1>' );
		} elseif ( is_front_page() && is_home() ) {
			the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h3>' );
		} else {
			the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );
		};

		if ( 'post' === get_post_type() ) {
			echo '<div class="entry-meta">';
			if ( is_single() ) {
				twentyseventeen_posted_on();
			} else {
				echo twentyseventeen_time_link();
				twentyseventeen_edit_link();
			};
			
			//阅读次数
			echo '<span class="postviews-icon">'; echo getPostViews(get_the_ID()); echo '</span>';
			
			echo '</div><!-- .entry-meta -->';
		}
		?>
	</header><!-- .entry-header -->

	<div class="entry-summary">
		<?php the_excerpt(); ?>
	</div><!-- .entry-summary -->

</article><!-- #post-## -->

缩略图放在标题前面,代码已经可以正常工作了,统计阅读次数也可以正常工作了。代码只是可用,但并不太好(我觉得)

4、移除文章内特色图片

原本主题如果设置了特色图片,会在文章内头部显示特色图片的。所以这里要把它干掉,不然文章内标题头部出现一张200×200的小图片,很难看。

修改header.php,调用特色图片的源代码如下:

	<?php
	/*
	 * If a regular post or page, and not the front page, show the featured image.
	 * Using get_queried_object_id() here since the $post global may not be set before a call to the_post().
	 */
	if ( ( is_single() || ( is_page() && ! twentyseventeen_is_frontpage() ) ) && has_post_thumbnail( get_queried_object_id() ) ) :
		echo '<div class="single-featured-image-header">';
		echo get_the_post_thumbnail( get_queried_object_id(), 'twentyseventeen-featured-image' );
		echo '</div><!-- .single-featured-image-header -->';
	endif;
	?>

将这段代码删除掉,即可去除文章内的特色图片。

三、完善CSS样式表

样式表就各花入各眼了,我要求不高了,整洁即可,我需要的样式就如下图

CSS样式表用到了一些参数,与各种老旧浏览器的兼容性可能并不太好。我需要移动端ios的各种浏览器兼容,PC端谷歌浏览器兼容,就够了。

标题在容器内超出2行显示省略号

.entry-header .entry-title {
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
	overflow: hidden;
}

摘要设置不自动换行,超出的显示省略号

.blog .site-main > article p, .category .site-main > article p, .recent-posts > article p {
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}

那么我需要的标题右边显示缩略图,到此就已经折腾完成了。大概是已经记录完整了吧,如发现有遗漏的,有空再继续完善。