2013-10-24 51 views
0

我想创建一个joomla插件,它将一个值插入到Joomla组件的数据库表中。我已经通过Joomla Extension Manager成功构建并安装了该插件,但是当启用该插件时,我看不到在数据库表中插入的值。这是我从插件php代码审查:如何向自定义插件插入值到Joomla 2.5数据库

<?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; 

}   

} 
?> 

编辑更新13年11月7日: 我加入从插件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>[email protected]</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> 

回答

2

对,我对此采取了不同的方法。我使用安装时执行的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>[email protected]</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'); 

我已经通过电子邮件发送给您完整的zip包。

希望这会有所帮助:)

+0

嘿!这很好用!我看到的唯一小问题是,每次在扩展管理器中启用或禁用插件时,都会使插入次数翻倍。所以在初次安装时有一个outkast,然后在启用后有两个outkast行。禁用再次插入2个,共4个?任何想法为什么? – Presto

+0

啊好吧。当插件安装后或者之后,您想要将值插入数据库吗?安装时最好使用 – Lodder

+0

(因为它目前正在运行)。有没有办法使它启用或禁用时不会翻倍? – Presto