聽說百度小程序開始出現手機端搜索流量,作為SEO一員,必須搞他。但是又奈何之前做的都是微信小程序,所以用php寫了一個微信小程序轉百度小程序代碼。
修改文件后綴名
- .wxml轉換為.swan
- .wxss轉換為.css
修改文件內容
- .js文件:將wx.替換為swan.
- .swan文件:
- 循環部分:
- wx:for="{{var}}替換為s-for="var"
- wx:key替換為s-for-index
- wx:for-item替換為s-for-item
- 條件部分:
- wx:if="{{expression}}替換為s-if="expression"
- wx:elif="{{expression}}替換為s-elif="expression"
- wx:else替換為s-else
- 模板:需將data屬性兩個大括號替換為三個大括號
修改以下代碼中的小程序所在目錄,運行即可自動轉換
<?php class Convert_wx_to_bd { private $project_dir; private $ext_rules; public function __construct($project_dir, $ext_rules = array('wxml' => 'swan', 'wxss' => 'css')) { $this->project_dir = $project_dir; $this->ext_rules = $ext_rules; //修改根目錄app.wxss后綴及app.js內容 $this->convert_root(); //批量修改文件后綴:.wxml轉換為.swan,.wxss轉換為.css $this->convert_ext($this->project_dir.'/'.'pages', $this->ext_rules); //批量修改語法部分 $this->convert_text($this->project_dir.'/'.'pages'); } /** * */ private function convert_root() { //修改根目錄.wxss文件后綴 rename($this->project_dir.'/'.'app.wxss', $this->project_dir.'/'.'app.css'); //修改根目錄app.js文件語法部分 $app_js = $this->project_dir.'/'.'app.js'; $text = file_get_contents($app_js); $text = str_replace('wx.', 'swan.', $text); file_put_contents($app_js, $text); } /** * 批量修改文件后綴名 * @param $path 文件夾路徑 * @param $ext_rules 文件后綴替換規則 * @return void */ private function convert_ext($path, $ext_rules) { $handle = opendir($path); if ($handle) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != '..') { if (is_dir($path . '/' . $file)) { $this->convert_ext($path . '/' . $file, $ext_rules); } else { $path_info = pathinfo($file); $ext = $path_info['extension']; $all_exts = array_keys($ext_rules); if (in_array($ext, $all_exts)) { $src = $path . '/' . $file; $dext = $ext_rules[$ext]; $fileName = $path_info['filename']; $dest = $path . '/' . $fileName . '.' . $dext; rename($src, $dest); } } } } } } /* * js文件: * 1、wx.替換為swan. * .swan文件: * 1、.wxml替換為.swan * 2、.wxss替換為.css * 循環: * 3、wx:for="{{var}}替換為s-for="var" * 4、wx:key替換為s-for-index * 5、wx:for-item替換為s-for-item * 條件: * 6、wx:if="{{expression}}替換為s-if="expression" * 7、wx:elif="{{expression}}替換為s-elif="expression" * 8、wx:else替換為s-else * 模板: * 9、<template is="var" data="{{{var}}}" />需將data屬性兩個大括號替換為三個大括號 */ private function convert_text($path) { $handle = opendir($path); if ($handle) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != '..') { if (is_dir($path . '/' . $file)) { $this->convert_text($path . '/' . $file); } else { $path_info = pathinfo($file); $ext = $path_info['extension']; $src = $path . '/' . $file; if ('js' == $ext) { $text = file_get_contents($src); $text = str_replace('wx.', 'swan.', $text); file_put_contents($src, $text); } if ('swan' == $ext) { $text = file_get_contents($src); $text = str_replace('.wxml', '.swan', $text); $text = str_replace('.wxss', '.css', $text); $text = preg_replace("/wx:for=([\"|'])\{\{(.*?)\}\}([\"|'])/", "s-for=$1$2$3", $text); $text = str_replace('wx:key', 's-for-index', $text); $text = str_replace('wx:for-item', 's-for-item', $text); $text = preg_replace("/wx:if=([\"|'])\{\{(.*?)\}\}([\"|'])/", "s-if=$1$2$3", $text); $text = preg_replace("/wx:elif=([\"|'])\{\{(.*?)\}\}([\"|'])/", "s-elif=$1$2$3", $text); $text = str_replace('wx:else', 's-else', $text); $text = preg_replace("/data=([\"|'])\{\{(.*?)\}\}([\"|'])/", "data=$1{{{\$2}}}$3", $text); file_put_contents($src, $text); } } } } return false; } } } $obj = new Convert_wx_to_bd('C:/mini'); exit('SUCCESS!'); ?>