2010-12-05 3 views
4

Я написал плагин Joomla, который в конечном итоге загрузит библиотеку.Joomla get plugin id

Путь к библиотеке является параметром плагина, как таковые, когда путь неверен, появляется сообщение в серверном, вместе со ссылкой для редактирования параметров плагина:

/администратор/индекса. PHP? вариант = com_plugins & вид = плагин & клиент = сайт & задача = редактировать & чид [] = 36

см 36 в конце? Это мой идентификатор плагина в базе данных (таблица jos_plugins).

Моя проблема заключается в том, что этот идентификатор изменяется при установке, то есть на разных установках, это будет что-то другое. Поэтому мне нужно найти этот идентификатор программно.

Проблема в том, что я не смог найти этот идентификатор из самого объекта плагина (что касается того, почему нет, это было бы, вероятно, недальновидным проектным решением Joomla).

Итак, если вы не знаете о каком-нибудь опрятном трюке, (я проверил и дважды проверил классы JPlugin и JPluginHelper), я буду использовать БД.

Редактировать; Некоторые полезные ссылки:

Guess, я буду использовать мудрость из этой последней ссылки ...

ответ

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

Вы пропустили момент, мне нужно, чтобы получить ** плагин идентификатор **, не ** ** Номер статьи. – 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'; 
}