Joomla получить идентификатор плагина - PullRequest
5 голосов
/ 05 декабря 2010

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

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

/ administrator / index.php? option = com_plugins & view = плагин & клиент = сайт & задача = edit & cid [] = 36

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

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

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 09 сентября 2014

Для 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;
}
2 голосов
/ 05 декабря 2010
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;
}

Это добилось цели.

1 голос
/ 02 января 2015

В 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';
}
0 голосов
/ 11 ноября 2012

может быть, этот код полезен для вас, вы можете использовать это в модальном

$urla= JRequest::getVar('id'); // id article 
$urlb=JURI::current(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...