从JoomGallery迁移到Phoca
迁移Joomla网站的过程有时会给用户带来一些不平凡挑战。如果您的网站使用的是标准组件,迁移过程通常是直接了当的,有时甚至像是孩子的游戏。
在这种情况下,您可以创建网站的副本,将其更新到Joomla版本4或5,然后继续设置或设计新的模板。在这些情况下,内容通常可以顺利迁移。
但如果你需要迁移不同类型或更复杂的内容呢?
在某个特定的客户项目中,我遇到了迁移Joomla 3.10.12上运行的网站图库组件的挑战。客户具体使用的是JoomGallery组件。不幸的是,在撰写本文时,根据官方网站的说明,JoomGallery的Joomla 4/5版本仍处于alpha阶段,不建议在生产网站上更新。它仅适用于测试目的,这对一个实际可用的生产网站来说并不是一个理想的情况。我的任务部分是将所有类别和照片转移到PhocaGallery。
从一种扩展手动迁移到另一种
如果你试图寻找这个迁移器或脚本,你会发现在此方面没有太多选择,如果有的话。所以,我决定手动完成它——毕竟,我们有PHPMyadmin的访问权限,在那里我们可以研究和比较如何组织一切,并尝试自己编写查询。然而,在开始SQL查询之前,应在图库中进行初步操作。
在网站的副本上,甚至在迁移之前,我就已将JoomGallery更新到了3.7版本,后来又更新到了最新的alpha版本。
但现在我认为这是一个错误,因为我安装这些新版本时,数据库中类别和文件的名称发生了变化。原本使用“_”符号的地方,现在变成了短横线“-”。这后来在我的问题中增加了难度,当我找到内容编辑器中的文件路径,或在数据库的字段表中查找时。
准备工作
在我提供的迁移网站上,照片从2017年起由不同的编辑收集,他们在网站存在的初期,并不知道如何以逻辑或有序的方式准备所有内容。因此,我决定首先在JoomGallery中组织所有类别及其中的类别和照片,清理所有不必要的部分,并将它们分配到子类别中。我决定可以根据时间顺序按年份组织所有内容。较新的类别已经根据其父年份放置在子类别中。我们创建了缺失的年份类别并将事件类别移至其中。之后,我们检查了前端的所有内容。
处理完所有这些后,我们可以开始查看数据结构以及我们需要完成的事情。
识别字段
我们需要以下字段:id - 唯一标识符,parent_id - 父类别标识符,如果类别不是根类别,owner_id - 所有者标识符,alias, title - 类别名,userfolder - 存放该类别照片的文件夹。可能一些用户在其他字段中可能有额外的数据,所以需要匹配并添加到查询中。
xcfy2_phocagallery_categories | xcfy2_joomgallery_catg |
查询以填充Phocagallery表中的JoomGallery内容
自然,现在我们在一个网站上有了两个画廊 - 旧的和新的,因此两个扩展的表都在同一个数据库中。一切准备就绪后,我们开始编写查询。我们需要比较两个扩展中类别的表。我们使用表 xcfy2_joomgallery_catg 和 xcfy2_joomgallery 分别将数据插入到表 xcfy2_phocagallery_categories 和 xcfy2_phocagallery 中。
向 `xcfy2_phocagallery_categories` 插入 (id, parent_id, owner_id, title, alias, published, userfolder) select cid, parent_id, owner, name, alias, published, catpath from `xcfy2_joomgallery_catg`
结果,增加了220行。然而,有一个小细节:JoomGallery从根类别开始计数类别,而Phoca Gallery处理方式不同,所以我后来检查了主要类别并删除了父类别,因为我只有7个。
接下来,我们移动了所有照片。查询类似
向 `xcfy2_phocagallery` 插入 (id, catid, title, alias, filename, date, published, approved, hits) select id, catid, imgtitle, alias, imgfilename, imgdate, published, approved, hits from `xcfy2_joomgallery`
纠正图像路径
现在我们进入 组件 -> Phocagallery 并检查我们的类别和照片。这里我们遇到了另一个问题 - 图像文件的路径不匹配。首先,我们需要使用托管文件管理器或通过 (S)FTP物理移动(或复制)从文件夹 'joomgallery/originals' 中的照片到 'phocagallery'。
然后我必须对表 'xcfy2_phocagallery' 进行备份,将其下载到我的电脑上,并使用 '搜索和替换' 通过所有类别进行操作,替换每个类别中文件的路径。如我之前提到的,编辑过去没有系统地进行所有操作,所以需要检查一切。
移动画廊不是我要做的唯一事情。在内容文章中,编辑(内容经理)使用了Joomgallery的照片,在许多文章中可以找到img标签,例如
<img style="display: block; margin-left: auto; margin-right: auto;" src="/images/joomgallery/details/__19/4_03_2021_some_category_fos_183/4_03_21_same_foto_7_20210307_1009651488.jpg" width="700" />
这里我们需要在数据库中进行“查找和替换”
SELECT * FROM `xcfy2_content` WHERE `introtext` LIKE '%joomgallery%' 并找到一些,例如
<img style="display: block; margin-left: auto; margin-right: auto;" src="/images/joomgallery/originals/__19/24_12_2021_pasterka_202/erc_2847_20211227_1002682471.jpg">
在许多情况下,我只需将图像/joomgallery/originals 替换为 images/phocagallery 即可,但在我这个案例中,当我将 Joomgallery 升级到最新的 alpha 版本时,我丢失了真实文件路径,需要验证正确路径。例如,它们可以从 24_12_2021_someevent_202 更改为 24-12-2021-someevent_202。
我们也不应忘记在内容编辑器中通过 Joomgallery 插件插入的图像:
<a href="joomplu:7037"> <img class="jg_photo" style="display: block; margin-left: auto; margin-right: auto;" src="/index.php?option=com_joomgallery&view=image&format=raw&id=7037&type=orig" alt="joomplu:7037" width="537" height="358"
/></a>
我们需要找到并更改它。
下一个是 - 文章中我们有 Joomgallery 插件 - {joomplucat:83 limit=46|columns=3}
其中 83 是 Joomgallery 类别,我们可以使用 PhocaGallery 的类似插件 - 只需安装它,我们就可以使用这个
{phocagallery view=category|categoryid=83|limitstart=0|limitcount=0} or
{phocagallery view=category-masonry|categoryid=83|limitstart=0|limitcount=0}.
更方便的解决方案
现在,我认为更方便的解决方案不是使用单独的图库,而是将所有照片放在例如 images/year2024/new-event/ 文件夹中,并使用标准的 Joomla 字段,我们可以通过这些字段以滑块、幻灯片或迷你图库的形式展示所有活动的照片。在这种情况下,我们不受特定组件的限制,因此文件路径不会改变,除非我们自行删除或通过 FTP 手动更改。
您可以用一些标签标记您放置此类照片图库的所有文章,例如“照片图库”,为此标签创建一个菜单项,并为此类页面创建不同的布局,以便文章博客看起来不同。
附言。现在,这一切中有一个小瑕疵。
在做了所有这些之后,当我手动完成这些操作,特别是更改类别中所有文件的路径时,同事们发给我这个链接 https://gist.github.com/sergeytolkachyov/b212276252a92a69a64067bb75eb55d5。根据作者的说法,这个脚本是为 Joomla 4 定制的,它已经两年了。也许今天,它需要改进。但这可能会极大地简化我的迁移任务。实际上,这里并没有太多非常复杂的事情:)
在 Joomla 社区杂志上发表的一些文章代表了作者对特定主题的个人观点或经验,可能并不符合 Joomla 项目的官方立场
通过接受,您将访问由 https://magazine.joomla.net.cn/ 外部第三方提供的服务。
评论