【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('/hrefs*=s*(['"])s*//','href=1'。$协议。$domain。/',$content);

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

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

$new_content

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

$new_content

=preg_replace('/srcs*=s*(['"])(?!(http|https)://)/','src=1'。$协议。$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'){//自动跳转兼容站识别是否为手机形成,不伤害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);//替换

/*Key对于在线编辑器形成的内联样式,将内联样式转换为head的样式标识*/

if(preg_match_all('/sstyles*=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);

}

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

动态移动台默认设置为:

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://54852.com/zz/769481.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存