/**
  * Get instance of Zo2Assets
  * @return \Zo2Assets
  */
 public static function getInstance()
 {
     if (!isset(self::$instance)) {
         self::$instance = new Zo2Assets();
     }
     if (isset(self::$instance)) {
         return self::$instance;
     }
 }
 /**
  * Build assets data
  */
 public function buildAssets()
 {
     if ($this->_isAuthorized()) {
         $assets = Zo2Assets::getInstance();
         if ($assets->buildAssets()) {
             $this->_ajax->addMessage(JText::_('ZO2_ADMIN_MESSAGE_BUILD_ASSETS_SUCCESS'), 'success');
         } else {
             $this->_ajax->addMessage(JText::_('ZO2_ADMIN_MESSAGE_BUILD_ASSETS_FAILED'), 'error');
         }
     }
     $this->_ajax->response();
 }
 /**
  * 
  */
 public function onAfterRender()
 {
     if ($this->_isZo2()) {
         $app = JFactory::getApplication();
         $body = JResponse::getBody();
         $jinput = JFactory::getApplication()->input;
         $framework = Zo2Framework::getInstance();
         $assets = Zo2Assets::getInstance();
         $body = str_replace('</body>', $assets->generateAssets('js') . '</body>', $body);
         $body = str_replace('</head>', $assets->generateAssets('css') . '</head>', $body);
         /* Apply back to body */
         JResponse::setBody($body);
     }
 }
 /**
  * Admin layout builder
  * @return type
  */
 public function builder()
 {
     $assets = Zo2Assets::getInstance();
     $assets->addScript('vendor/bootbox-3.3.0.min.js');
     $assets->addScript('zo2/js/adminlayout.min.js');
     $assets->addStyleSheet('vendor/bootstrap/core/css/bootstrap.gridsystem.css');
     /**
      * @uses    Anything need prepred for display will put here. Do not put process code insite layout template file
      */
     $html = new Zo2Html();
     $params = Zo2Framework::getInstance()->template->params;
     $profile = Zo2Factory::getProfile();
     if (is_object($profile->layout)) {
         $layoutData = $profile->layout->layout;
     } else {
         $layoutData = $profile->layout;
     }
     $html->set('params', $params);
     $html->set('layoutData', $layoutData);
     return $html->fetch('admin/body/sidebar/builder/layout.php');
 }
 /**
  *
  */
 protected function _loadTheme()
 {
     /* Template side */
     $templateAssets = json_decode($this->getAssetsFile('template.json'));
     if ($templateAssets && isset($templateAssets->assets)) {
         $this->assets->load($templateAssets->assets);
     }
     $style = array();
     if ($this->profile->theme) {
         $style = $this->profile->getThemeStylesheet();
         $this->assets->addStyleSheetDeclaration($style);
         if (isset($this->profile->theme->css) && $this->profile->theme->css != '') {
             $this->assets->addStyleSheet('zo2/css/' . $this->profile->theme->css . '.css');
         }
     }
     /* Prepare Fonts */
     $selectors = array('body_font' => 'body', 'menu_font' => 'nav, .sidebar-nav', 'h1_font' => 'h1', 'h2_font' => 'h2', 'h3_font' => 'h3', 'h4_font' => 'h4', 'h5_font' => 'h5', 'h6_font' => 'h6');
     /* */
     foreach ($selectors as $key => $selector) {
         $value = $this->get($key);
         if (!empty($value)) {
             $value = new JObject($value);
             switch ($value->get('type')) {
                 case 'standard':
                     $this->_buildStandardFontStyle($value, $selector);
                     break;
                 case 'googlefonts':
                     $this->_buildGoogleFontsStyle($value, $selector);
                     break;
                 case 'fontdeck':
                     $this->_buildFontDeckStyle($value, $selector);
                     break;
                 default:
                     break;
             }
         }
     }
 }
<?php

if (!defined('ZO_MEGAMENU_ASSET')) {
    define('ZO_MEGAMENU_ASSET', 1);
    $assets = Zo2Assets::getInstance();
    $assets->addStylesheet('zo2/css/megamenu.css');
    $assets->addStyleSheet('zo2/css/adminmegamenu.css');
    $assets->addScript('zo2/js/adminmegamenu.min.js');
}
$html = array();
$vars = array();
$calls = array();
$attr = '';
// Get the field options.
$options = (array) JHtml::_('menu.menus');
$html[] = JHtml::_('select.genericlist', $options, $this->data['name'], trim($attr), 'value', 'text', $this->data['value'], $this->data['id']);
?>
<div class="control-group">
    <div class="control-label">
        <label class="zo2-label"><?php 
echo JText::_('ZO2_ADMIN_MEGA_MENU_TYPE');
?>
</label>
        <div class="label-desc"><?php 
echo JText::_('ZO2_ADMIN_MEGA_MENU_TYPE_DESC');
?>
</div>
    </div>
    <div class="controls">
<?php 
echo implode("\n", $html);