web-dev-qa-db-fra.com

Récupérer l'identifiant du plugin

J'ai besoin de récupérer un identifiant de plug-in système et j'utilise le code suivant avec succès.

function getId($folder, $name)
    {
        // Get a database object
        $db = JFactory::getDbo();

        // Create a new query object
        $query = $db->getQuery(true);

        // Select field to get
        $fields = array(
            $db->quoteName('extension_id')
        );

        // Conditions for which record should be get
        $conditions = array(
            $db->quoteName('element') . ' = ' . $db->quote($name), 
            $db->quoteName('folder') . ' = ' . $db->quote($folder)
        );

        // Set the query and load the result
        $query->select($fields)->from($db->quoteName('#__extensions'))->where($conditions);
        $db->setQuery($query);   
        $id = $db->loadResult();

        return $id;
    }

// Set query values
$folder = 'system';
$name   = 'pugin_name';

// Get plugin id
$id = getId($folder, $name);

Ce que j'aimerais savoir, c'est s'il existe une manière meilleure ou plus correcte et appropriée de le faire.

3
n.h.

Cela peut être fait en utilisant le plugin helper

JPluginHelper::getPlugin('user','myplugin')->id;

Cependant, vous voudrez probablement vérifier que getPlugin a renvoyé quelque chose avant d'essayer d'accéder à sa propriété id.

Cela fonctionne dans 3.8.7, mais je ne sais pas quand il a été introduit.

2
Dom

Voici comment je reçois des informations sur les extensions

public function getItemByElement($element, $type, $folder = null)
{
    $dbo = JFactory::getDbo();
    $query = $dbo->getQuery(true);
    $query->select('extension_id, manifest_cache');
    $query->from('#__extensions');

    $query->where('element = '.$dbo->quote($element));
    $query->where('type = '.$dbo->quote($type));

    if($type == 'plugin' && !empty($folder))
    {
        $query->where('folder = '.$dbo->quote($folder));
    }

    $dbo->setQuery($query);
    $extensionRecord = $dbo->loadAssoc();

    if(!is_null($extensionRecord))
    {
            $manifestData = json_decode($extensionRecord['manifest_cache']);
            $extensionRecord['manifest'] = $manifestData;
    }

    return $extensionRecord;
}

Cela vous permettra d'obtenir n'importe quoi dans la table d'extensions

//return a component 
$componentData = getItemByElement('com_content', 'component');

//return a plugin
$pluginData = getItemByElement('codemirror','plugin','editors');

//return a module
$moduleData = getItemByElement('mod_article_archives', 'module');

//return library
$libData = getItemByElement('joomla','library');

Je ne l'ai pas testé sur les langues (je n'en ai pas eu besoin), mais je suis sûr que cela fonctionnera aussi.

Heureux Joomla! Ng = ^ D

1
Mathew Lenning