忘记挂载数据盘,将AMH面板安装到了系统盘,重新挂载数据盘并将AMH数据转移到数据盘的方法如下。

1、查看数据盘

在没有分区和格式化数据盘之前,使用 “df -h”命令,是无法看到数据盘的,可以使用“fdisk -l”命令查看。

2、对数据盘进行分区执行“fdisk /dev/vdb”命令,对数据盘进行分区;(vdb为数据盘名称,请根据各自服务器商的实际名称自行更改)根据提示,依次输入“n”,“p”“1”,两次回车,“wq”,分区就开始了,很快就会完成。

阅读全文

使用FFmpeg获取视频封面的时候出现这个错误:Fatal error: Uncaught exception 'Alchemy\BinaryDriver\Exception\ExecutableNotFoundException' with message 'Executable not found, proposed : avprobe, ffprobe'...

由于是换了一个服务器,原来的功能是正常的,换了以后不正常了,应该就是当前服务器某些服务没有装到位或者配置错误了。ffmpeg肯定是装了,但是ffprobe不确定服务器上是否已经安装,于是在服务器上尝试查询ffprobe版本:

ffprobe -version

输出的结果:

Command 'ffprobe' not found, but can be installed with:
apt install ffmpeg

可能还是ffmpeg安装的位置不对,按照提示重新安装ffmpeg,问题解决。

阅读全文

给页面添加父级分类有利于将页面清晰地分类,同时也便于在前台将同一类型的页面展现在同一个分类(父页面)下。但是typecho并没有给页面设置父页面的功能,但自己添加也很方便。

首页需要创建一个读取页面的函数供后台调用,打开/var/Widget/Base/Contents.php,将下方代码复制进去。

/**
     * 获取已经发布的页面
     *
     * @return array
     */
     
    public function getPages(): array
    {
        $pages = $this->db->fetchAll($this->db
            ->select()->from('table.contents')
            ->where('table.contents.type = ? AND table.contents.status = ? ', 'page', 'publish')
            ->order('table.contents.order',"desc"));
            
        return $pages;
    }

然后打开后台编辑页面的文件(/admin/write-page.php),将下方代码复制到右边侧栏。

<section class="typecho-post-option">
                            <label for="parent" class="typecho-label"><?php _e('父级分类'); ?></label>
                            <p>
                            <?php
                             $parents = $page->getPages();
                            ?>
                                <select name="parent" id="parent">
                                    <option value=""><?php _e('不选择'); ?></option>
                                    <?php
                                    
                                    foreach ($parents as $parent): 
                                        $parent_id = $parent["cid"];
                                        $parent_title = $parent["title"];
                                        ?>
                                        <option value="<?php echo $parent_id; ?>"<?php if ($parent_id == $page->parent): ?> selected="true"<?php endif; ?>><?php echo $parent_title; ?></option>
                                    <?php endforeach; ?>
                                </select>
                            </p>
                        </section>

效果如图:

阅读全文

之前也写了一篇如何将Typecho中文标签转拼音的教程,但是那个方法有很大缺陷,很多并不生僻的字都无法转换,只有另外寻找其它方法。

发现一个比较好用的汉字转拼音的扩展工具overtrue/pinyin,可以完美解决汉字转拼音的问题。

第一步,首先需要将overtrue/pinyin拓展安装到本地。

composer require overtrue/pinyin

第二步,在typecho配置文件config.inc.php中引入转换工具文件:

阅读全文

Typecho并没有像wordpress那样单独管理菜单的功能,而是需要在header文件里面修改,所以也没有相对便捷管理菜单的方法,如果在一级菜单下面添加了子菜单,那么二级菜单也会跟一级菜单并排显示,那怎么样实现把二级菜单放到一级菜单的下拉呢?研究了一下,可以通过单独读取出来写入一个动态的菜单里面去,代码如下:

function mainmenu(){
    $html = '<ul id="mainmenu"><li><a href="/">首页</a></li>
<li><a class="hot" href="/cuxiao.html">热门促销<hd>活动</hd></a></li>
<li><a href="/taobao.html">淘宝<hd>优惠券</hd></a></li>
<li><a href="/jingdong.html">京东<hd>优惠券</hd></a></li>
<li><a href="/brands.html">品牌</hd></a></li>';
    $db = Typecho_Db::get();
    $categories = $db->fetchAll($db->select('table.metas.*')->from('table.metas')
    ->where('table.metas.type = ?',"category")
    ->order('table.metas.order', Typecho_Db::SORT_ASC));
    $category_arr = [];
    if($categories){
        foreach($categories as $category){
            $parent = $category["parent"];
            $category_arr[$parent][] =$category;
        }
    }
    $category_level_1 = $category_arr[0];
    foreach($category_level_1 as $_category){
        $mid = $_category["mid"];
        if($category_arr[$mid]){
            $has_submenu = " class='has_submenu'";
        }
        else{
            $has_submenu = "";
        }
        $html .= "<li".$has_submenu."><a href='/".$_category["slug"]."'>".$_category["name"]."</a>";
        if($category_arr[$mid]){
            $html .= "<ul class='sub_menu'>";
            foreach($category_arr[$mid] as $_sub_category){
                $html .= "<li><a href='/".$_sub_category["slug"]."'>".$_sub_category["name"]."</a>";
            }
            $html .= "</ul>";        
        }
        $html .= "</li>";
    }
    $html .= "</ul>";
    return $html;
}

把上面这段代码加入到主题的function.php文件里央,然后只需要在调用的地方引用这个菜单函数即可。

css样式:

mainmenu{ list-style:none; margin:0px; padding:0px;}#mainmenu li{ display:inline-block;margin-bottom: -4px; position:relative;}#mainmenu li ul li{ display:block; width:100px; text-align:center;}#mainmenu li ul li a{ width:100%; padding:0px;}#mainmenu li ul li:last-child a{ border:1px solid #eee;}.sub_menu{ display:none; position:absolute; top:32px; left:0px; padding:0px; margin:0px; background-color:#fff; z-index:9;}

阅读全文