Question

In Magento 1.x I was able to read my module's version like so:

(string)Mage::getConfig()->getNode('modules/MyModuleName/version');

I'm unable to figure out how I can do the same in Magento 2.0. Thanks.

Was it helpful?

Solution

You could inject Magento\Framework\Module\ModuleListInterface in to your module helper class and then have a helper function to get it. Something like;

<?php

namespace [Vendor]\[ModuleName]\Helper;

use Magento\Framework\App\Helper\Context;
use Magento\Framework\Module\ModuleListInterface;

class Data extends AbstractHelper
{
    const MODULE_NAME = 'xxx';

    protected $_moduleList;

    public function __construct(
        Context $context,
        ModuleListInterface $moduleList)
    {
        $this->_moduleList = $moduleList;
        parent::__construct($context);
    }

    public function getVersion()
    {
        return $this->_moduleList
            ->getOne(self::MODULE_NAME)['setup_version'];
    }
}

Sorry, i haven't had time to put this in to code and test it thoroughly.

OTHER TIPS

Try following way:

$moduleInfo =  $this->_objectManager->get('Magento\Framework\Module\ModuleList')->getOne('SR_Learning'); // SR_Learning is module name

print_r($moduleInfo);

Output

Array ( [name] => SR_Learning [setup_version] => 2.0.0 [sequence] => Array ( ) )

It's bit different but not that hard.

All you have to do is inject the \Magento\Framework\Module\ModuleListInterface via helper constructor and use that in custom function.

Here is the full working code taken from https://github.com/MagePsycho/magento2-easy-template-path-hints

<?php
namespace MagePsycho\Easypathhints\Helper;

/**
 * Utility Helper
 *
 * @category   MagePsycho
 * @package    MagePsycho_Easypathhints
 * @author     Raj KB <magepsycho@gmail.com>
 * @website    http://www.magepsycho.com
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
    /**
     * @var \Magento\Framework\Module\ModuleListInterface
     */
    protected $_moduleList;

    /**
     * @param \Magento\Framework\App\Helper\Context $context
     * @param \Magento\Framework\Module\ModuleListInterface $moduleList
     */
    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        \Magento\Framework\Module\ModuleListInterface $moduleList
    ) {
        $this->_moduleList              = $moduleList;

        parent::__construct($context);
    }



    public function getExtensionVersion()
    {
        $moduleCode = 'MagePsycho_Easypathhints'; #Edit here with your Namespace_Module
        $moduleInfo = $this->_moduleList->getOne($moduleCode);
        return $moduleInfo['setup_version'];
    }
}

Not sure if i understood your question completely, but you could use n98-magerun2 and then export the result:

n98-magerun2 dev:module:list

All previous answers retrieve the setup version of the extension.
Use code below for getting the composer version of the extension.

Case 1. We'll get version from composer.json file from extension directory

class VersionFinder
{
    public function __construct(
        \Magento\Framework\App\Utility\Files $files
    ) {
        $this->files = $files;
    }

    public function getVersion()
    {
        $pathToNeededModule = '';

        $composerFilePaths = array_keys(
            $this->files->getComposerFiles(\Magento\Framework\Component\ComponentRegistrar::MODULE)
        );

        foreach ($composerFilePaths as $path) {

            //from app/code - may be specific logic
            if (strpos($path, 'MageWorx/Downloads/composer.json')) {
                $pathToNeededModule = $path;
                break;
            }

            //from vendor - may be specific logic
            if (strpos($path, 'mageworx/module-downloads/composer.json')) {
                $pathToNeededModule = $path;
                break;
            }
        }

        if ($pathToNeededModule) {
            $content = file_get_contents($pathToNeededModule);

            if ($content) {
                $jsonContent = json_decode($content, true);

                if (!empty($jsonContent['version'])) {
                    return $jsonContent['version'];
                }
            }
        }

        return null;
    }
}

Case 2. We'll get the extension's version from composer.lock file.
In this case we can get only the versions for extensions which were installed using composer installation. If you find the composer metapackage version - choose this case also.

class ComposerVersionFinder
{
    /**
     * @var \Magento\Framework\Composer\ComposerInformation
     */
    private $composerInformation;


    public function __construct(
        \Magento\Framework\Composer\ComposerInformation $composerInformation       
    ) {
        $this->composerInformation = $composerInformation;
    }

    public function getVersion()
    {
        $data = $this->composerInformation->getInstalledMagentoPackages();

        if (!empty($data['mageworx/module-customergroupprices']['version'])) {
            var_dump($data['mageworx/module-customergroupprices']['version']);
        }
        return null;
    }
}

P.S. The code is executed slowly and I don't advise using this code in the frontend area. I supposed you need it on own extension page in the admin area.

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top