【问题标题】:How to Insert Value to Joomla 2.5 DB with Custom Plugin如何使用自定义插件将值插入 Joomla 2.5 DB
【发布时间】:2013-11-03 13:33:52
【问题描述】:

我正在尝试创建一个 joomla 插件,它将一个值插入到 Joomla 组件的数据库表中。我已经通过 Joomla 扩展管理器成功构建并安装了插件,但是当我启用插件时,我没有看到插入到数据库表中的值。这是我的php 代码,来自插件的审查:

<?php
######################################################################
# Outkast Plugin                                                     #
######################################################################

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.plugin.plugin');
jimport( 'joomla.html.parameter');

class plgSystemOutkastplugin extends JPlugin
{
function plgSystemOutkastplugin()
{

$db = JFactory::getDbo();
$name = "http://www.youtube.com/embed/PWgvGjAhvIw?rel=0";

$columns = array('title', 'link_youtube');
$name = "http://www.youtube.com/embed/PWgvGjAhvIw?rel=0";    
$values = array($db->quote('Outkast'), $db->quote($name));

$query->insert($db->quoteName('#__mycomponent_outkastvideos'))
  ->columns($db->quoteName($columns))
  ->values(implode(',', $values));

$db->setQuery($query);
$db->query();

return true;

}        

}
?>

编辑更新 11/07/13: 我正在从插件中添加xml 文件,以帮助为问题提供更多背景信息。最终,我将上面的 php 文件和下面的 xml 组合在一起来创建整个插件包。当我在 Joomla 2.5 站点上安装组件时,它安装时没有错误。然后,当我启用插件时,我得到两个插入数据库的视频实例。当我禁用插件时,我会得到一个插入数据库的视频实例。这不是我所追求的。

理想情况下,当用户安装插件时,我希望它自动启用插件。如果启用了插件,则视频将显示在数据库中。如果插件被禁用,那么视频将不会显示在数据库中。这是当前的xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<install version="1.7" type="plugin" group="system">
<name>Add Outkast</name>
<author>My Name</author>
<creationDate>November 2013</creationDate>
<copyright>Copyright (C) 2013 All rights reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
<authorEmail>my@email.com</authorEmail>
<authorUrl>myURL.com</authorUrl>
<version>1.7</version>
<description>This Plugin adds Outkast's Video Hey Ya.</description>

<files>
    <filename plugin="outkastplugin">outkastplugin.php</filename>
</files>

</install>

【问题讨论】:

    标签: database plugins joomla insert components


    【解决方案1】:

    是的,我对此采取了不同的方法。我使用的是安装时执行的 SQL 文件。

    一切都是这样的:

    结构:

    file - outkastplugin.xml
    file - outkastplugin.php
    folder - sql 
      >> file - install.mysql.utf8.sql
    

    outkastplugin.xml

    <?xml version="1.0" encoding="utf-8"?>
    <extension version="2.5" type="plugin" group="system" method="upgrade">
       <name>Add Outkast</name>
       <author>My Name</author>
       <creationDate>November 2013</creationDate>
       <copyright>Copyright (C) 2013 All rights reserved.</copyright>
       <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
       <authorEmail>my@email.com</authorEmail>
       <authorUrl>myURL.com</authorUrl>
       <version>1.7</version>
       <description>This Plugin adds Outkast's Video Hey Ya.</description>
    
       <files>
          <filename plugin="outkastplugin">outkastplugin.php</filename>
          <folder>sql</folder>
       </files>
    
       <install>
          <sql>
            <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
          </sql>
       </install>
    
    </extension>
    

    outkastplugin.php:

    <?php
    
    defined( '_JEXEC' ) or die( 'Restricted access' );
    
    jimport( 'joomla.plugin.plugin');
    jimport( 'joomla.html.parameter');
    
    class plgSystemOutkastplugin extends JPlugin
    {
    
        function plgSystemOutkastplugin()
        {
    
        }        
    
    }
    ?>
    

    install.mysql.utf8.sql:

    CREATE TABLE IF NOT EXISTS `#__mycomponent_outkastvideos` (
            `id` int(10) NOT NULL AUTO_INCREMENT,
            `title` varchar(255) NOT NULL,
            `link_youtube` varchar(255) NOT NULL,
    
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
    
    INSERT INTO `#__mycomponent_outkastvideos` (`title`, `link_youtube`) VALUES ('Outkast', 'http://www.youtube.com/embed/PWgvGjAhvIw?rel=0');
    

    我已通过电子邮件向您发送了完整的压缩包。

    希望这会有所帮助:)

    【讨论】:

    • 嘿呀!效果很好!我看到的唯一小问题是,每次我在扩展管理器中启用或禁用插件时,插入量都会增加一倍。所以在初始安装时有一个 outkast,然后在启用后有两个 outkast 行。再次禁用会再插入 2 个,总共 4 个?知道为什么吗?
    • 嗯,好的。您想在安装插件时或之后将值插入数据库吗?
    • 什么时候安装是最好的(因为它目前的功能)。有没有办法让它在启用或禁用时不加倍?
    • 感谢更新。我已将&lt;scriptfile&gt; 调用添加到我的xml 就在description 下方。我已经清空了outkastplugin.php 脚本,并根据您的更新将代码移至script.php。现在安装时没有任何反应。会不会是 b/c 我从 outkastplugin.php 中删除了代码?
    • 可能,保留您拥有的 outkastplugin.php 文件原样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2012-05-02
    • 2013-09-11
    • 1970-01-01
    • 2018-02-20
    • 2014-08-21
    • 2015-04-21
    相关资源
    最近更新 更多