2010-12-05 76 views
4

我写了一个Joomla插件,最终将加载一个库。Joomla获取插件ID

到库中的路径是一个插件参数,因为诸如当路径不正确,消息在后端弹出,与链接在一起以编辑插件参数:

/管理员/索引。 PHP?选项= com_plugins &视图=插件&客户=站点&任务=编辑& CID [] = 36

参见末尾的36?这是我的数据库中的插件ID(表jos_plugins)。

我的问题是,这个id在安装时发生变化,即在不同的安装时,它会是别的。 所以我需要通过编程方式找到这个ID。

问题是,我无法从插件对象本身找到此ID(至于为什么不,这将是joomla的可以说是短视的设计决定)。

所以,除非你知道一些巧妙的技巧,(我已经检查并重复检查JPlugin和JPluginHelper类),否则我将使用数据库。

编辑;一些有用的链接:我会用智慧,从最后一个环节

猜...

回答

2
function getId($folder,$name){ 
    $db=&JFactory::getDBO(); 
    $sql='SELECT `id` FROM `#__plugins` WHERE `folder`="'.$db->getEscaped($folder).'" AND `element`="'.$db->getEscaped($name).'"'; 
    $db->setQuery($sql); 
    if(!($plg=$db->loadObject())){ 
     JError::raiseError(100,'Fatal: Plugin is not installed or your SQL server is NUTS.'); 
    }else return (int)$plg->id; 
} 

这个技巧。

0

也许这代码对您有用,您可以在模式

$urla= JRequest::getVar('id'); // id article 
$urlb=JURI::current(); 
+0

你忽略了一点,我需要去**插件ID **,**不是文章编号**。 – Christian 2012-11-12 01:04:38

3

使用此为Joomla 2.5.X和3.x基督徒的功能改进是;

function getId($folder,$name){ 
    $db= JFactory::getDBO(); 
    $sql='SELECT extension_id FROM #__extensions WHERE folder ="'.$db->getEscaped($folder).'" AND element ="'.$db->getEscaped($name).'"'; 
    $db->setQuery($sql); 
    if(!($plg=$db->loadObject())){ 
     JError::raiseError(100,'Fatal: Plugin is not installed or your SQL server is NUTS.'); 
    }else return (int)$plg->extension_id; 
} 
1

在Joomla 3.x这是方式!

function pluginId($name,$type,$element,$folder) 
{ 
    $db = JFactory::getDBO(); 
    $query = $db->getQuery(true); 
    $query 
     ->select($db->quoteName('a.extension_id')) 
     ->from($db->quoteName('#__extensions', 'a')) 
     ->where($db->quoteName('a.name').' = '.$db->quote($name)) 
     ->where($db->quoteName('a.type').' = '.$db->quote($type)) 
     ->where($db->quoteName('a.element').' = '.$db->quote($element)) 
     ->where($db->quoteName('a.folder').' = '.$db->quote($folder)); 
    $db->setQuery($query); 
    $db->execute(); 
    if($db->getNumRows()){ 
     return $db->loadResult(); 
    } 
    return false; 
} 

然后使用功能:

$pluginId = pluginId('plg_system_getbibleactivitycron','plugin','getbibleactivitycron','system'); 

if($pluginId){ 
    echo 'Plugin id is: '. $pluginId; 
} else { 
    echo 'Plugin not installed'; 
}