将基于MYSQL连接的动态PHP网站转换为CMS的简单方法?

7
我有一个使用PHP语言的网站,可以根据输入的标识符,如.php?id=500,从不同的表中获取特定数据,并将它们放入表格或列表中。 我想知道哪种易于使用的CMS最适合我?我应该如何处理?是否有像Joomla或WordPress这样的简单插件,可以指向特定的表,告诉它标识符列,并告诉它列出与之匹配的每一行?包括其他表?
例如:它从地址表中提取某些内容并列出他们的地址,从信息表中提取某些内容并列出他们的性别和年龄等。
这样,我就可以创建动态页面,更轻松地管理,并具有搜索和索引功能。尝试编写所有代码,但它已经远远超出了我的能力范围。我认为应该有一个CMS可以为我完成所有这些工作。
希望您能理解我的问题,我已经尝试用许多措辞进行搜索。

你想要实现什么目标?是通过某种管理面板不断修改这些表格吗?还是你想将你的应用迁移到CMS上?如果是后者,我建议你手动迁移所有数据,而不是执行某种集成。 - Diego Dorado
11个回答

1

你做出了正确的决定。转移到一个CMS。

我已经成功地将数据(类别、文章和图片)迁移到Joomla安装中,步骤如下:

  1. 从你的CMS中选择相关数据
  2. 如果图片在你的CMS中与文章分开存储,至少在文本前添加一个<p>并在末尾添加剩余部分;

  3. J2.5+支持文章图片和缩略图,但是模板仍未实现它
  4. 除非你需要在文章级别上进行细粒度访问,否则将所有文章指向单个资产ID
  5. 创建一个样例文章,并使用额外的字段填写空白处
  6. 如果可能,请使用适当的IntroText和FullText分离;确保进入每个文本的HTML是自包含的且有效
  7. 验证你的数据是否为UTF-8(否则转换它),然后运行SQL导入
  8. 从文章管理器中选择重建图标以重建资产和ltr-rtl字段

要执行SQL导入,你还需要清除content_frontpage表。

这是一个接收来自其他CMS的行并将其放入Joomla的函数;有一些评论是意大利语,但您应该能够感受到如何做到这一点。 mdc2j是我编写的专用函数,可适当转义数据并更改格式/类别ID等。
function importaArticolo($row) {
    global $link;
    echo "<h3>Importa Articolo ".$row->Id . " (". $row->titolo . ")</h3>";

    /*
        " ('$row->id', '0', 'test', 'test_alias', '', 'tutto il testo riga per riga', ".
        "  '', '0', '0', '0', '111', '2001-01-25 16:30:15', '4', 'la firma', '2001-01-25 16:30:15',  ".
        " '0', '0', '0000-00-00 00:00:00', '2001-01-25 16:30:30', '0000-00-00 00:00:00', 'list of images?', 'list of urls?',  ".
        " '".'{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_vote":"","show_hits":"","show_noauth":"","alternative_readmore":"","article_layout":""}'."', ".
        "  '1', '0', '0', 'kewords', 'key-description',  ".
        " '0', '0',  ".
        " '".'{"robots":"","author":"","rights":"","xreference":""}'."', '0', '*', '');";
        */
    try {
        $idcategory = mdc2jCategory($row->idCanale);
        if ($row->isDossier * 1 == 1) {
            if (1*$idcategory==10) {
                $idcategory= 28;
            }
        }
        $default_user=42;
        $SQL=sprintf(
            "INSERT INTO `".$GLOBALS['db_database_new']."`.`eco_content` (`id`, `asset_id`, `title`, `alias`, `title_alias`, `introtext`, ".
            " `fulltext`, `state`, `sectionid`, `mask`, `catid`, `created`, `created_by`, `created_by_alias`, `modified`,  ".
            " `modified_by`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `images`, `urls`, `attribs`,  ".
            " `version`, `parentid`, `ordering`, `metakey`, `metadesc`, `access`, `hits`, `metadata`, `featured`, `language`,  ".
            " `xreference`)  ".
            " VALUES  ".
            " ('%d', '0', '%s', '%s', '', '%s', ".
            "  '%s', '%d', '0', '0', '%d', '%s', '%d', '%s', '%s',  ".
            " '0', '0', '0000-00-00 00:00:00', '%s', '0000-00-00 00:00:00', '', '',  ".
            " '".'{"show_title":"","link_titles":"","show_intro":"","show_category":"","link_category":"","show_parent_category":"","link_parent_category":"","show_author":"","link_author":"","show_create_date":"","show_modify_date":"","show_publish_date":"","show_item_navigation":"","show_icons":"","show_print_icon":"","show_email_icon":"","show_vote":"","show_hits":"","show_noauth":"","alternative_readmore":"","article_layout":""}'."', ".
            "  '1', '0', '0', '%s', '%s',  ".
            " '%d', '%d',  ".
            " '".'{"robots":"","author":"","rights":"","xreference":""}'."', '%d', '*', '');",
        $row->Id,
        mysql_real_escape_string($row->titolo),
        makeAlias($row->titolo), // alias
        mdc2jSommario($row), // this creates the introtext

        mdc2jText($row), // this returns the text
        $row->idStato=="2"?0:1, // idStato="suspended"
        $idcategory, // correct category id
        mdc2jDate($row->dataCreazione),
        $default_user,
        mdc2jFirma($row->firma),
        mdc2jDate($row->dataCreazione), //2001-01-25 16:30:15
        mdc2jDate($row->dataPubblica), //2001-01-25 16:30:30

        mdc2jMetaKeywords($row), // adds "dossier" if appropriate
        mdc2jMetaDesc($row), // if not assigned, create it automatically
        $row->idStato=="2"?3:1,
        $row->viewCounter,
        0 //featured: (($row->Id % 13) == 0 ? 1 : 0 )
        );


        $res = mysql_query($SQL);

        if ($res) {
            $lastid = mysql_insert_id();
            //echo "Article $lastid ($row->Id) Inserted into DB<br>";
                    // this will import images in a separate tool, an ignite gallery, so it's not really meaningful for you:
            importaImmagini($row->Id, $row->canale, $row->cid);


            return 1;

        }
        else {
            echo "<span class='err'>WARNING: article not inserted in db</span>"."<br>".mysql_errno($link) . ": " . mysql_error($link);
            echo "<textarea cols='80' rows='3'>".$SQL."</textarea><br>";
        }

        return 0;

    }
    catch (Exception $e)
    {
        echo "<span class='err'>Exception! ".$e->getMessage()."</span><br>";
        return 0;
    }
}

0

另一个想法可能是使用Cakephp http://cakephp.org/。Cake可以读取您的数据库模式并生成您需要启动和运行的文件。(如果您有命令行访问权限)。它使用MVC模式,设置相当快速。我个人在许多类似您描述的项目中使用过Cake。

如果不手动操作,将所有帖子移入Wordpress可能会有点困难。但是,如果您不想编写太多代码并且愿意手动移动所有内容,则Wordpress或其他开箱即用的CMS系统可能适合您。


0

有很多CMS解决方案可以为您完成此操作。老实说,如果您已经拥有一个正在运行的网站,只想要一个CMS,那么Joomla或WordPress有点过度了。看看PyroCMS,它正是您所描述的。它非常容易设置和运行,并且有良好的文档。

如果您喜欢Python并对混合解决方案感兴趣,我使用PHP框架作为主站点,Django(使用Python)作为CMS取得了成功。


0

写这个并不是很复杂。实际上,它类似于我的一个内容管理系统的工作方式:我为每个“模块”都有一个类,属性指定要从数据库表中选择记录的列、在概述页面(表标题)中显示的列以及在表单视图(输入)中显示的列。

试图将已经构建好的网站塞进像WordPress或Joomla!这样的CMS中,这些CMS想要为您做所有事情(包括前端网站),这将会非常麻烦。即使您将CMS塞进您的网站并让它工作,它也会变得臃肿不堪。


这是一个非常简单的网站。只有使用php GET查询来显示信息和列出与id关联的所有名称的页面。我在SEO和其他可以轻松与CMS插件集成的东西中感到非常迷失。我希望有一个插件可以做到我描述的事情!如果没有人提供任何插件建议,我想我将学习如何将其编码为一个模块! - ktan
不要被各种不同的事情所迷惑;选择一个方面进行改进,然后重复这个过程。如果有一个插件可以做你要求的事情,那我会感到惊讶,因为这会削弱内容管理系统本身的功能。 - Martin Bean

0
一个比使用cakephp更底层的方法是使用ActiveRecord,它在处理数据库方面非常有帮助。
例如,使用PHP ActiveRecord

0

有四个问号:

Q. 哪个易用的 CMS 是最好的?

A. Wordpress。

我该如何入手?

A. 学习 PHP。

Q. 是否有一个简单的插件类似于 Joomla 或 Wordpress 或其它可以指向特定表,告诉它标识列,并告诉它列出每一行匹配的内容?

A. 可能有。这是 PHP 中的一个简单任务。

Q. 包括其他表吗?

A. 同上。


0

以下是一些可能有用的快捷方式,以实现您想要完成的目标:

如果您当前的网站正在生成RSS聚合链接,则WP-RSS-Multi-Importer看起来很有前途。

如果您当前的网站没有RSS,但您可以通过主机控制面板/ phpmyadmin或通过服务器命令行实用程序(如mysqldump)访问数据库,则可以将数据库导出为CSV或XML,并尝试使用WP-All-Import插件将其导入WordPress。

这需要花费更多时间,因为您需要将数据映射到适当的WordPress字段。

如果您既没有RSS也没有访问数据库,则需要“抓取”您的网站。通常这意味着编码,但有几个WordPress插件可能适合您。这里可能会出现很多问题,所以如果最终产品不是您想要的,请不要感到惊讶。


0

0
不错的问题。既然已经回答了Joomla,那我就来回答一下WordPress吧。我建议创建一个php文件,将所有表格数据导出为xml(RSSWordPress)。然后,您可以使用WordPress导入函数将信息简单地导入WordPress中。
这样,您就可以保留两个表格,并且可以完全将信息导入WordPress中。
如果您感兴趣,我可以根据您的表格格式编写一些代码。
最后,您应该在WordPress Stack Exchange(wordpress.stackexchange.com)上搜索并重新发布您的答案。

-1
  1. 使用WordPress或Joomla或Drupal来设置一个新的内容管理系统。
  2. 编写PHP脚本将你的所有数据库项目导入到该CMS中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接