Widget-uri configurabile

Widget-urile configurabile sunt acele widget-uri care se pot “intoarce pe spate” , unde apare panou de setari per widget+portlet.

Cum se adauga un panel de optiuni pe un widget:

  1. se adauga o noua proprietate in clasa widget-ului :
    public $hasBackside = true;
  2. se intoarce $hasBackside in getReportID()
    return array('id' => $id, 'hasBackside'=>$this->hasBackside,'full_class_name' => get_class() (...)
  3. se intoarce $hasBackside in getContentData(), in $jret:
    $jret['hasBackside'] = $this->hasBackside ? 1 : 0;
  4. se creeaza functia getSettingspanelImage() in clasa widget-ului care randeaza HTML-ul backpanel-ului, si contine si codul de salvare a formei din backpanel; de exemplu:
    public function getSettingspanelImage($uid, $widgetId) {
    
     $reportId = $this->getReportID();
     $model = BriefReportsManager::dspGetModel($reportId,$uid);
    
     // [modifiable] adding widget-specific form fields
     $model->defineAttribute("option_cacId");
     $model->addRule(['option_cacId'], 'integer', ['max' => 100000]);
     $model->setAttributes(BriefReportsManager::getWidgetOptions($widgetId, $uid));
     // [/modifiable]
    
     BriefReportsManager::dspHandleSave($widgetId,$uid,$model);
     BriefReportsManager::dspBeginForm($model,$reportId,$uid);
    
     // [modifiable] adding widget-specific form elements
     print Html::label(Yii::t("app", "Please select an ccount to display in this chart"));
     print "<div class='row border-top-dashed padding-top-20 padding-bottom-20'>";
     $comboboxData = CfoAccountUtils::getAccountsForComboboxes(CfoBi::getAccountsScheme());
     print Select2::widget([
     'model' => $model,
     'theme' => 'material',
     'attribute' => 'option_cacId',
     'data' => $comboboxData['accounts'],
     'options' => ['placeholder' => Yii::t("app", 'Select the account'), 'options' => $comboboxData['accountsDisabled']],
     'pluginOptions' => [
     'allowClear' => TRUE
     , 'escapeMarkup' => new JsExpression("function(m) { return m; }")
     ]
     ]);
     print "</div>";
     // [/modifiable]
    
     BriefReportsManager::dspEndForm($reportId,$uid);
     return TRUE;
    }

     

  5. In getContentData, se tine seama (si) de intervalul de dates fix, daca acesta a fost selectat; de exemplu:
if(@$parameters['option_useCustomTimeframe']>0){
  $dateRange = [$parameters['option_dateStart'],$parameters['option_dateEnd']];
  $title = Yii::$app->formatter->asDate(substr($dateRange[0], 0,10)) . " - " . Yii::$app->formatter->asDate(substr($dateRange[1], 0,10));
}else{
  $dateRange = UserOption::decodeDateRange(Yii::$app->user->identity->getUserOption($companyId, UserOption::ID_DASHBOARD_DATE_RANGE, TRUE));
  $title = "";
}

si mai jos, se afisaza si titlul:

<div style="position:absolute;left:10px;top:10px;z-index:1000;text-align:center;margin-left:auto;margin-right:auto;width:100%;font-style: italic;">' . $title . '</div>

 

Pentru ca setarile sa fie accesibile si din sectiunea Rapoarte -> Rapoarte management:

  1. creeam proprietatea
    public $customFormElements = [];

2. o folosim in getSettingspanelImage(), ca in widget-ul dat de exemplu

 

Note:

  1. In widget-ul tau este suficient sa modifici/adaugi cod doar intre [modifiable] … [/modifiable]. In rest poti copia integral codul.

2. ia ca model widget-ul SinteticAccountEvolution

About

Software Development Manager, Architect

Leave a Reply

Your email address will not be published. Required fields are marked *

[TOP]