听说百度小程序开始出现手机端搜索流量,作为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!');
?>

  

微信小程序转百度小程序代码的更多相关文章

  1. 微信小程序转换为百度小程序

    据粗略预估,微信小程序和百度小程序,有至少90%以上的相似代码,而且api的参数和返回的数据都是一致的,有一些不一致的将做如下介绍:.wxml文件,改成后辍名.swan.wxss文件,改成后辍名为.c ...

  2. 微信小程序转百度小程序修改

    百度小程序对比微信小程序(最初版):[设备]项里没有内存监控.iBeacon.wifi.蓝牙.用户截屏.手机联系人.NFC[位置]项里没有打开地图选择位置[界面]项里没有绘图功能.没有节点信息获取功能 ...

  3. 百度小程序-form表单点击提交,input框内容不会清空

    百度小程序与微信小程序相似度90%.微信小程序转换为百度小程序,部分还是需要人工修改! 做了一个form留言表单,点击提交之后,input框第一次会清空,但是第二次就不会清空了! 不多说直接上代码! ...

  4. 微信小程序接入百度统计

    一. 百度统计添加应用,获取appkey和微信小程序统计sdk: 1. 百度统计首页,点击“我的全部应用”右侧的添加按钮: 2. “应用类型”选择小程序统计,选择微信小程序,填写应用名称信息,选择内容 ...

  5. 微信小程序接入百度OCR(身份证识别)

    微信小程序接入百度OCR(身份证识别) 1.接口描述 支持对二代居民身份证正反面所有8个字段进行结构化识别,包括姓名.性别.民族.出生日期.住址.身份证号.签发机关.有效期限,识别准确率超过99%:同 ...

  6. 记录一次用宝塔部署微信小程序Node.js后端接口代码的详细过程

    一直忙着写毕设,上一次写博客还是元旦,大半年过去了.... 后面会不断分享各种新项目的源码与技术.欢迎关注一起学习哈! 记录一次部署微信小程序Node.js后端接口代码的详细过程,使用宝塔来部署. 我 ...

  7. 微信小程序(有始有终,全部代码)开发--- 新增【录音】以及UI改进

    开篇语 寒假发了一篇练手文章,不出意外地火了: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本,出乎意料的火了: 简年18: ...

  8. 微信小程序(有始有终,全部代码)开发--- 新增模块: 图片选取以及拍照功能

    开篇语 前几天发了一篇: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本: 简年18: 微信小程序(有始有终,全部代码)开发 ...

  9. 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 Bug修复

    开篇语 昨晚发了一篇: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 然后上午起来吃完午饭之后,我就准备继续开工的,但是突然的,想要看B站.然后在一股 ...

随机推荐

  1. mysql 安装为服务 ,mysql.zip 安装为服务,mysql搬移迁移服务器安装为服务

    从服务器A打包到服务器B后,在服务器B中运行安装服务命令,可自定义服务名,一台服务器上可装N个MySql实例 mysqld --install MySQL_0001 --defaults-file=D ...

  2. Linux内核参数详解

    所谓Linux服务器内核参数优化(适合Apache.Nginx.Squid等多种web应用,特殊的业务有可能需要做略微调整),主要是指在Linux系统中针对业务服务应用而进行的系统内核参数调整,优化并 ...

  3. IDEA中MavenWeb项目没有新建servlet文件

    解决方案: https://blog.csdn.net/Delicious_Life/article/details/89515363

  4. day17——序列化、os、sys、hashlib、collections

    day17 序列化 json 两组4个方法: 1.dumps(序列化) -- loads(反序列) dumps(list):将对象转换成字符串 loads(str):将字符串转换成对象 list--s ...

  5. Ramdisk根文件系统映像的修改与创建

    本文简述Ramdisk根文件系统映像的修改以及创建,并附相关脚本以实现自动化配置,而根文件系统的制作过程请网上自行搜索.相关过程尽可能以图的方式展示出来,重在说明操作的过程,仅供参考. Ramdisk ...

  6. mysql测试,配置环境 mysql' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    参考链接:https://www.cnblogs.com/ios9/p/9713388.html 1.设置一下环境变量:        右击我的电脑——>属性——>高级系统设置——> ...

  7. Spring AOP 创建Advice 定义pointcut、advisor

    前面定义的advice都是直接植入到代理接口的执行之前和之后,或者在异常发生时,事实上,还可以对植入的时机定义的更细. Pointcut定义了advice的应用时机,在Spring中pointcutA ...

  8. Parameter 0 of method sqlSessionTemplate in org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration required a single bean, but 2 were found:

    Parameter 0 of method orderSqlSessionFactory in com.config.MultipleDBConfig required a single bean, ...

  9. springboot笔记10——整合Redis

    依赖 <dependencies> <!--web依赖--> <dependency> <groupId>org.springframework.boo ...

  10. java 8新内容整理

    目录 一.Java 8 Lambda 表达式 1.1 语法 1.2  Lambda 表达式实例(常见) 二.Java 8 Stream 2.1 什么是 Stream? 2.2生成流 2.3  forE ...