【MIP技术分享】dedecmsgbk站点mip改造方案

【MIP技术分享】dedecmsgbk站点mip改造方案,第1张

【MIP技术分享】dedecms/gbk站点mip改造方案

序言:

最近有人试图在一个dedecms/gbk手机网站上更新整个网站的源代码mip,该网站已经自动跳转兼容。经过一系列完善的想法和测试,最终得以实现。回顾整个过程,关键问题可以分为以下几点:

1。非utf-8站点的编码问题

前段时间宋同学在站长社区公布了刚刚安装utf-8cms,更改数据库查询代码的示例教程。起初,我也有类似的想法。但是由于网站的二次开发和一些乱七八糟的附加文件,重新安装cms很难恢复之前的改动。这个想法死了。之后,当数据库查询开始时,我试图用gbk代码加载它。测试转换后,虽然访问总体正常,但之后还是出现了一些问题和少量的错码,放弃了计划。最后灵光一现——为什么要担心程序运行的全过程?转换成静态网页时完全可以更改和整改!突然翻盘的感觉溢于言表,测试确实可行。后来的事后问题(比如下面的问题2和问题3)会越来越容易解决。

2。困难的问题

<a>、<img>/<mip-img>等标识中的相对路径需均变换为详细url,这一在现阶段实例教程里好像沒有明确指出,网站根目录相对路径还行,主要是相对性当今网页页面途径变换详细url需再加上所属文件目录一些难度系数(尤其是标识启用转化成的相对路径,如分页查询)。<a>、<img>/<;MIP-img>;logo中的所有相对路径都要转换成详细的url,目前的示例教程中似乎没有明确指出。网站根目录的相对路径是可以的,主要是因为相对性。改变当今网页的详细网址需要加上它所属的文件目录的一些难度系数(尤其是启用logo转换的相对路径,比如分页查询)。

3。内嵌样式难题

模板中的内联样式可以手动纠正。虽然繁琐,但是难度系数不大。关键问题还是看后台管理。文章内容发布时,cms在线编辑器会自动生成各种不符合mip标准的初始代码。除了对在线编辑器修修补补,很难解决其他任何问题。

4、js拼图

Mip标准限制了js的应用,真的很头疼。好在我更新的网站中js很少,所以删除一些实际效果,应用当前的组件替换,也会解决这个问题。不过还是希望百度搜索mip精英团队可以考虑这个级别的标准计划来升级。很多网站都有大量的js代码无法移除,用组件的方式提交也很费力,而且程序必须是基本的。其他问题也可以按照统一示例教程来处理,但是js上的mip更新改造不能这样。按照现在的限制,很多站长将别无选择,只能放弃mip更新改造。

5。其他小问题

发现有少部分样式是矛盾的,需要根据具体情况对自己的css做一些改动。

发现mip缓存无法识别网站中照片的302跳转,比如原应用302跳转的照片,mip生效后照片不显示。问题已经和百度搜索的专业技术人员沟通过了,说可以事后申请。在这个阶段,我添加了一段代码来解决问题。

应用程序错误(例如mip-carousel组滚动照片集

mip推出并提交后,获得了成功。没有提交记录和资料,客户体验有一定欠缺。

主题:根据dedecms/gbk的全站源代码进行mip更新改造

第一部分:模板更改

1。js零件:删除或应用当前零件替换。

2。启用百度搜索mip文件:

Put

Put

3。put

4。外部通用css文件:建议将css文件中的样式代码放在

模板中的内联css可以手动搜索和替换,并组合成

注:以上的大部分实际操作都可以按照批量查找和替换来进行。看起来很多改变是必须的,但具体的劳动量并不太大。

第二部分:体系文件的更改

静态数据转换成移动站:

在/include/dedetag.class.php文件中查找函数的数量,其中分析模板作为文档输出:

函数保存到($文件名)

{

$fp=@fopen($filename,"w")或die("dedetagEngineCreateFileFalse");

fwrite($fp,$this->;GetResult());

fclose($FP);

}

替换为(某些代码可以根据具体情况进行修改):

//函数文档的转换方式。$content:编码源,$feed_url:主页,$f_url:相对路径的文件目录的一部分

functionrelative_to_absolute($content,$protocol,$domain,$f_url){

//网站根目录相对路径(如href="/a/b.html")转换

$new_content=preg_replace('/href\s*\=\s*[\'"])\s*\//','href='。$协议。$domain。/',$content);

$new_content=preg_replace('/src\s*\=\s*[\'"])\s*\//','src='。$协议。$domain。/',$new_content);

//当页面相对于路径发生变化时(如href="a/b.html")

$new_content

=preg_replace('/href\s*\=\s*([\'"])(?!(http|https):\/\/)/','href='。$协议。$domain。$f_url,$new_content);

$new_content

=preg_replace('/src\s*\=\s*([\'"])(?!(http|https):\/\/)/','src='。$协议。$domain。$f_url,$new_content);

返回$new_content

}

函数保存到($文件名)

{

$fp=@fopen($filename,"w")ordie("dedetagEngineCreateFileFalse");

If(substr($_server['php_self'],-6)=='_m.PHP'||substr($filename,-13)=='/m/index.html'){//自动跳转兼容站识别是否转换为手机用gbk码,不伤害pc的GBK码。如果手机是单独的网站,这个判别标准应该去掉。

$f_URL=explode('www.websitedomain.com/m',dirname($filename));//拆分路径,得到当前页面相对路径的一部分文件目录。

//比如dirname($filename)获取的本地绝对路径是D:/WWWROOT/www.website-domain-name.com/m/yygk/xwzx,利用网址导航“www.website-domain-name.com/m”作为logo分段方式获取文件目录的一部分“/YYGK/XWZX”。

$html=$this->;GetResult();

$html=$this->;Relative_to_absolute($html,'http://','m.websitedomainname.com',$f_URL[1]。'/');//更改相对于路径的绝对路径

$html=str_replace('<;metacharset="gb2312">,'<metacharset="utf-8">;',iconv('gbk','utf-8//ignore',$html));//转换为utf-8编码,声明fwrite会将其转换为匹配编码的静态网页。

$html=str_replace('<;一个','<atarget="_blank"',$html);//<;a>标记加目标

$html=str_replace('<img','<mip-img',$html);//更换<img>标识$html=str_replace('<;img','<mip-img',$html);//替换

/*键对于在线编辑器转换的内联样式,将内联样式转换为head的样式logo*/

if(preg_match_all('/\sstyle\s*\=\s*[\'"](。*?)[\'"]/',$html,$css)){

$CSS0=array_unique($CSS[0]);//过度思考和重复样式

foreach($CSS0as$k=>;$v){

$html=str_replace($v,'class="mip_add_css_'。$k.'"',$html);//mip_add_css_是自定义样式名的前缀,可以独立更改,但要防止与原样式名重复。

$temp_name='mip_add_css_'。$k;

$$temp_name=$CSS[1][$k];

$add_css。='.'。$temp_name。'{'.$css[1][$k]。”}\n”;

}

$html=str_replace('<;'styleMIP-custom>;',"<样式MIP-自定义>\n"。$add_css,$html);

}

fwrite($fp,$html);

}else{//pc端实现

fwrite($fp,$this->;GetResult());

}

fclose($FP);

}

注:这个方案基本测试是成功的,因为转换成静态数据文档的时候程序处理有所提升,理论上对转换成高效率会有一定伤害。另外,如果不清楚存在问题的概率,有什么问题或者其他想法,可以在百度站长社区发帖进行相互的科研讨论。

默认设置动态移动台:[/S2/]

1.将/m文件目录中的三个php文件,即index.php、list.php和view.php的代码改为utf-8。

2.在/include/dedetag.class.php文件中查找分析模板立即输出的函数数量:

功能显示()

{

echo$this->;GetResult();

}

替换为:

功能显示()

{

$html=str_replace('<;'metacharset="GB2312">;','<'metacharset="utf-8">;',$this->;GetResult());//转换为utf-8编码声明,其中源内容为$this->:Get()不需要转码。

echo$html

}

也就是动态网页可以通过utf-8编码输出。其他解决方案请参考静态数据转化为网站规划方案的编码。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/764013.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存