Create a widget to show on user's dashboard

All the widgets shown on user's dashboard in front end, are nothing but the plugins of 'tjlmsdashboard' type.

You can refer any of the plugins placed in YOUR_SITE/plugins/tjlmsdashbord. 


Here are the steps to be followed to create an widget to be shown of shika dashboard in frontend :

1. Create a plugin of type tjlmsdashboard. (Suppose plugin is custom widget)

 This plugin will have follwowing files/folders

  • customwidget.php (file)
  • customwidget.xml (file)
  • customwidget(folder)
    •  tmpl( folder)
    •  default.php(file)

2. In the customwidget.php following function is mandatory. 

public function customwidgetRenderPluginHTML($plg_data, $layout = 'default')
{
    /*The Function name is derived as PLUGIN_NAME . RenderPluginHTML*/

   /* The $plg_data is an  object, and for now it contains a property user_id having value of logged in user id. */
   /* The $layout is an string having value as default, */

  /*Here you will write some code, to get the data that wil be useful to generate the customwidger blog*/

    $userCourseData = $this->getData($plg_data);

/*Now you have all the required data in $userCourseData and now you have to pass it to a template layout where the html is written*/
 
// Load the layout & push variables
ob_start();
$layout = $this->buildLayoutPath($layout);
include $layout;

$html = ob_get_contents();
ob_end_clean();

return $html;
}

 

/**
* This function will load the layout file from tmpl folder. But if the file is overriden, it will load it from template.
*
* @param ARRAY $layout Layout to be used
*
* @return File path
*
* @since 1.0.0
*/
protected function buildLayoutPath($layout)
{
if (empty($layout))
{
$layout = "default";
}

$app = JFactory::getApplication();
$core_file = dirname(__FILE__) . '/' . $this->_name . '/' . 'tmpl' . '/' . $layout . '.php';
$override = JPATH_BASE . '/templates/' . $app->getTemplate() . '/html/plugins/' . $this->_type . '/' . $this->_name . '/' . $layout . '.php';

if (JFile::exists($override))
{
return $override;
}
else
{
return $core_file;
}
}