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.
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.
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