阅读时间:10分钟 (2092字)

如何将门户网站从Joomla 1迁移到3

How I Migrated a Portal from Joomla 1 to 3

本文描述了如何将一个包含超过10000篇以西里尔字母编写并使用特殊字符的大型网站从Joomla 1.x迁移到Joomla 3.x。

任务:将网站preminportal.com.mk从Joomla 1.x迁移到Joomla 3.x。该网站运行在Joomla 1.0.13上,数据库大小为320 MB,根目录大小为3.5 GB。

更详细地说,数据库包含

  • jos_content = 15493行;
  • jos_menu = 131行;
  • jos_modules = 457行;
  • jos_sections = 23行;
  • jos_categories = 127行;
  • jos_users = 402行。

为了避免实时网站的长时间延迟,我的想法是在我的电脑上本地进行整个迁移,然后只需将其移动到网站托管处。我没有传输图像、音乐和其他文档的文件夹,因为我决定不更改它们的地址(例如,从images/stories到images/),以避免在所有文章中大量更改路径。

为了本地工作,我使用了USBWebServer。为了使导入数据库成为可能,我必须将php.ini中的memory_limit、upload_max_filesize和post_max_size语句的值增加到大于400MB。

在USBWebServer根目录下,我创建了一个名为'oldsite'的文件夹,并在其中提取了旧preminportal.com.mk网站文件夹(仅包含Joomla 1.0.x的核心文件夹)。在USBWebServer上,我创建了一个名为'oldsite'的数据库,当然我设置了数据库排序规则为utf8-general-ci,因为该网站使用西里尔字母('oldsite'的数据库名称只是一个示例,在你的情况下你需要使用你真实数据库的名称)。

在configuration.php中,我更改了以下行

  • $mosConfig_db = 'oldsite';
  • $mosConfig_absolute_path = 'C:/USBWebserver-za-Premin\root'(路径需要是USBWebsrever的真实位置);
  • $mosConfig_live_site = 'C:/USBWebserver-za-Premin\root'(路径需要是USBWebsrever的真实位置);
  • $mosConfig_error_reporting = '0'(仅当值不为零时,避免显示错误);
  • $mosConfig_password = 'usbw'(USBWebserver的标准密码,如果您更改了它,则使用您自己的密码);
  • $mosConfig_user = 'root'(USBWebserver的标准用户名,如果您更改了它,则使用您自己的用户名);
  • $mosConfig_live_site = 'https://:8080'(USBWebserver根目录的标准URL,网站的所有部分正确加载都需要它)。

在本地使用Joomla 1.0.x进行工作时,我使用了USBWebSerever版本8,它包含PHP 5.3.2。这是一个较老的版本,但在这种情况下是必要的,因为它具有magic_quotes_gpc,并且需要在php.ini文件中将它们设置为开启,以便网站可以打开。出于安全原因,在PHP的新版本中不使用这些语句。

现在网站已经完全在本地复制(文章中没有图片,但最终当网站上传到服务器时,它们将找到自己的路径),迁移可以开始了。

我遵循了http://docs.joomla.org/J1.5:Migrating_from_1.0.x_to_1.5_Stable(是的,首先网站必须迁移到Joomla 1.5.x,然后才是最新版本)。因为网站在Joomla 1.0.13上,我下载了推荐的补丁http://forum.joomla.org/download/file.php?id=36573.

为了节省您的时间:迁移后我发现数据库的大小翻倍了,所以我不得不重新进行迁移。在论坛中我发现问题可能是来自垃圾桶中的文章,所以我打开了Joomla 1.0版本的管理员,发现了700多篇文章和20个菜单在垃圾桶中,所以我清空了它们。此外,在迁移之前,从旧网站上删除所有未发布的文章、类别和版块。完成这些后,我继续迁移过程。

Joomla 1.0没有按状态(已发布/未发布)对文章进行排序的功能,在如此大的数据库中,很难轻松找到所有未发布的条目。因此,我产生了修改一些代码的想法。

在文件 ./administrator/components/com_content/admin_content.php 的第145行是指向状态显示的行,它指示显示所有等于或大于零的条目

"c.state >= 0"

其中0是未发布,1是已发布,所以稍作修改为

"c.state = 0"

现在我只显示未发布的文章,这样我就可以选择它们并将它们放入垃圾桶。

有830篇未发布的文章,其中近100篇是特色文章,这可能也导致了“重复”问题。清理所有不必要的文章后,我将admin_content.php中的行改回原样,现在文章管理器显示11296篇文章,其中3560篇是特色文章,2572篇是存档。

我还将所有未发布的类别、版块、菜单和子菜单放入垃圾桶。还有两个没有文章的版块和一个没有项目的菜单,所以我也将它们放入垃圾桶。我还将所有未发布的模块(除核心模块如登录外,这些模块不能放入垃圾桶)放入垃圾桶。

所有第三方mambots、模块和组件也被卸载或放入垃圾桶,以及它们在数据库中的相关表。所有禁用的用户也被删除,以及所有未使用的模板。

然后在垃圾桶管理器中清空了所有实例的垃圾桶。然后我清除了缓存。接下来,在PHPMyAdmin中,我选择了所有有冗余的表并优化了它们。之后,所有表的冗余都是0。

下一步,安装组件Migrator,该组件将数据库从Joomla 1.0迁移到1.5。此组件创建一个sql文件,该文件需要导入到Joomla 1.5的干净安装中。

现在我将Joomla 1.5.26的安装文件放在一个名为'oldsite15'的文件中,并创建一个名为'oldsite15'的新数据库,使用utf8-general-ci校对。

我在1.5.26的安装过程中尝试了多次导入迁移文件。默认提供的编码ISO-8859-1无法使用。我尝试只使用utf-8编码,但总是遇到以下错误

通知:iconv() [函数.iconv]:在...\安装\安装程序\helper.php的第873行检测到输入字符串中的非法字符。

helper.php文件中的第873行是:

$buffer = iconv( $srcEncoding, 'utf-8//TRANSLIT', $buffer );

在论坛上对iconv函数及其参数进行了简要调查后,我决定尝试使用

$buffer = iconv( $srcEncoding, 'utf-8//IGNORE', $buffer );

我这样做是因为通知中显示的第一个错误

错误发生在第9行:INSERT INTO jos_migration_backlinks
VALUES(1,"Дома","index.php?option=com_frontpage&Itemid=1","component/option,com_frontpage/Itemid,1/","");
查询:## 使用Migrator 1.3为Joomla! 1.0创建
INSERT INTO jos_migration_backlinks VALUES(1,"�опа","index.php?option=com_frontpage&Itemid=1","component/option,com_frontpage/Itemid,1/","");

在第一行中,Joomla通常读取单词'Дома',但之后它变成了奇怪的字符'Ð�опа',所以我想这可能是转写问题。

现在迁移已完成,只出现两个小通知,最后显示了一条成功迁移的消息。最后,我可以在Joomla 1.5中查看网站,并看到正常的西里尔字母和所有可读文本。

在1.5版本中,我安装了Akeeba备份3.4.6,并在此时进行了备份。

现在,在最新的USBWebServer 8.5版本上,我将尝试安装新的Joomla 3.3.6,并尝试从1.5.26迁移网站。为了实现这一点,您需要在同一服务器上同时拥有1.5.26和3.3.6数据库,所以我会从这个备份中安装1.5.26版本。

我创建了一个名为'newsite3'的新文件夹和一个名为'newsite3'的数据库,用于Joomla 3.3.6,其排序规则为utf8-general-ci,以及一个名为'oldsite15'的数据库,用于Joomla 1.5.26,其排序规则为utf8-general-ci。

在干净的Joomla 3.3.6安装中,我运行了redMigrator组件。在其选项中,我选择仅迁移oldsite15数据库。redMigrator在23%时停止,所以我尝试了几次,并对选项进行了一些更改,但问题依然存在。我尝试增加memory_limit,redMigrator成功迁移了11296篇文章中的3300篇,然后再次卡住。

接下来,我尝试了一个名为MigrateMe的组件,它导入1.5数据库并将其转换为版本3。MigrateMe导入数据库文件并开始分析,但后来卡住了。

我听说SPupgrade工作得很好,所以我尝试了一下,始终从全新的Joomla 3安装开始。

安装SPUpgrade后,我将所有设置保留为默认值。我将其连接到'oldsite15'数据库,并运行了超过两小时。在这段时间内,在Firefox中,唯一可见的迹象是名称栏中旋转的图标。偶尔在PHPMyAdmin中检查数据库状态,我看到行数有所变化,这是一个好兆头。超过两小时后,网站自动注销并显示登录页面。

我登录后看到了SPUpgrade的状态报告,其中包括发生了什么,最终更改以及底部的消息:“迁移成功”。所有菜单、分类、模块和文章都完好无损。请注意,旧版本的Joomla 1.0和1.5有部分和分类,而在Joomla 3中,部分=分类,分类=子分类。

现在在数据库中,包含文章版本的表ucm_history大小为316 MB。我清空了它,因为Joomla 1.0中的文章没有版本。版本控制是在Joomla 3中实施的。

在Joomla 1.0中的文章没有友好的URL,所以我决定纠正这个问题:所有文章都将有友好的URL。请注意,在这种情况下,所有来自其他网站到您旧的不友好URL的旧链接都将丢失或需要更改。

首先,因为所有文章标题都是马其顿西里尔文,我需要安装马其顿语言并在网站的行政部分激活它。这使Joomla能够自动将马其顿西里尔文标题转换为拉丁字符。为此,您需要打开一个文章进行编辑,删除旧的别名并保存文章。在保存的过程中,Joomla将自动生成一个新的良好转写的别名。但在我这个例子中,文章太多,所以我需要一个更快的解决方案。

在网上,我发现了一个建议使用批量按钮。在数据库中的xyz_content表,所有别名都被替换为空/无。然后创建一个新临时分类,并使用这个新分类中的批量按钮删除所选文章。当Joomla转移这些文章时,它将保存每篇新文章,从而触发别名的自动生成。之后,只需再次使用批量按钮将文章转移到原始分类即可。当然,为了避免混乱的文章,这个过程需要按分类逐个进行。注意,描述的过程不适用于菜单和分类别名 - 它们需要逐个打开和保存。

我为菜单和分类创建了新的别名。现在为文章。首先,通过PHPMyAdmin在xyz _content表中更改所有文章的别名

UPDATE `xyz_content` SET `alias`=''

并遵循上述建议。这个过程是有效的,但非常慢。为了防止文章版本,我禁用了版本控制。在临时分类中,批量过程非常慢,一次处理一篇文章。但从临时分类返回原始分类的速度很快。我得出结论,这种方法将花费太多时间,所以我决定直接在数据库中寻找解决方案。

我在官方Joomla论坛上提出了问题:[http://forum.joomla.org/viewtopic.php?f=710&t=868696&sid=e10730d81ad7cbb61c2ed875d857e126](http://forum.joomla.org/viewtopic.php?f=710&t=868696&sid=e10730d81ad7cbb61c2ed875d857e126)。Manicakm建议我使用

SELECT `title`,replace(replace(lower (`title`),' ','-'),"'",'') FROM `xyz_content`

并检查这种类型的别名是否适合我的目的。检查显示所有新别名都将使用西里尔文。

之后,使用以下命令

UPDATE `xyz_content`
SET alias=replace(replace(lower (`title`),' ','-'),"'",'')

我将所有别名几乎都变成了友好形式,但它们是西里尔文。这并不坏,但我能否更进一步,使所有别名都转写为拉丁文?

pe7er建议使用以下命令检查

SELECT alias, COUNT(*) c FROM xyz_content GROUP BY alias HAVING c > 1

这个命令显示许多别名包含不友好的字符,如+,.„“()!?"’蔑ћђ✣✤等。

现在,这些字符需要根据它们在标题中的位置和使用情况进行替换为'-'或空/无。

我用以下命令做了这件事

UPDATE xyz_content
SET alias = REPLACE(alias,'+','')

或者

UPDATE xyz_content
SET alias = REPLACE(alias,'✤','-')

在替换所有有问题的字符后,我使用相同的方法将别名中的所有西里尔文字符替换为其拉丁转写。最终我拥有了好的拉丁转写友好URL。

现在,我根据新Joomla 3.3.6网站的根目录中的路径复制了所有图片、音乐、Flash文件、PDF文件、演示文稿和其他文档。我安装了一个新模板并进行了自定义,安装了最新的Akeeba备份,在实时服务器上恢复了网站,并且网站完全可用。

《Joomla社区杂志》上发布的一些文章代表了作者对特定主题的个人观点或经验,可能并不与Joomla项目的官方立场一致。

0
秘密Joomla!SEO - 重定向管理器(...
 

评论

已经注册? 在此登录
尚无评论。成为第一个发表评论的人

通过接受,您将访问https://magazine.joomla.net.cn/外部第三方提供的服务